From: Michal Privoznik <mprivozn@redhat.com> Currently, the VMX driver ignores SATA controllers without disks plugged in (even though they are present in the .vmx file) and adds some "random" ones after SATA disks are parsed. Well, those controllers from the file are visible to the guest so add those to the domain definition instead. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/vmx/vmx.c | 40 +++++++++++------------- tests/vmx2xmldata/esx-in-the-wild-16.xml | 1 + tests/vmx2xmldata/esx-in-the-wild-9.xml | 1 + 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 92b55307de..bc4c69ad6a 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -589,7 +589,11 @@ virVMXParseSCSIController(virDomainDef *def, virConf *conf, int controllerIdx, bool *present); -static int virVMXParseSATAController(virConf *conf, int controller, bool *present); +static int +virVMXParseSATAController(virDomainDef *def, + virConf *conf, + int controllerIdx, + bool *present); static int virVMXParseNVMEController(virConf *conf, int controller, bool *present); static int virVMXParseDisk(virVMXContext *ctx, virDomainXMLOption *xmlopt, virConf *conf, int device, int busType, @@ -1447,7 +1451,6 @@ virVMXParseConfig(virVMXContext *ctx, virCPUDef *cpu = NULL; char *firmware = NULL; g_autofree char *nvram = NULL; - size_t saved_ndisks = 0; if (ctx->parseFileName == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", @@ -1807,15 +1810,9 @@ virVMXParseConfig(virVMXContext *ctx, } } - /* add all the SCSI controllers we've seen, up until the last one that is - * currently used by a disk */ - if (def->ndisks != 0) { - saved_ndisks = def->ndisks; - } - /* def:disks (sata) */ for (controller = 0; controller < 4; ++controller) { - if (virVMXParseSATAController(conf, controller, &present) < 0) { + if (virVMXParseSATAController(def, conf, controller, &present) < 0) { goto cleanup; } @@ -1845,14 +1842,6 @@ virVMXParseConfig(virVMXContext *ctx, } } - /* add all the SATA controllers we've seen, up until the last one that is - * currently used by a disk */ - if (def->ndisks - saved_ndisks != 0) { - virDomainDeviceInfo *info = &def->disks[def->ndisks - 1]->info; - for (controller = 0; controller <= info->addr.drive.controller; controller++) - virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_SATA, controller, -1); - } - /* def:disks (ide) */ for (bus = 0; bus < 2; ++bus) { for (unit = 0; unit < 2; ++unit) { @@ -2242,22 +2231,31 @@ virVMXParseSCSIController(virDomainDef *def, static int -virVMXParseSATAController(virConf *conf, int controller, bool *present) +virVMXParseSATAController(virDomainDef *def, + virConf *conf, + int controllerIdx, + bool *present) { char present_name[32]; - if (controller < 0 || controller > 3) { + if (controllerIdx < 0 || controllerIdx > 3) { virReportError(VIR_ERR_INTERNAL_ERROR, _("SATA controller index %1$d out of [0..3] range"), - controller); + controllerIdx); return -1; } - g_snprintf(present_name, sizeof(present_name), "sata%d.present", controller); + g_snprintf(present_name, sizeof(present_name), "sata%d.present", controllerIdx); if (virVMXGetConfigBoolean(conf, present_name, present, false, true) < 0) return -1; + if (!*present) + return 0; + + virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_SATA, + controllerIdx, -1); + return 0; } diff --git a/tests/vmx2xmldata/esx-in-the-wild-16.xml b/tests/vmx2xmldata/esx-in-the-wild-16.xml index 2ff3a74d5f..c0f430e617 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-16.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-16.xml @@ -29,6 +29,7 @@ <controller type='scsi' index='0' model='vmpvscsi'> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </controller> + <controller type='sata' index='0'/> <controller type='nvme' index='0'/> <interface type='bridge'> <mac address='00:50:56:a0:a6:7e' type='generated'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-9.xml b/tests/vmx2xmldata/esx-in-the-wild-9.xml index 7aff055ed3..a1a66bef5f 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-9.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-9.xml @@ -29,6 +29,7 @@ <controller type='scsi' index='0' model='lsisas1068'> <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> </controller> + <controller type='sata' index='0'/> <interface type='bridge'> <mac address='00:50:56:80:b3:81' type='generated'/> <source bridge='VM Network'/> -- 2.54.0