Ian Campbell
2011-Mar-21 16:13 UTC
[Xen-devel] [PATCH 0 of 2] tools: libxl: fixup PCI BDF interface
The libxl interface for PCI devices includes a couple of fields which are not useful in this context, remove them. libxl exposes the PCI BDF as individual numbers and takes care of encoding it internally, this change was not propagated to the ocaml bindings at the time so do it now. _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ian Campbell
2011-Mar-21 16:13 UTC
[Xen-devel] [PATCH 1 of 2] libxl: remove "reg" and "enable" fields from PCI device
# HG changeset patch # User Ian Campbell <ian.campbell@citrix.com> # 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@citrix.com> 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@lists.xensource.com http://lists.xensource.com/xen-devel
Ian Campbell
2011-Mar-21 16:13 UTC
[Xen-devel] [PATCH 2 of 2] tools: ocaml: xl: propagate simplfied libxl interface to PCI BDFs to bindings
# HG changeset patch # User Ian Campbell <ian.campbell@citrix.com> # Date 1300724005 0 # Node ID d6423527e5b8785a3b8425ea8d360e3e465115e7 # Parent 3c0d44a0d9a3f8adcc2e43a6610fc0fe5b012b3a tools: ocaml: xl: propagate simplfied libxl interface to PCI BDFs to bindings. 22166:251694a87f1d changed the libxl interface to remove the need for users to understand BDF encoding but did not propagate the change to the ocaml bindings. Do that now. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> diff -r 3c0d44a0d9a3 -r d6423527e5b8 tools/ocaml/libs/xl/xl.ml --- a/tools/ocaml/libs/xl/xl.ml Mon Mar 21 15:39:10 2011 +0000 +++ b/tools/ocaml/libs/xl/xl.ml Mon Mar 21 16:13:25 2011 +0000 @@ -145,7 +145,9 @@ type vfb_info type pci_info { - v : int; (* domain * bus * dev * func multiplexed *) + func : int; + dev : int; + bus : int; domain : int; vdevfn : int; msitranslate : bool; diff -r 3c0d44a0d9a3 -r d6423527e5b8 tools/ocaml/libs/xl/xl.mli --- a/tools/ocaml/libs/xl/xl.mli Mon Mar 21 15:39:10 2011 +0000 +++ b/tools/ocaml/libs/xl/xl.mli Mon Mar 21 16:13:25 2011 +0000 @@ -145,7 +145,9 @@ type vfb_info type pci_info { - v : int; (* domain * bus * dev * func multiplexed *) + func : int; + dev : int; + bus : int; domain : int; vdevfn : int; msitranslate : bool; diff -r 3c0d44a0d9a3 -r d6423527e5b8 tools/ocaml/libs/xl/xl_stubs.c --- a/tools/ocaml/libs/xl/xl_stubs.c Mon Mar 21 15:39:10 2011 +0000 +++ b/tools/ocaml/libs/xl/xl_stubs.c Mon Mar 21 16:13:25 2011 +0000 @@ -272,30 +272,16 @@ static int device_vfb_val(caml_gc *gc, l static int device_pci_val(caml_gc *gc, libxl_device_pci *c_val, value v) { - 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; CAMLparam1(v); - /* FIXME: propagate API change to ocaml */ - u.value = Int_val(Field(v, 0)); - c_val->func = u.fields.func; - c_val->dev = u.fields.dev; - c_val->bus = u.fields.bus; + c_val->func = Int_val(Field(v, 0)); + c_val->dev = Int_val(Field(v, 1)); + c_val->bus = Int_val(Field(v, 2)); - c_val->domain = Int_val(Field(v, 1)); - c_val->vdevfn = Int_val(Field(v, 2)); - c_val->msitranslate = Bool_val(Field(v, 3)); - c_val->power_mgmt = Bool_val(Field(v, 4)); + c_val->domain = Int_val(Field(v, 3)); + c_val->vdevfn = Int_val(Field(v, 4)); + c_val->msitranslate = Bool_val(Field(v, 5)); + c_val->power_mgmt = Bool_val(Field(v, 6)); CAMLreturn(0); } _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ian Jackson
2011-Mar-31 17:12 UTC
Re: [Xen-devel] [PATCH 0 of 2] tools: libxl: fixup PCI BDF interface
Ian Campbell writes ("[Xen-devel] [PATCH 0 of 2] tools: libxl: fixup PCI BDF interface"):> The libxl interface for PCI devices includes a couple of fields which > are not useful in this context, remove them.Applied both, thanks. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel