]> xenbits.xensource.com Git - libvirt.git/commitdiff
Introduce framework for a hostdev SCSI_host subsystem type
authorEric Farman <farman@linux.vnet.ibm.com>
Tue, 22 Nov 2016 03:58:16 +0000 (22:58 -0500)
committerJohn Ferlan <jferlan@redhat.com>
Thu, 24 Nov 2016 17:15:26 +0000 (12:15 -0500)
We already have a "scsi" hostdev subsys type, which refers to a single
LUN that is passed through to a guest.  But what of things where
multiple LUNs are passed through via a single SCSI HBA, such as with
the vhost-scsi target?  Create a new hostdev subsys type that will
carry this.

Signed-off-by: Eric Farman <farman@linux.vnet.ibm.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/qemu/qemu_cgroup.c
src/qemu/qemu_hotplug.c
src/security/security_apparmor.c
src/security/security_dac.c
src/security/security_selinux.c
tests/domaincapsschemadata/full.xml

index e7517d917726c8e0fde94a7eb3cffe3fd7a6933d..697bc1d2f47f1ee99a877abb5f4e1e8493c801ee 100644 (file)
@@ -648,7 +648,8 @@ VIR_ENUM_IMPL(virDomainHostdevMode, VIR_DOMAIN_HOSTDEV_MODE_LAST,
 VIR_ENUM_IMPL(virDomainHostdevSubsys, VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST,
               "usb",
               "pci",
-              "scsi")
+              "scsi",
+              "scsi_host")
 
 VIR_ENUM_IMPL(virDomainHostdevSubsysPCIBackend,
               VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_LAST,
@@ -662,6 +663,11 @@ VIR_ENUM_IMPL(virDomainHostdevSubsysSCSIProtocol,
               "adapter",
               "iscsi")
 
+VIR_ENUM_IMPL(virDomainHostdevSubsysSCSIHostProtocol,
+              VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_LAST,
+              "none",
+              "vhost")
+
 VIR_ENUM_IMPL(virDomainHostdevCaps, VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST,
               "storage",
               "misc",
@@ -13015,6 +13021,7 @@ virDomainHostdevDefParseXML(virDomainXMLOptionPtr xmlopt,
             if (virXPathBoolean("boolean(./shareable)", ctxt))
                 def->shareable = true;
             break;
+        case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST:
         case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
         case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
             break;
@@ -13898,6 +13905,8 @@ virDomainHostdevMatchSubsys(virDomainHostdevDefPtr a,
             return virDomainHostdevMatchSubsysSCSIiSCSI(a, b);
         else
             return virDomainHostdevMatchSubsysSCSIHost(a, b);
+    case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST:
+        /* Fall through for now */
     case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
         return 0;
     }
index 541b6003c87e0ea12f3513e8b00996fd5b561401..3dfd7803dfa8b476d76db40a80b838f37f784a89 100644 (file)
@@ -294,6 +294,7 @@ typedef enum {
     VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB,
     VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI,
     VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI,
+    VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST,
 
     VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST
 } virDomainHostdevSubsysType;
@@ -368,6 +369,22 @@ struct _virDomainHostdevSubsysSCSI {
     } u;
 };
 
+typedef enum {
+    VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_NONE,
+    VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_VHOST,
+
+    VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_LAST,
+} virDomainHostdevSubsysSCSIHostProtocolType;
+
+VIR_ENUM_DECL(virDomainHostdevSubsysSCSIHostProtocol)
+
+typedef struct _virDomainHostdevSubsysSCSIVHost virDomainHostdevSubsysSCSIVHost;
+typedef virDomainHostdevSubsysSCSIVHost *virDomainHostdevSubsysSCSIVHostPtr;
+struct _virDomainHostdevSubsysSCSIVHost {
+    int protocol; /* enum virDomainHostdevSubsysSCSIHostProtocolType */
+    char *wwpn;
+};
+
 typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys;
 typedef virDomainHostdevSubsys *virDomainHostdevSubsysPtr;
 struct _virDomainHostdevSubsys {
@@ -376,6 +393,7 @@ struct _virDomainHostdevSubsys {
         virDomainHostdevSubsysUSB usb;
         virDomainHostdevSubsysPCI pci;
         virDomainHostdevSubsysSCSI scsi;
+        virDomainHostdevSubsysSCSIVHost scsi_host;
     } u;
 };
 
index 211d0b5af69d631608abd6d4ce26328581d58deb..7a9fc536d442826169996db3e7db11e0ef8751c4 100644 (file)
@@ -398,6 +398,10 @@ qemuSetupHostdevCgroup(virDomainObjPtr vm,
             break;
         }
 
+        case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: {
+            break;
+        }
+
         case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
             break;
         }
@@ -462,6 +466,9 @@ qemuTeardownHostdevCgroup(virDomainObjPtr vm,
         case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
             /* nothing to tear down for SCSI */
             break;
+        case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST:
+            /* nothing to tear down for scsi_host */
+            break;
         case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
             break;
         }
index 5038ce1254bcd3bdddff8001c595124075e21d82..f751c48eb553bfe0dcb8edc37f016f7c7b61e7e8 100644 (file)
@@ -3664,6 +3664,8 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
     case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
         qemuDomainRemoveSCSIHostDevice(driver, vm, hostdev);
         break;
+    case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST:
+        break;
     case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
         break;
     }
index beddf6db05e5bcdf820e9cfa81aa9956f5894f9d..19085ecd37f1e2837948000acb0a9ce9a4f2b900 100644 (file)
@@ -909,6 +909,10 @@ AppArmorSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
         break;
     }
 
+    case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: {
+        /* Fall through for now */
+    }
+
     case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
         ret = 0;
         break;
index fd74e8bc6faa1a4ee3bf0d4d1e0a05b138ba366b..2803962d8e7a25972ec4c759ec28ee048a154f5e 100644 (file)
@@ -676,6 +676,10 @@ virSecurityDACSetHostdevLabel(virSecurityManagerPtr mgr,
         break;
     }
 
+    case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: {
+        /* Fall through for now */
+    }
+
     case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
         ret = 0;
         break;
@@ -805,6 +809,10 @@ virSecurityDACRestoreHostdevLabel(virSecurityManagerPtr mgr,
         break;
     }
 
+    case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: {
+        /* Fall through for now */
+    }
+
     case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
         ret = 0;
         break;
index 89c93dc2ac688a772b6fba005a2398aad0f5f4d9..9870b41c1251048b9e53fe3e59810d9ec03dd0d5 100644 (file)
@@ -1498,6 +1498,10 @@ virSecuritySELinuxSetHostdevSubsysLabel(virSecurityManagerPtr mgr,
         break;
     }
 
+    case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: {
+        /* Fall through for now */
+    }
+
     case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
         ret = 0;
         break;
@@ -1700,6 +1704,10 @@ virSecuritySELinuxRestoreHostdevSubsysLabel(virSecurityManagerPtr mgr,
         break;
     }
 
+    case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: {
+        /* Fall through for now */
+    }
+
     case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
         ret = 0;
         break;
index eaf6eb6c09b787001ca1ad45a4925dc45c7cee2c..6abd4995aa5d9139cd5b5f37439b0cd67a49312e 100644 (file)
@@ -87,6 +87,7 @@
         <value>usb</value>
         <value>pci</value>
         <value>scsi</value>
+        <value>scsi_host</value>
       </enum>
       <enum name='capsType'>
         <value>storage</value>