]> xenbits.xensource.com Git - libvirt.git/commitdiff
esx: add pciBridge devices when SCSI is used
authorDawid Zamirski <dzamirski@datto.com>
Mon, 23 May 2016 21:22:53 +0000 (17:22 -0400)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Thu, 26 May 2016 08:55:09 +0000 (10:55 +0200)
When a SCSI controller is present, ESX adds several pciBridge devices
to vmx file. This fixes an error message where it refuses to create VM
due to not enough PCI devices available. This applies only to virtualHW
version >= 7.

src/vmx/vmx.c
tests/xml2vmxdata/xml2vmx-fusion-in-the-wild-1.vmx
tests/xml2vmxdata/xml2vmx-ws-in-the-wild-1.vmx
tests/xml2vmxdata/xml2vmx-ws-in-the-wild-2.vmx

index 68a199f354f71e86ccd80ffd827e2671b7060199..f2ce4bf4638009f5438d1f3b304dbd0afa9f46ec 100644 (file)
@@ -3082,6 +3082,7 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virDomainDe
     int scsi_virtualDev[4] = { -1, -1, -1, -1 };
     bool floppy_present[2] = { false, false };
     unsigned int maxvcpus;
+    bool hasSCSI = false;
 
     if (ctx->formatFileName == NULL) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -3288,6 +3289,8 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virDomainDe
 
     for (i = 0; i < 4; ++i) {
         if (scsi_present[i]) {
+            hasSCSI = true;
+
             virBufferAsprintf(&buffer, "scsi%zu.present = \"true\"\n", i);
 
             if (scsi_virtualDev[i] != -1) {
@@ -3380,6 +3383,26 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virDomainDe
             goto cleanup;
     }
 
+    if (virtualHW_version >= 7 && hasSCSI) {
+        virBufferAddLit(&buffer, "pciBridge0.present = \"true\"\n");
+
+        virBufferAddLit(&buffer, "pciBridge4.present = \"true\"\n");
+        virBufferAddLit(&buffer, "pciBridge4.virtualDev = \"pcieRootPort\"\n");
+        virBufferAddLit(&buffer, "pciBridge4.functions = \"8\"\n");
+
+        virBufferAddLit(&buffer, "pciBridge5.present = \"true\"\n");
+        virBufferAddLit(&buffer, "pciBridge5.virtualDev = \"pcieRootPort\"\n");
+        virBufferAddLit(&buffer, "pciBridge5.functions = \"8\"\n");
+
+        virBufferAddLit(&buffer, "pciBridge6.present = \"true\"\n");
+        virBufferAddLit(&buffer, "pciBridge6.virtualDev = \"pcieRootPort\"\n");
+        virBufferAddLit(&buffer, "pciBridge6.functions = \"8\"\n");
+
+        virBufferAddLit(&buffer, "pciBridge7.present = \"true\"\n");
+        virBufferAddLit(&buffer, "pciBridge7.virtualDev = \"pcieRootPort\"\n");
+        virBufferAddLit(&buffer, "pciBridge7.functions = \"8\"\n");
+    }
+
     /* Get final VMX output */
     if (virBufferCheckError(&buffer) < 0)
         goto cleanup;
index 56932101c8b83de0a8ddf112168345145ce6b48a..ab09bc926d73b6fa153e1ef45a800e66600a51f9 100644 (file)
@@ -28,3 +28,16 @@ ethernet1.addressType = "generated"
 ethernet1.generatedAddress = "00:0c:29:3b:64:f4"
 ethernet1.generatedAddressOffset = "0"
 svga.vramSize = "4194304"
+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"
index 4211a67e6208ec426a8bf299864e604bd4eb30b0..acdf7721a9e2ded31c44a6117a5c9e10418b0413 100644 (file)
@@ -20,3 +20,16 @@ ethernet0.addressType = "static"
 ethernet0.address = "00:90:b9:dc:ea:81"
 ethernet0.checkMACAddress = "false"
 svga.vramSize = "4194304"
+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"
index ad68df960b82781ae9a4bf33d80977230b03cd39..50866054673c47d449791ef8f595e78b247a22e0 100644 (file)
@@ -20,3 +20,16 @@ ethernet0.addressType = "static"
 ethernet0.address = "00:90:b9:dc:ea:81"
 ethernet0.checkMACAddress = "false"
 svga.vramSize = "4194304"
+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"