diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index f26b72e6c7..384710da40 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -16101,6 +16101,12 @@ virDomainDiskIndexByAddress(virDomainDefPtr def, if ((cidx = virDomainControllerFindByPCIAddress(def, pci_address)) >= 0) controller = def->controllers[cidx]; + if (!controller && ccw_addr) { + cidx = virDomainControllerFindByCCWAddress(def, ccw_addr); + if (cidx >= 0) + controller = def->controllers[cidx]; + } + for (i = 0; i < def->ndisks; i++) { vdisk = def->disks[i]; if (vdisk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI && @@ -16734,6 +16740,23 @@ virDomainControllerFindByType(virDomainDefPtr def, return -1; } +int +virDomainControllerFindByCCWAddress(virDomainDefPtr def, + virDomainDeviceCCWAddressPtr addr) +{ + size_t i; + + for (i = 0; i < def->ncontrollers; i++) { + virDomainDeviceInfoPtr info = &def->controllers[i]->info; + + if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW && + virDomainDeviceCCWAddressEqual(&info->addr.ccw, addr)) + return i; + } + + return -1; +} + int virDomainControllerFindByPCIAddress(virDomainDefPtr def, virPCIDeviceAddressPtr addr) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 9944ecfa5f..f49b68e39a 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3464,6 +3464,8 @@ void virDomainControllerInsertPreAlloced(virDomainDefPtr def, virDomainControllerDefPtr controller); int virDomainControllerFind(const virDomainDef *def, int type, int idx); int virDomainControllerFindByType(virDomainDefPtr def, int type); +int virDomainControllerFindByCCWAddress(virDomainDefPtr def, + virDomainDeviceCCWAddressPtr addr); int virDomainControllerFindByPCIAddress(virDomainDefPtr def, virPCIDeviceAddressPtr addr); int virDomainControllerFindUnusedIndex(virDomainDef const *def, int type);