OrangePi_CM5/Documentation/driver-api
Jason Gunthorpe a2fbf4acd2 vfio: Split creation of a vfio_device into init and register ops
[ Upstream commit 0bfc6a4ea63c2adac71a824397ef48f28dbc5e47 ]

This makes the struct vfio_device part of the public interface so it
can be used with container_of and so forth, as is typical for a Linux
subystem.

This is the first step to bring some type-safety to the vfio interface by
allowing the replacement of 'void *' and 'struct device *' inputs with a
simple and clear 'struct vfio_device *'

For now the self-allocating vfio_add_group_dev() interface is kept so each
user can be updated as a separate patch.

The expected usage pattern is

  driver core probe() function:
     my_device = kzalloc(sizeof(*mydevice));
     vfio_init_group_dev(&my_device->vdev, dev, ops, mydevice);
     /* other driver specific prep */
     vfio_register_group_dev(&my_device->vdev);
     dev_set_drvdata(dev, my_device);

  driver core remove() function:
     my_device = dev_get_drvdata(dev);
     vfio_unregister_group_dev(&my_device->vdev);
     /* other driver specific tear down */
     kfree(my_device);

Allowing the driver to be able to use the drvdata and vfio_device to go
to/from its own data.

The pattern also makes it clear that vfio_register_group_dev() must be
last in the sequence, as once it is called the core code can immediately
start calling ops. The init/register gap is provided to allow for the
driver to do setup before ops can be called and thus avoid races.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Liu Yi L <yi.l.liu@intel.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Message-Id: <3-v3-225de1400dfc+4e074-vfio1_jgg@nvidia.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-08-21 15:16:07 +02:00
..
80211
…
acpi
…
backlight
…
dmaengine
…
driver-model
…
early-userspace
…
firmware
…
fpga
…
gpio
…
i3c
…
iio
…
md
…
media
…
mei
…
memory-devices
…
mmc
…
mtd
…
nfc
…
nvdimm
…
pci
…
phy
…
pldmfw
…
pm
…
rapidio
…
serial
…
soundwire
…
thermal
…
usb
…
xilinx
…
basics.rst
…
clk.rst
…
component.rst
…
connector.rst
…
console.rst
…
dcdbas.rst
…
devfreq.rst
…
device-io.rst
…
device_link.rst
…
dma-buf.rst
…
edac.rst
…
eisa.rst
…
firewire.rst Documentation: fix firewire.rst ABI file path error 2022-01-27 10:54:29 +01:00
frame-buffer.rst
…
generic-counter.rst
…
hsi.rst
…
i2c.rst
…
index.rst
…
infiniband.rst
…
infrastructure.rst
…
input.rst
…
interconnect.rst
…
io-mapping.rst
…
io_ordering.rst
…
ioctl.rst
…
ipmb.rst
…
ipmi.rst
…
isa.rst
…
isapnp.rst
…
libata.rst
…
lightnvm-pblk.rst
…
mailbox.rst
…
men-chameleon-bus.rst
…
message-based.rst
…
misc_devices.rst
…
miscellaneous.rst
…
mtdnand.rst
…
ntb.rst
…
nvmem.rst
…
parport-lowlevel.rst
…
pinctl.rst
…
pps.rst
…
pti_intel_mid.rst
…
ptp.rst
…
pwm.rst
…
regulator.rst
…
rfkill.rst
…
s390-drivers.rst
…
scsi.rst
…
slimbus.rst
…
sm501.rst
…
spi.rst
…
switchtec.rst
…
sync_file.rst
…
target.rst
…
uio-howto.rst
…
vfio-mediated-device.rst
…
vfio.rst vfio: Split creation of a vfio_device into init and register ops 2022-08-21 15:16:07 +02:00
vme.rst
…
w1.rst
…
xillybus.rst
…
zorro.rst
…