From: Shalini Chellathurai Saroja <shalini@xxxxxxxxxxxxxxxxxx> Introduces the vfio-ccw model for mediated devices and prime vfio-ccw devices such that CCW address will be generated. Signed-off-by: Shalini Chellathurai Saroja <shalini@xxxxxxxxxxxxxxxxxx> Reviewed-by: Bjoern Walk <bwalk@xxxxxxxxxxxxx> Reviewed-by: Boris Fiuczynski <fiuczy@xxxxxxxxxxxxx> Reviewed-by: Marc Hartmayer <mhartmay@xxxxxxxxxxxxxxxxxx> Reviewed-by: Stefan Zimmermann <stzi@xxxxxxxxxxxxx> --- docs/schemas/domaincommon.rng | 5 ++++- src/qemu/qemu_domain_address.c | 20 ++++++++++++++++++++ src/util/virmdev.c | 3 ++- src/util/virmdev.h | 1 + 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 0a6b29b..bea2bc0 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -4478,7 +4478,10 @@ <value>mdev</value> </attribute> <attribute name="model"> - <value>vfio-pci</value> + <choice> + <value>vfio-pci</value> + <value>vfio-ccw</value> + </choice> </attribute> <element name="source"> <ref name="mdevaddress"/> diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 50f815c..be0424d 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -282,6 +282,23 @@ qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def) static void +qemuDomainPrimeVfioDeviceAddresses(virDomainDefPtr def, + virDomainDeviceAddressType type) +{ + size_t i; + + for (i = 0; i < def->nhostdevs; i++) { + virDomainHostdevSubsysPtr subsys = &def->hostdevs[i]->source.subsys; + + if (virHostdevIsMdevDevice(def->hostdevs[i]) && + subsys->u.mdev.model == VIR_MDEV_MODEL_TYPE_VFIO_CCW && + def->hostdevs[i]->info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) + def->hostdevs[i]->info->type = type; + } +} + + +static void qemuDomainPrimeVirtioDeviceAddresses(virDomainDefPtr def, virDomainDeviceAddressType type) { @@ -397,6 +414,9 @@ qemuDomainAssignS390Addresses(virDomainDefPtr def, if (qemuDomainIsS390CCW(def) && virQEMUCapsGet(qemuCaps, QEMU_CAPS_CCW)) { + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VFIO_CCW)) + qemuDomainPrimeVfioDeviceAddresses( + def, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW); qemuDomainPrimeVirtioDeviceAddresses( def, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW); diff --git a/src/util/virmdev.c b/src/util/virmdev.c index 536ddbe..6c51388 100644 --- a/src/util/virmdev.c +++ b/src/util/virmdev.c @@ -48,7 +48,8 @@ struct _virMediatedDeviceList { }; VIR_ENUM_IMPL(virMediatedDeviceModel, VIR_MDEV_MODEL_TYPE_LAST, - "vfio-pci") + "vfio-pci", + "vfio-ccw") static virClassPtr virMediatedDeviceListClass; diff --git a/src/util/virmdev.h b/src/util/virmdev.h index 01ab02e..cfda2ca 100644 --- a/src/util/virmdev.h +++ b/src/util/virmdev.h @@ -25,6 +25,7 @@ typedef enum { VIR_MDEV_MODEL_TYPE_VFIO_PCI = 0, + VIR_MDEV_MODEL_TYPE_VFIO_CCW = 1, VIR_MDEV_MODEL_TYPE_LAST } virMediatedDeviceModelType; -- 2.9.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list