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: Mon, 21 Mar 2011 16:13:56 +0000
Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
Delivery-date: Mon, 21 Mar 2011 09:16:03 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1300724035@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 1300721950 0
# Node ID 3c0d44a0d9a3f8adcc2e43a6610fc0fe5b012b3a
# Parent  0e6e8b0d4dc1020ee9757121c83cb05da55f3cca
libxl: remove "reg" and "enable" fields from PCI device.

These are defined as part of the PCI config_address register (I/O port
0xCF8) which allows I/O mapped access to PCI configuration space but
have no meaning in the context of PCI passthrough configuration.

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

diff -r 0e6e8b0d4dc1 -r 3c0d44a0d9a3 tools/libxl/libxl.idl
--- a/tools/libxl/libxl.idl     Mon Mar 21 14:42:27 2011 +0000
+++ b/tools/libxl/libxl.idl     Mon Mar 21 15:39:10 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 0e6e8b0d4dc1 -r 3c0d44a0d9a3 tools/libxl/libxl_pci.c
--- a/tools/libxl/libxl_pci.c   Mon Mar 21 14:42:27 2011 +0000
+++ b/tools/libxl/libxl_pci.c   Mon Mar 21 15:39:10 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 0e6e8b0d4dc1 -r 3c0d44a0d9a3 tools/ocaml/libs/xl/xl_stubs.c
--- a/tools/ocaml/libs/xl/xl_stubs.c    Mon Mar 21 14:42:27 2011 +0000
+++ b/tools/ocaml/libs/xl/xl_stubs.c    Mon Mar 21 15:39:10 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