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 <shal...@linux.vnet.ibm.com> Reviewed-by: Bjoern Walk <bw...@linux.vnet.ibm.com> Reviewed-by: Boris Fiuczynski <fiu...@linux.vnet.ibm.com> Reviewed-by: Marc Hartmayer <mhart...@linux.vnet.ibm.com> Reviewed-by: Stefan Zimmermann <s...@linux.vnet.ibm.com> --- 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 4cab55f05d..dfb4a3c43a 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -4475,7 +4475,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 8acd5a7b71..1b4d8bf66c 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 27541cf34f..1ac5cb403d 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 01ab02e751..cfda2cacab 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.13.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list