Andrew Cooper
2013-Jan-03 22:49 UTC
[PATCH 1 of 2] Ocaml/libxc bindings: Fix SBDF encoding
Changeset 23861:ec7c81fbe0de alters the SBDF encoding expected by the DOMCTL_{de,}assign_device hypercalls. While it updates libxl, libxc and the python bindings, the ocaml bindings got missed. As a result, any attempt to use PCI Passthrough with Xen-4.2 and later will fail. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> diff -r c4114a042410 -r 22e7cb73b4ad tools/ocaml/libs/xc/xenctrl_stubs.c --- a/tools/ocaml/libs/xc/xenctrl_stubs.c +++ b/tools/ocaml/libs/xc/xenctrl_stubs.c @@ -1085,11 +1085,10 @@ CAMLprim value stub_xc_domain_irq_permis static uint32_t pci_dev_to_bdf(int domain, int bus, int slot, int func) { - uint32_t bdf = 0; - bdf |= (bus & 0xff) << 16; - bdf |= (slot & 0x1f) << 11; - bdf |= (func & 0x7) << 8; - return bdf; + return ((uint32_t)domain & 0xffff) << 16 | + ((uint32_t)bus & 0xff) << 8 | + ((uint32_t)slot & 0x1f) << 3 | + ((uint32_t)func & 0x7); } CAMLprim value stub_xc_domain_test_assign_device(value xch, value domid, value desc)
Andrew Cooper
2013-Jan-03 22:49 UTC
[PATCH 2 of 2] Ocaml/libxc bindings: Correct PCI terminology
Some renaming to correct the PCI and SBDF terminology. No functional change. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> diff -r 22e7cb73b4ad -r a1d119fe7872 tools/ocaml/libs/xc/xenctrl_stubs.c --- a/tools/ocaml/libs/xc/xenctrl_stubs.c +++ b/tools/ocaml/libs/xc/xenctrl_stubs.c @@ -1083,11 +1083,11 @@ CAMLprim value stub_xc_domain_irq_permis CAMLreturn(Val_unit); } -static uint32_t pci_dev_to_bdf(int domain, int bus, int slot, int func) +static uint32_t encode_sbdf(int domain, int bus, int dev, int func) { return ((uint32_t)domain & 0xffff) << 16 | ((uint32_t)bus & 0xff) << 8 | - ((uint32_t)slot & 0x1f) << 3 | + ((uint32_t)dev & 0x1f) << 3 | ((uint32_t)func & 0x7); } @@ -1095,16 +1095,16 @@ CAMLprim value stub_xc_domain_test_assig { CAMLparam3(xch, domid, desc); int ret; - int domain, bus, slot, func; - uint32_t bdf; + int domain, bus, dev, func; + uint32_t sbdf; domain = Int_val(Field(desc, 0)); bus = Int_val(Field(desc, 1)); - slot = Int_val(Field(desc, 2)); + dev = Int_val(Field(desc, 2)); func = Int_val(Field(desc, 3)); - bdf = pci_dev_to_bdf(domain, bus, slot, func); + sbdf = encode_sbdf(domain, bus, dev, func); - ret = xc_test_assign_device(_H(xch), _D(domid), bdf); + ret = xc_test_assign_device(_H(xch), _D(domid), sbdf); CAMLreturn(Val_bool(ret == 0)); } @@ -1113,16 +1113,16 @@ CAMLprim value stub_xc_domain_assign_dev { CAMLparam3(xch, domid, desc); int ret; - int domain, bus, slot, func; - uint32_t bdf; + int domain, bus, dev, func; + uint32_t sbdf; domain = Int_val(Field(desc, 0)); bus = Int_val(Field(desc, 1)); - slot = Int_val(Field(desc, 2)); + dev = Int_val(Field(desc, 2)); func = Int_val(Field(desc, 3)); - bdf = pci_dev_to_bdf(domain, bus, slot, func); + sbdf = encode_sbdf(domain, bus, dev, func); - ret = xc_assign_device(_H(xch), _D(domid), bdf); + ret = xc_assign_device(_H(xch), _D(domid), sbdf); if (ret < 0) failwith_xc(_H(xch)); @@ -1133,16 +1133,16 @@ CAMLprim value stub_xc_domain_deassign_d { CAMLparam3(xch, domid, desc); int ret; - int domain, bus, slot, func; - uint32_t bdf; + int domain, bus, dev, func; + uint32_t sbdf; domain = Int_val(Field(desc, 0)); bus = Int_val(Field(desc, 1)); - slot = Int_val(Field(desc, 2)); + dev = Int_val(Field(desc, 2)); func = Int_val(Field(desc, 3)); - bdf = pci_dev_to_bdf(domain, bus, slot, func); + sbdf = encode_sbdf(domain, bus, dev, func); - ret = xc_deassign_device(_H(xch), _D(domid), bdf); + ret = xc_deassign_device(_H(xch), _D(domid), sbdf); if (ret < 0) failwith_xc(_H(xch));
Andrew Cooper
2013-Jan-09 13:42 UTC
Re: [PATCH 1 of 2] Ocaml/libxc bindings: Fix SBDF encoding
Ping? On 03/01/13 22:49, Andrew Cooper wrote:> Changeset 23861:ec7c81fbe0de alters the SBDF encoding expected by the > DOMCTL_{de,}assign_device hypercalls. > > While it updates libxl, libxc and the python bindings, the ocaml > bindings got missed. As a result, any attempt to use PCI Passthrough > with Xen-4.2 and later will fail. > > Signed-off-by: Andrew Cooper<andrew.cooper3@citrix.com> > > diff -r c4114a042410 -r 22e7cb73b4ad tools/ocaml/libs/xc/xenctrl_stubs.c > --- a/tools/ocaml/libs/xc/xenctrl_stubs.c > +++ b/tools/ocaml/libs/xc/xenctrl_stubs.c > @@ -1085,11 +1085,10 @@ CAMLprim value stub_xc_domain_irq_permis > > static uint32_t pci_dev_to_bdf(int domain, int bus, int slot, int func) > { > - uint32_t bdf = 0; > - bdf |= (bus& 0xff)<< 16; > - bdf |= (slot& 0x1f)<< 11; > - bdf |= (func& 0x7)<< 8; > - return bdf; > + return ((uint32_t)domain& 0xffff)<< 16 | > + ((uint32_t)bus& 0xff)<< 8 | > + ((uint32_t)slot& 0x1f)<< 3 | > + ((uint32_t)func& 0x7); > } > > CAMLprim value stub_xc_domain_test_assign_device(value xch, value domid, value desc) > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel
Ian Campbell
2013-Jan-11 12:25 UTC
Re: [PATCH 1 of 2] Ocaml/libxc bindings: Fix SBDF encoding
On Thu, 2013-01-03 at 22:49 +0000, Andrew Cooper wrote:> Changeset 23861:ec7c81fbe0de alters the SBDF encoding expected by the > DOMCTL_{de,}assign_device hypercalls. > > While it updates libxl, libxc and the python bindings, the ocaml > bindings got missed. As a result, any attempt to use PCI Passthrough > with Xen-4.2 and later will fail. > > Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>Acked + applied both this and the 2nd patch.