WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] libxl: Remove a passthrough device throug

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] libxl: Remove a passthrough device through QMP.
From: Xen patchbot-unstable <patchbot@xxxxxxx>
Date: Fri, 11 Nov 2011 04:33:20 +0000
Delivery-date: Thu, 10 Nov 2011 20:35:47 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Anthony PERARD <anthony.perard@xxxxxxxxxx>
# Date 1320420890 0
# Node ID 604a90b803d34faa083988771c858dee1efe1a53
# Parent  e22e108e1c57e10b2eec3697a5f60eff601272f1
libxl: Remove a passthrough device through QMP.

Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
---


diff -r e22e108e1c57 -r 604a90b803d3 tools/libxl/libxl_pci.c
--- a/tools/libxl/libxl_pci.c   Fri Nov 04 15:34:50 2011 +0000
+++ b/tools/libxl/libxl_pci.c   Fri Nov 04 15:34:50 2011 +0000
@@ -863,13 +863,45 @@
     return rc;
 }
 
+static int qemu_pci_remove_xenstore(libxl__gc *gc, uint32_t domid,
+                                    libxl_device_pci *pcidev, int force)
+{
+    libxl_ctx *ctx = libxl__gc_owner(gc);
+    char *state;
+    char *path;
+
+    path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/state", domid);
+    state = libxl__xs_read(gc, XBT_NULL, path);
+    path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/parameter", 
domid);
+    libxl__xs_write(gc, XBT_NULL, path, PCI_BDF, pcidev->domain,
+                    pcidev->bus, pcidev->dev, pcidev->func);
+    path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/command", 
domid);
+
+    /* Remove all functions at once atomically by only signalling
+     * device-model for function 0 */
+    if ( !force && (pcidev->vdevfn & 0x7) == 0 ) {
+        xs_write(ctx->xsh, XBT_NULL, path, "pci-rem", strlen("pci-rem"));
+        if (libxl__wait_for_device_model(gc, domid, "pci-removed",
+                                         NULL, NULL, NULL) < 0) {
+            LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Device Model didn't respond in 
time");
+            /* This depends on guest operating system acknowledging the
+             * SCI, if it doesn't respond in time then we may wish to
+             * force the removal.
+             */
+            return ERROR_FAIL;
+        }
+    }
+    path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/state", domid);
+    xs_write(ctx->xsh, XBT_NULL, path, state, strlen(state));
+
+    return 0;
+}
+
 static int do_pci_remove(libxl__gc *gc, uint32_t domid,
                          libxl_device_pci *pcidev, int force)
 {
     libxl_ctx *ctx = libxl__gc_owner(gc);
     libxl_device_pci *assigned;
-    char *path;
-    char *state;
     int hvm = 0, rc, num;
     int stubdomid = 0;
 
@@ -892,29 +924,21 @@
                                          NULL, NULL, NULL) < 0)
             goto out_fail;
 
-        path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/state", 
domid);
-        state = libxl__xs_read(gc, XBT_NULL, path);
-        path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/parameter", 
domid);
-        libxl__xs_write(gc, XBT_NULL, path, PCI_BDF, pcidev->domain,
-                       pcidev->bus, pcidev->dev, pcidev->func);
-        path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/command", 
domid);
-
-        /* Remove all functions at once atomically by only signalling
-         * device-model for function 0 */
-        if ( !force && (pcidev->vdevfn & 0x7) == 0 ) {
-            xs_write(ctx->xsh, XBT_NULL, path, "pci-rem", strlen("pci-rem"));
-            if (libxl__wait_for_device_model(gc, domid, "pci-removed",
-                                             NULL, NULL, NULL) < 0) {
-                LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Device Model didn't respond 
in time");
-                /* This depends on guest operating system acknowledging the
-                 * SCI, if it doesn't respond in time then we may wish to
-                 * force the removal.
-                 */
-                goto out_fail;
-            }
+        switch (libxl__device_model_version_running(gc, domid)) {
+        case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL:
+            rc = qemu_pci_remove_xenstore(gc, domid, pcidev, force);
+            break;
+        case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
+            rc = libxl__qmp_pci_del(gc, domid, pcidev);
+            break;
+        default:
+            rc = ERROR_INVAL;
+            goto out_fail;
         }
-        path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/state", 
domid);
-        xs_write(ctx->xsh, XBT_NULL, path, state, strlen(state));
+        if (rc) {
+            rc = ERROR_FAIL;
+            goto out_fail;
+        }
         break;
     case LIBXL_DOMAIN_TYPE_PV:
     {

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] libxl: Remove a passthrough device through QMP., Xen patchbot-unstable <=