[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 5/7] tools/ocaml/xc: Fix binding for xc_domain_assign_device()
From: Edwin Török <edwin.torok@xxxxxxxxx> The patch adding this binding was plain broken, and unreviewed. It modified the C stub to add a 4th parameter without an equivalent adjustment in the Ocaml side of the bindings. In 64bit builds, this causes us to dereference whatever dead value is in %rcx when trying to interpret the rflags parameter. This has gone unnoticed because Xapi doesn't use this binding (it has its own), but unbreak the binding by passing RDM_RELAXED unconditionally for now (matching the libxl default behaviour). Fixes: 9b34056cb4 ("tools: extend xc_assign_device() to support rdm reservation policy") Signed-off-by: Edwin Török <edwin.torok@xxxxxxxxx> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- CC: Christian Lindig <christian.lindig@xxxxxxxxxx> CC: David Scott <dave@xxxxxxxxxx> CC: Edwin Török <edwin.torok@xxxxxxxxx> CC: Rob Hoes <Rob.Hoes@xxxxxxxxxx> --- tools/ocaml/libs/xc/xenctrl_stubs.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c b/tools/ocaml/libs/xc/xenctrl_stubs.c index fd1f306f0202..291663bb278a 100644 --- a/tools/ocaml/libs/xc/xenctrl_stubs.c +++ b/tools/ocaml/libs/xc/xenctrl_stubs.c @@ -1245,17 +1245,12 @@ CAMLprim value stub_xc_domain_test_assign_device(value xch, value domid, value d CAMLreturn(Val_bool(ret == 0)); } -static int domain_assign_device_rdm_flag_table[] = { - XEN_DOMCTL_DEV_RDM_RELAXED, -}; - -CAMLprim value stub_xc_domain_assign_device(value xch, value domid, value desc, - value rflag) +CAMLprim value stub_xc_domain_assign_device(value xch, value domid, value desc) { - CAMLparam4(xch, domid, desc, rflag); + CAMLparam3(xch, domid, desc); int ret; int domain, bus, dev, func; - uint32_t sbdf, flag; + uint32_t sbdf; domain = Int_val(Field(desc, 0)); bus = Int_val(Field(desc, 1)); @@ -1263,10 +1258,8 @@ CAMLprim value stub_xc_domain_assign_device(value xch, value domid, value desc, func = Int_val(Field(desc, 3)); sbdf = encode_sbdf(domain, bus, dev, func); - ret = Int_val(Field(rflag, 0)); - flag = domain_assign_device_rdm_flag_table[ret]; - - ret = xc_assign_device(_H(xch), _D(domid), sbdf, flag); + ret = xc_assign_device(_H(xch), _D(domid), sbdf, + XEN_DOMCTL_DEV_RDM_RELAXED); if (ret < 0) failwith_xc(_H(xch)); -- 2.11.0
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |