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-devel

[Xen-devel] [PATCH 1 of 2] libxl: remove "reg" and "enable" fields from

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 1 of 2] libxl: remove "reg" and "enable" fields from PCI device
From: Ian Campbell <ian.campbell@xxxxxxxxxx>
Date: Thu, 24 Mar 2011 11:49:21 +0000
Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
Delivery-date: Thu, 24 Mar 2011 04:52:58 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1300967360@xxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1300967090 0
# Node ID 3462e0f1f0c1efe035f4d1d24d3659431a6c62c0
# Parent  5bf43a02350bd32c5da0782334132d49a181e41b
libxl: remove "reg" and "enable" fields from PCI device.

The structure of the BDF argument used with PCI passthrough related
hypercalls was taken from the structure of the PCI config_address
register (I/O port 0xCF8) which allows I/O mapped access to PCI
configuration space but these fields have no meaning in the context of
PCI passthrough configuration and hence do not need to be exposed via
libxl.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

diff -r 5bf43a02350b -r 3462e0f1f0c1 tools/libxl/libxl.idl
--- a/tools/libxl/libxl.idl     Thu Mar 24 11:44:50 2011 +0000
+++ b/tools/libxl/libxl.idl     Thu Mar 24 11:44:50 2011 +0000
@@ -243,11 +243,9 @@ libxl_device_net2 = Struct("device_net2"
     ])
 
 libxl_device_pci = Struct("device_pci", [
-    ("reg",       uint8),
     ("func",      uint8),
     ("dev",       uint8),
     ("bus",       uint8),
-    ("enable",    bool),
     ("domain", unsigned_integer),
     ("vdevfn", unsigned_integer),
     ("vfunc_mask", unsigned_integer),
diff -r 5bf43a02350b -r 3462e0f1f0c1 tools/libxl/libxl_pci.c
--- a/tools/libxl/libxl_pci.c   Thu Mar 24 11:44:50 2011 +0000
+++ b/tools/libxl/libxl_pci.c   Thu Mar 24 11:44:50 2011 +0000
@@ -41,29 +41,16 @@
 #define PCI_BDF_SHORT          "%02x:%02x.%01x"
 #define PCI_BDF_VDEVFN         "%04x:%02x:%02x.%01x@%02x"
 
-static unsigned int pcidev_value(libxl_device_pci *pcidev)
+static unsigned int pcidev_encode_bdf(libxl_device_pci *pcidev)
 {
-    union {
-        unsigned int value;
-        struct {
-            unsigned int reserved1:2;
-            unsigned int reg:6;
-            unsigned int func:3;
-            unsigned int dev:5;
-            unsigned int bus:8;
-            unsigned int reserved2:7;
-            unsigned int enable:1;
-        }fields;
-    }u;
+    unsigned int value;
 
-    u.value = 0;
-    u.fields.reg = pcidev->reg;
-    u.fields.func = pcidev->func;
-    u.fields.dev = pcidev->dev;
-    u.fields.bus = pcidev->bus;
-    u.fields.enable = pcidev->enable;
+    value = 0;
+    value |= (pcidev->bus & 0xff) << 16;
+    value |= (pcidev->dev & 0x1f) << (8+3);
+    value |= (pcidev->func & 0x3) << (8+0);
 
-    return u.value;
+    return value;
 }
 
 static int pcidev_init(libxl_device_pci *pcidev, unsigned int domain,
@@ -711,7 +698,7 @@ static int do_pci_add(libxl__gc *gc, uin
     }
 out:
     if (!libxl_is_stubdom(ctx, domid, NULL)) {
-        rc = xc_assign_device(ctx->xch, domid, pcidev_value(pcidev));
+        rc = xc_assign_device(ctx->xch, domid, pcidev_encode_bdf(pcidev));
         if (rc < 0 && (hvm || errno != ENOSYS)) {
             LIBXL__LOG_ERRNOVAL(ctx, LIBXL__LOG_ERROR, rc, "xc_assign_device 
failed");
             return ERROR_FAIL;
@@ -938,7 +925,7 @@ out:
     }
 
     if (!libxl_is_stubdom(ctx, domid, NULL)) {
-        rc = xc_deassign_device(ctx->xch, domid, pcidev_value(pcidev));
+        rc = xc_deassign_device(ctx->xch, domid, pcidev_encode_bdf(pcidev));
         if (rc < 0 && (hvm || errno != ENOSYS))
             LIBXL__LOG_ERRNOVAL(ctx, LIBXL__LOG_ERROR, rc, "xc_deassign_device 
failed");
     }
diff -r 5bf43a02350b -r 3462e0f1f0c1 tools/ocaml/libs/xl/xl_stubs.c
--- a/tools/ocaml/libs/xl/xl_stubs.c    Thu Mar 24 11:44:50 2011 +0000
+++ b/tools/ocaml/libs/xl/xl_stubs.c    Thu Mar 24 11:44:50 2011 +0000
@@ -288,11 +288,9 @@ static int device_pci_val(caml_gc *gc, l
 
        /* FIXME: propagate API change to ocaml */
        u.value = Int_val(Field(v, 0));
-       c_val->reg = u.fields.reg;
        c_val->func = u.fields.func;
        c_val->dev = u.fields.dev;
        c_val->bus = u.fields.bus;
-       c_val->enable = u.fields.enable;
 
        c_val->domain = Int_val(Field(v, 1));
        c_val->vdevfn = Int_val(Field(v, 2));

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

<Prev in Thread] Current Thread [Next in Thread>