diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 939fa840ab..8027a7bba6 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -3246,6 +3246,35 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virDomainDe virBufferAsprintf(&buffer, "numvcpus = \"%d\"\n", maxvcpus); + if (def->cpu) { + unsigned int calculated_vcpus; + + if (def->cpu->mode != VIR_CPU_MODE_CUSTOM) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Expecting domain XML CPU mode 'custom' but " + "found '%s'"), + virCPUModeTypeToString(def->cpu->mode)); + goto cleanup; + } + + if (def->cpu->threads != 1) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Only 1 thread per core is supported")); + goto cleanup; + } + + calculated_vcpus = def->cpu->sockets * def->cpu->cores; + if (calculated_vcpus != maxvcpus) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Expecting domain XML CPU sockets per core as %d " + "but found %d"), + maxvcpus, calculated_vcpus); + goto cleanup; + } + + virBufferAsprintf(&buffer, "cpuid.coresPerSocket = \"%d\"\n", def->cpu->cores); + } + /* def:cpumask -> vmx:sched.cpu.affinity */ if (def->cpumask && virBitmapSize(def->cpumask) > 0) { int bit; diff --git a/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-9.vmx b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-9.vmx new file mode 100644 index 0000000000..f92650f7ea --- /dev/null +++ b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-9.vmx @@ -0,0 +1,39 @@ +.encoding = "UTF-8" +config.version = "8" +virtualHW.version = "10" +guestOS = "other-64" +uuid.bios = "42 00 93 72 17 da be 73-77 9d 00 7c cf 1b d2 28" +displayName = "v2v-windows-kkulkarn" +annotation = "MIQ GUID=b55c806d-99b9-4fa5-bbcc-a4de04f822e5" +memsize = "16384" +numvcpus = "16" +cpuid.coresPerSocket = "4" +sched.cpu.shares = "normal" +scsi0.present = "true" +scsi0.virtualDev = "lsisas1068" +scsi0:0.present = "true" +scsi0:0.deviceType = "scsi-hardDisk" +scsi0:0.fileName = "/vmfs/volumes/datastore/directory/v2v-windows-kkulkarn.vmdk" +floppy0.present = "false" +floppy1.present = "false" +ethernet0.present = "true" +ethernet0.virtualDev = "vmxnet3" +ethernet0.networkName = "VM Network" +ethernet0.connectionType = "bridged" +ethernet0.addressType = "vpx" +ethernet0.generatedAddress = "00:50:56:80:b3:81" +svga.vramSize = "8388608" +pciBridge0.present = "true" +pciBridge4.present = "true" +pciBridge4.virtualDev = "pcieRootPort" +pciBridge4.functions = "8" +pciBridge5.present = "true" +pciBridge5.virtualDev = "pcieRootPort" +pciBridge5.functions = "8" +pciBridge6.present = "true" +pciBridge6.virtualDev = "pcieRootPort" +pciBridge6.functions = "8" +pciBridge7.present = "true" +pciBridge7.virtualDev = "pcieRootPort" +pciBridge7.functions = "8" +vmci0.present = "true" diff --git a/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-9.xml b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-9.xml new file mode 100644 index 0000000000..f1fe6dd4c9 --- /dev/null +++ b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-9.xml @@ -0,0 +1,37 @@ + + v2v-windows-kkulkarn + 42009372-17da-be73-779d-007ccf1bd228 + MIQ GUID=b55c806d-99b9-4fa5-bbcc-a4de04f822e5 + 16777216 + 16777216 + 16 + + 16000 + + + hvm + + + + + + destroy + restart + destroy + + + + +
+ + + + + + + + + + diff --git a/tests/xml2vmxtest.c b/tests/xml2vmxtest.c index 7b01151974..f6bcd7b012 100644 --- a/tests/xml2vmxtest.c +++ b/tests/xml2vmxtest.c @@ -279,6 +279,7 @@ mymain(void) DO_TEST("esx-in-the-wild-5", "esx-in-the-wild-5", 4); DO_TEST("esx-in-the-wild-6", "esx-in-the-wild-6", 4); DO_TEST("esx-in-the-wild-7", "esx-in-the-wild-7", 4); + DO_TEST("esx-in-the-wild-9", "esx-in-the-wild-9", 10); DO_TEST("gsx-in-the-wild-1", "gsx-in-the-wild-1", 4); DO_TEST("gsx-in-the-wild-2", "gsx-in-the-wild-2", 4);