]> xenbits.xensource.com Git - libvirt.git/commitdiff
add hostdev pci backend type for xen
authorChunyan Liu <cyliu@suse.com>
Thu, 6 Mar 2014 08:44:22 +0000 (16:44 +0800)
committerDaniel P. Berrange <berrange@redhat.com>
Wed, 12 Mar 2014 17:03:23 +0000 (17:03 +0000)
Add VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN. For legacy xen, it will use "pciback" as
stub driver.

docs/schemas/domaincommon.rng
src/conf/domain_conf.c
src/conf/domain_conf.h
src/libxl/libxl_domain.c
src/qemu/qemu_command.c
src/qemu/qemu_hostdev.c
src/qemu/qemu_hotplug.c
src/util/virhostdev.c

index 601e7ac6570a472edfd5c485ff562465791f0536..bcd814273ce977142cb30b7ed1e811dec26a7cc8 100644 (file)
             <choice>
               <value>kvm</value>
               <value>vfio</value>
+              <value>xen</value>
             </choice>
           </attribute>
           <empty/>
index e1b0115fb3fc16c7ed0f614cf19c7bb2e85a31e3..109705b9f1012e791dd7160da428fed51efd641d 100644 (file)
@@ -627,7 +627,8 @@ VIR_ENUM_IMPL(virDomainHostdevSubsysPciBackend,
               VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_LAST,
               "default",
               "kvm",
-              "vfio")
+              "vfio",
+              "xen")
 
 VIR_ENUM_IMPL(virDomainHostdevCaps, VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST,
               "storage",
index 82d4c618124810ff1aa240340bfdecfa9f0d8550..37191a8cb795572c152526a889c36d9b9d0b7fa8 100644 (file)
@@ -415,6 +415,7 @@ typedef enum {
     VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT, /* detect automaticaly, prefer VFIO */
     VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM,    /* force legacy kvm style */
     VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO,   /* force vfio */
+    VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN,    /* force legacy xen style, use pciback */
 
     VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_LAST
 } virDomainHostdevSubsysPciBackendType;
index fdc4661ece5697aeb779a525da4af71e32da02bd..274fb6c8845d0c47a5d921934abe31181f76d51c 100644 (file)
@@ -478,6 +478,15 @@ libxlDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
         STRNEQ(def->os.type, "hvm"))
         dev->data.chr->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN;
 
+    if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
+        virDomainHostdevDefPtr hostdev = dev->data.hostdev;
+
+        if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
+            hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI &&
+            hostdev->source.subsys.u.pci.backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT)
+            hostdev->source.subsys.u.pci.backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN;
+    }
+
     return 0;
 }
 
index dbb8499bf72afdca3cf8ee290a2b9542a851ce46..aa1a3db2fbfc41927a81b8824ede2fad6913007a 100644 (file)
@@ -5544,8 +5544,7 @@ qemuBuildPCIHostdevDevStr(virDomainDefPtr def,
         virBufferAddLit(&buf, "vfio-pci");
         break;
 
-    case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT:
-    case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_LAST:
+    default:
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("invalid PCI passthrough type '%s'"),
                        virDomainHostdevSubsysPciBackendTypeToString(backend));
index 2b4d9f2e1081a07bfd4df7475a6e3dafc0f15a81..e1ec4e61b7de56aefcb40d4142161d72ea3cf008 100644 (file)
@@ -205,6 +205,7 @@ qemuPrepareHostdevPCICheckSupport(virDomainHostdevDefPtr *hostdevs,
 
             break;
 
+        case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN:
         case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_LAST:
             break;
         }
index eec09b3d571ca647ab2cc1ac02bedb2b5ca2a826..0226e5d5f2fb548c29bbdf85dffd2cf435e550b0 100644 (file)
@@ -1199,9 +1199,7 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver,
         virProcessSetMaxMemLock(vm->pid, memKB * 1024);
         break;
 
-    case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT:
-    case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM:
-    case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_LAST:
+    default:
         break;
     }
 
index 48df519734d86cb3738a20651a8867715dc08f48..9fe1062cbb3aa97e5253c340a264669b2033d30e 100644 (file)
@@ -170,6 +170,12 @@ virHostdevGetPCIHostDeviceList(virDomainHostdevDefPtr *hostdevs, int nhostdevs)
                 virObjectUnref(list);
                 return NULL;
             }
+        } else if (hostdev->source.subsys.u.pci.backend
+                   == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN) {
+            if (virPCIDeviceSetStubDriver(dev, "pciback") < 0) {
+                virObjectUnref(list);
+                return NULL;
+            }
         } else {
             if (virPCIDeviceSetStubDriver(dev, "pci-stub") < 0) {
                 virObjectUnref(list);
@@ -819,6 +825,10 @@ virHostdevUpdateActivePCIDevices(virHostdevManagerPtr mgr,
             == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO) {
             if (virPCIDeviceSetStubDriver(dev, "vfio-pci") < 0)
                 goto cleanup;
+        } else if (hostdev->source.subsys.u.pci.backend
+                   == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN) {
+            if (virPCIDeviceSetStubDriver(dev, "pciback") < 0)
+                goto cleanup;
         } else {
             if (virPCIDeviceSetStubDriver(dev, "pci-stub") < 0)
                 goto cleanup;