qemu/include
Alex Williamson 7df9381b7a vfio: Add sysfsdev property for pci & platform
vfio-pci currently requires a host= parameter, which comes in the
form of a PCI address in [domain:]<bus:slot.function> notation.  We
expect to find a matching entry in sysfs for that under
/sys/bus/pci/devices/.  vfio-platform takes a similar approach, but
defines the host= parameter to be a string, which can be matched
directly under /sys/bus/platform/devices/.  On the PCI side, we have
some interest in using vfio to expose vGPU devices.  These are not
actual discrete PCI devices, so they don't have a compatible host PCI
bus address or a device link where QEMU wants to look for it.  There's
also really no requirement that vfio can only be used to expose
physical devices, a new vfio bus and iommu driver could expose a
completely emulated device.  To fit within the vfio framework, it
would need a kernel struct device and associated IOMMU group, but
those are easy constraints to manage.

To support such devices, which would include vGPUs, that honor the
VFIO PCI programming API, but are not necessarily backed by a unique
PCI address, add support for specifying any device in sysfs.  The
vfio API already has support for probing the device type to ensure
compatibility with either vfio-pci or vfio-platform.

With this, a vfio-pci device could either be specified as:

-device vfio-pci,host=02:00.0

or

-device vfio-pci,sysfsdev=/sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.0

or even

-device vfio-pci,sysfsdev=/sys/bus/pci/devices/0000:02:00.0

When vGPU support comes along, this might look something more like:

-device vfio-pci,sysfsdev=/sys/devices/virtual/intel-vgpu/vgpu0@0000:00:02.0

NB - This is only a made up example path

The same change is made for vfio-platform, specifying sysfsdev has
precedence over the old host option.

Tested-by: Eric Auger <eric.auger@linaro.org>
Reviewed-by: Eric Auger <eric.auger@linaro.org>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
2016-03-10 09:39:07 -07:00
..
block include: Clean up includes 2016-02-23 12:43:05 +00:00
crypto include: Clean up includes 2016-02-23 12:43:05 +00:00
disas disas: Add print_insn to disassemble info 2015-07-09 15:20:40 +02:00
exec exec: Pass RAMBlock pointer to qemu_ram_free 2016-03-07 13:26:37 +01:00
fpu include: Clean up includes 2016-02-23 12:43:05 +00:00
hw vfio: Add sysfsdev property for pci & platform 2016-03-10 09:39:07 -07:00
io include: Clean up includes 2016-02-23 12:43:05 +00:00
libdecnumber include: Clean up includes 2016-02-23 12:43:05 +00:00
migration migration (ordinary): move bdrv_invalidate_cache_all of of coroutine context 2016-02-26 20:39:50 +05:30
monitor qom: add helpers for UserCreatable object types 2016-02-16 17:12:57 +01:00
net filter: Add 'status' property for filter object 2016-03-08 15:34:18 +08:00
qapi include: Clean up includes 2016-02-23 12:43:05 +00:00
qemu typedefs: Add CPUState 2016-03-01 13:27:09 +00:00
qom typedefs: Add CPUState 2016-03-01 13:27:09 +00:00
standard-headers linux-headers: update from kvm/next 2015-12-17 15:24:34 +01:00
sysemu rng: switch request queue to QSIMPLEQ 2016-03-08 12:54:14 +05:30
ui input: linux evdev support 2016-03-08 12:20:11 +01:00
config.h include: Clean up includes 2016-02-23 12:43:05 +00:00
elf.h include: Clean up includes 2016-02-23 12:43:05 +00:00
glib-compat.h glib: add compatibility interface for g_hash_table_add() 2015-10-30 09:01:03 +01:00
qemu-common.h cutils: add avx2 instruction optimization 2016-03-08 16:53:26 +05:30
qemu-io.h qemu-io: Use BlockBackend 2015-02-16 15:07:19 +00:00
qjson.h QJSON: Add JSON writer 2015-02-05 17:16:14 +01:00
trace-tcg.h trace: [tcg] Generate TCG tracing routines 2014-08-12 14:26:12 +01:00
trace.h trace: [tcg] Include event definitions in "trace.h" 2014-08-12 14:26:12 +01:00