]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemuBuildInterfaceConnect: Connect to 'vdpa' netdev
authorPeter Krempa <pkrempa@redhat.com>
Mon, 9 May 2022 13:34:09 +0000 (15:34 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 16 May 2022 07:15:46 +0000 (09:15 +0200)
Move the setup of the 'vdpa' netdev into the new helper shared between
commandline and hotplug code.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jonathon Jongsma <jjongsma@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_command.c
src/qemu/qemu_command.h
src/qemu/qemu_hotplug.c

index bfaca2afef8ad8edffb57ee6d7c88264c9bf5a0c..07627e3350d22c491824c467615d495c0091b233 100644 (file)
@@ -4213,13 +4213,12 @@ qemuBuildHostNetProps(virDomainNetDef *net,
                       size_t tapfdSize,
                       char **vhostfd,
                       size_t vhostfdSize,
-                      const char *slirpfd,
-                      const char *vdpadev)
+                      const char *slirpfd)
 {
     bool is_tap = false;
     virDomainNetType netType = virDomainNetGetActualType(net);
     size_t i;
-
+    qemuDomainNetworkPrivate *netpriv = QEMU_DOMAIN_NETWORK_PRIVATE(net);
     g_autoptr(virJSONValue) netprops = NULL;
 
     if (net->script && netType != VIR_DOMAIN_NET_TYPE_ETHERNET) {
@@ -4354,8 +4353,10 @@ qemuBuildHostNetProps(virDomainNetDef *net,
 
     case VIR_DOMAIN_NET_TYPE_VDPA:
         /* Caller will pass the fd to qemu with add-fd */
-        if (virJSONValueObjectAdd(&netprops, "s:type", "vhost-vdpa", NULL) < 0 ||
-            virJSONValueObjectAppendString(netprops, "vhostdev", vdpadev) < 0)
+        if (virJSONValueObjectAdd(&netprops,
+                                  "s:type", "vhost-vdpa",
+                                  "s:vhostdev", qemuFDPassGetPath(netpriv->vdpafd),
+                                  NULL) < 0)
             return NULL;
 
         if (net->driver.virtio.queues > 1 &&
@@ -8676,11 +8677,15 @@ qemuInterfaceVhostuserConnect(virCommand *cmd,
 
 
 int
-qemuBuildInterfaceConnect(virDomainObj *vm G_GNUC_UNUSED,
+qemuBuildInterfaceConnect(virDomainObj *vm,
                           virDomainNetDef *net,
                           bool standalone G_GNUC_UNUSED)
 {
+
+    qemuDomainObjPrivate *priv = vm->privateData;
     virDomainNetType actualType = virDomainNetGetActualType(net);
+    qemuDomainNetworkPrivate *netpriv = QEMU_DOMAIN_NETWORK_PRIVATE(net);
+    VIR_AUTOCLOSE vdpafd = -1;
 
     switch (actualType) {
     case VIR_DOMAIN_NET_TYPE_NETWORK:
@@ -8697,6 +8702,11 @@ qemuBuildInterfaceConnect(virDomainObj *vm G_GNUC_UNUSED,
         break;
 
     case VIR_DOMAIN_NET_TYPE_VDPA:
+        if ((vdpafd = qemuInterfaceVDPAConnect(net)) < 0)
+            return -1;
+
+        netpriv->vdpafd = qemuFDPassNew(net->info.alias, priv);
+        qemuFDPassAddFD(netpriv->vdpafd, &vdpafd, "-vdpa");
         break;
 
     case VIR_DOMAIN_NET_TYPE_HOSTDEV:
@@ -8725,7 +8735,6 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver,
                               size_t *nnicindexes,
                               int **nicindexes)
 {
-    qemuDomainObjPrivate *priv = vm->privateData;
     virDomainDef *def = vm->def;
     int ret = -1;
     g_autoptr(virJSONValue) nicprops = NULL;
@@ -8737,7 +8746,6 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver,
     char **tapfdName = NULL;
     char **vhostfdName = NULL;
     g_autofree char *slirpfdName = NULL;
-    g_autoptr(qemuFDPass) vdpa = NULL;
     virDomainNetType actualType = virDomainNetGetActualType(net);
     const virNetDevBandwidth *actualBandwidth;
     bool requireNicdev = false;
@@ -8820,16 +8828,7 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver,
 
         break;
 
-    case VIR_DOMAIN_NET_TYPE_VDPA: {
-        VIR_AUTOCLOSE vdpafd = -1;
-
-        if ((vdpafd = qemuInterfaceVDPAConnect(net)) < 0)
-            goto cleanup;
-
-        vdpa = qemuFDPassNew(net->info.alias, priv);
-
-        qemuFDPassAddFD(vdpa, &vdpafd, "-vdpa");
-    }
+    case VIR_DOMAIN_NET_TYPE_VDPA:
         break;
 
     case VIR_DOMAIN_NET_TYPE_USER:
@@ -8962,14 +8961,13 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver,
         vhostfd[i] = -1;
     }
 
-    if (qemuFDPassTransferCommand(vdpa, cmd) < 0)
+    if (qemuFDPassTransferCommand(netpriv->vdpafd, cmd) < 0)
         return -1;
 
     if (!(hostnetprops = qemuBuildHostNetProps(net,
                                                tapfdName, tapfdSize,
                                                vhostfdName, vhostfdSize,
-                                               slirpfdName,
-                                               qemuFDPassGetPath(vdpa))))
+                                               slirpfdName)))
         goto cleanup;
 
     if (qemuBuildNetdevCommandlineFromJSON(cmd, hostnetprops, qemuCaps) < 0)
index 4b4e0bb4563f8a4abfdd9a3eba67d93695a3b0a0..cae0541445a2cac8a3e73459c03238dc6ff12d8e 100644 (file)
@@ -91,8 +91,7 @@ qemuBuildHostNetProps(virDomainNetDef *net,
                       size_t tapfdSize,
                       char **vhostfd,
                       size_t vhostfdSize,
-                      const char *slirpfd,
-                      const char *vdpadev);
+                      const char *slirpfd);
 
 int
 qemuBuildInterfaceConnect(virDomainObj *vm,
index 221815568b117be122fc5728521258f0c77a52a1..d5bdeb83ae76b7ca3157b331f5c0ba6004eaea84 100644 (file)
@@ -1185,8 +1185,6 @@ qemuDomainAttachNetDevice(virQEMUDriver *driver,
     virErrorPtr originalError = NULL;
     g_autofree char *slirpfdName = NULL;
     int slirpfd = -1;
-    int vdpafd = -1;
-    g_autoptr(qemuFDPass) vdpa = NULL;
     char **tapfdName = NULL;
     int *tapfd = NULL;
     size_t tapfdSize = 0;
@@ -1395,13 +1393,6 @@ qemuDomainAttachNetDevice(virQEMUDriver *driver,
         if (qemuDomainAdjustMaxMemLock(vm, false) < 0)
             goto cleanup;
         adjustmemlock = true;
-
-        if ((vdpafd = qemuInterfaceVDPAConnect(net)) < 0)
-            goto cleanup;
-
-        vdpa = qemuFDPassNew(net->info.alias, priv);
-
-        qemuFDPassAddFD(vdpa, &vdpafd, "-vdpa");
         break;
 
     case VIR_DOMAIN_NET_TYPE_SERVER:
@@ -1463,7 +1454,7 @@ qemuDomainAttachNetDevice(virQEMUDriver *driver,
 
     qemuDomainObjEnterMonitor(driver, vm);
 
-    if (qemuFDPassTransferMonitor(vdpa, priv->mon) < 0) {
+    if (qemuFDPassTransferMonitor(netpriv->vdpafd, priv->mon) < 0) {
         qemuDomainObjExitMonitor(vm);
         goto cleanup;
     }
@@ -1471,7 +1462,7 @@ qemuDomainAttachNetDevice(virQEMUDriver *driver,
     if (!(netprops = qemuBuildHostNetProps(net,
                                            tapfdName, tapfdSize,
                                            vhostfdName, vhostfdSize,
-                                           slirpfdName, qemuFDPassGetPath(vdpa)))) {
+                                           slirpfdName))) {
         qemuDomainObjExitMonitor(vm);
         goto cleanup;
     }
@@ -1611,7 +1602,6 @@ qemuDomainAttachNetDevice(virQEMUDriver *driver,
     VIR_FREE(vhostfdName);
     virDomainCCWAddressSetFree(ccwaddrs);
     VIR_FORCE_CLOSE(slirpfd);
-    VIR_FORCE_CLOSE(vdpafd);
 
     return ret;