David Scott
2011-Mar-23 20:57 UTC
[Xen-devel] [PATCH] tools: ocaml: Add an ocaml binding for libxl_get_topologyinfo in the style of libxl_get_physinfo
# HG changeset patch # User David Scott <dave.scott@eu.citrix.com> # Date 1300913710 0 # Node ID 1f503b4a8ece2dc6f4c27477400fce5a6f253c67 # Parent 67525892e2c6ee27c25438d43699397c5a3e0272 tools: ocaml: Add an ocaml binding for libxl_get_topologyinfo in the style of libxl_get_physinfo. The function returns an array of optional records, one per possible pCPU. Signed-off-by: David Scott <dave.scott@eu.citrix.com> diff -r 67525892e2c6 -r 1f503b4a8ece tools/ocaml/libs/xl/xl.ml --- a/tools/ocaml/libs/xl/xl.ml Wed Mar 23 20:51:51 2011 +0000 +++ b/tools/ocaml/libs/xl/xl.ml Wed Mar 23 20:55:10 2011 +0000 @@ -167,6 +167,15 @@ physcap: int32; } +type topology = +{ + core: int; + socket: int; + node: int; +} + +type topologyinfo = topology option array + type sched_credit { weight: int; @@ -203,6 +212,8 @@ external button_press : domid -> button -> unit = "stub_xl_button_press" external physinfo : unit -> physinfo = "stub_xl_physinfo" +external topologyinfo: unit -> topologyinfo = "stub_xl_topologyinfo" + external domain_sched_credit_get : domid -> sched_credit = "stub_xl_sched_credit_domain_get" external domain_sched_credit_set : domid -> sched_credit -> unit = "stub_xl_sched_credit_domain_set" diff -r 67525892e2c6 -r 1f503b4a8ece tools/ocaml/libs/xl/xl.mli --- a/tools/ocaml/libs/xl/xl.mli Wed Mar 23 20:51:51 2011 +0000 +++ b/tools/ocaml/libs/xl/xl.mli Wed Mar 23 20:55:10 2011 +0000 @@ -167,6 +167,15 @@ physcap: int32; } +type topology = +{ + core: int; + socket: int; + node: int; +} + +type topologyinfo = topology option array + type sched_credit { weight: int; @@ -203,6 +212,8 @@ external button_press : domid -> button -> unit = "stub_xl_button_press" external physinfo : unit -> physinfo = "stub_xl_physinfo" +external topologyinfo: unit -> topologyinfo = "stub_xl_topologyinfo" + external domain_sched_credit_get : domid -> sched_credit = "stub_xl_sched_credit_domain_get" external domain_sched_credit_set : domid -> sched_credit -> unit = "stub_xl_sched_credit_domain_set" diff -r 67525892e2c6 -r 1f503b4a8ece tools/ocaml/libs/xl/xl_stubs.c --- a/tools/ocaml/libs/xl/xl_stubs.c Wed Mar 23 20:51:51 2011 +0000 +++ b/tools/ocaml/libs/xl/xl_stubs.c Wed Mar 23 20:55:10 2011 +0000 @@ -386,6 +386,29 @@ CAMLreturn(v); } +static value Val_topologyinfo(libxl_topologyinfo *c_val) +{ + CAMLparam0(); + CAMLlocal3(v, topology, topologyinfo); + int i; + + topologyinfo = caml_alloc_tuple(c_val->coremap.entries); + for (i = 0; i < c_val->coremap.entries; i++) { + v = Val_int(0); /* None */ + if (c_val->coremap.array[i] != LIBXL_CPUARRAY_INVALID_ENTRY) { + topology = caml_alloc_tuple(3); + Store_field(topology, 0, Val_int(c_val->coremap.array[i])); + Store_field(topology, 1, Val_int(c_val->socketmap.array[i])); + Store_field(topology, 2, Val_int(c_val->nodemap.array[i])); + v = caml_alloc(1, 0); /* Some */ + Store_field(v, 0, topology); + } + Store_field(topologyinfo, i, v); + } + + CAMLreturn(topologyinfo); +} + value stub_xl_disk_add(value info, value domid) { CAMLparam2(info, domid); @@ -661,6 +684,24 @@ CAMLreturn(physinfo); } +value stub_xl_topologyinfo(value unit) +{ + CAMLparam1(unit); + CAMLlocal1(topologyinfo); + libxl_topologyinfo c_topologyinfo; + int ret; + INIT_STRUCT(); + + INIT_CTX(); + ret = libxl_get_topologyinfo(&ctx, &c_topologyinfo); + if (ret != 0) + failwith_xl("topologyinfo", &lg); + FREE_CTX(); + + topologyinfo = Val_topologyinfo(&c_topologyinfo); + CAMLreturn(topologyinfo); +} + value stub_xl_sched_credit_domain_get(value domid) { CAMLparam1(domid); _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ian Jackson
2011-Mar-31 18:03 UTC
Re: [Xen-devel] [PATCH] tools: ocaml: Add an ocaml binding for libxl_get_topologyinfo in the style of libxl_get_physinfo
David Scott writes ("[Xen-devel] [PATCH] tools: ocaml: Add an ocaml binding for libxl_get_topologyinfo in the style of libxl_get_physinfo"):> tools: ocaml: Add an ocaml binding for libxl_get_topologyinfo in the style of libxl_get_physinfo.Applied, thanks. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ian Campbell
2011-Apr-06 10:01 UTC
Re: [Xen-devel] [PATCH] tools: ocaml: Add an ocaml binding for libxl_get_topologyinfo in the style of libxl_get_physinfo
On Wed, 2011-03-23 at 20:57 +0000, Dave Scott wrote:> # HG changeset patch > # User David Scott <dave.scott@eu.citrix.com> > # Date 1300913710 0 > # Node ID 1f503b4a8ece2dc6f4c27477400fce5a6f253c67 > # Parent 67525892e2c6ee27c25438d43699397c5a3e0272 > tools: ocaml: Add an ocaml binding for libxl_get_topologyinfo in the style of libxl_get_physinfo. > > The function returns an array of optional records, one per possible pCPU.This doesn''t fit in terribly well with the libxl IDL, which specifies a tuple of arrays rather than an array of tuples. Although the interface doesn''t appear to enforce it, I think the 3 arrays are allways populated with the same set of present CPUs. So in this case though I think the IDL is wrong and the array of tuples representation is much saner. I think I''ll change the IDL as I try to autogen the type... Ian.> > Signed-off-by: David Scott <dave.scott@eu.citrix.com> > > diff -r 67525892e2c6 -r 1f503b4a8ece tools/ocaml/libs/xl/xl.ml > --- a/tools/ocaml/libs/xl/xl.ml Wed Mar 23 20:51:51 2011 +0000 > +++ b/tools/ocaml/libs/xl/xl.ml Wed Mar 23 20:55:10 2011 +0000 > @@ -167,6 +167,15 @@ > physcap: int32; > } > > +type topology = > +{ > + core: int; > + socket: int; > + node: int; > +} > + > +type topologyinfo = topology option array > + > type sched_credit > { > weight: int; > @@ -203,6 +212,8 @@ > external button_press : domid -> button -> unit = "stub_xl_button_press" > external physinfo : unit -> physinfo = "stub_xl_physinfo" > > +external topologyinfo: unit -> topologyinfo = "stub_xl_topologyinfo" > + > external domain_sched_credit_get : domid -> sched_credit = "stub_xl_sched_credit_domain_get" > external domain_sched_credit_set : domid -> sched_credit -> unit = "stub_xl_sched_credit_domain_set" > > diff -r 67525892e2c6 -r 1f503b4a8ece tools/ocaml/libs/xl/xl.mli > --- a/tools/ocaml/libs/xl/xl.mli Wed Mar 23 20:51:51 2011 +0000 > +++ b/tools/ocaml/libs/xl/xl.mli Wed Mar 23 20:55:10 2011 +0000 > @@ -167,6 +167,15 @@ > physcap: int32; > } > > +type topology = > +{ > + core: int; > + socket: int; > + node: int; > +} > + > +type topologyinfo = topology option array > + > type sched_credit > { > weight: int; > @@ -203,6 +212,8 @@ > external button_press : domid -> button -> unit = "stub_xl_button_press" > external physinfo : unit -> physinfo = "stub_xl_physinfo" > > +external topologyinfo: unit -> topologyinfo = "stub_xl_topologyinfo" > + > external domain_sched_credit_get : domid -> sched_credit = "stub_xl_sched_credit_domain_get" > external domain_sched_credit_set : domid -> sched_credit -> unit = "stub_xl_sched_credit_domain_set" > > diff -r 67525892e2c6 -r 1f503b4a8ece tools/ocaml/libs/xl/xl_stubs.c > --- a/tools/ocaml/libs/xl/xl_stubs.c Wed Mar 23 20:51:51 2011 +0000 > +++ b/tools/ocaml/libs/xl/xl_stubs.c Wed Mar 23 20:55:10 2011 +0000 > @@ -386,6 +386,29 @@ > CAMLreturn(v); > } > > +static value Val_topologyinfo(libxl_topologyinfo *c_val) > +{ > + CAMLparam0(); > + CAMLlocal3(v, topology, topologyinfo); > + int i; > + > + topologyinfo = caml_alloc_tuple(c_val->coremap.entries); > + for (i = 0; i < c_val->coremap.entries; i++) { > + v = Val_int(0); /* None */ > + if (c_val->coremap.array[i] != LIBXL_CPUARRAY_INVALID_ENTRY) { > + topology = caml_alloc_tuple(3); > + Store_field(topology, 0, Val_int(c_val->coremap.array[i])); > + Store_field(topology, 1, Val_int(c_val->socketmap.array[i])); > + Store_field(topology, 2, Val_int(c_val->nodemap.array[i])); > + v = caml_alloc(1, 0); /* Some */ > + Store_field(v, 0, topology); > + } > + Store_field(topologyinfo, i, v); > + } > + > + CAMLreturn(topologyinfo); > +} > + > value stub_xl_disk_add(value info, value domid) > { > CAMLparam2(info, domid); > @@ -661,6 +684,24 @@ > CAMLreturn(physinfo); > } > > +value stub_xl_topologyinfo(value unit) > +{ > + CAMLparam1(unit); > + CAMLlocal1(topologyinfo); > + libxl_topologyinfo c_topologyinfo; > + int ret; > + INIT_STRUCT(); > + > + INIT_CTX(); > + ret = libxl_get_topologyinfo(&ctx, &c_topologyinfo); > + if (ret != 0) > + failwith_xl("topologyinfo", &lg); > + FREE_CTX(); > + > + topologyinfo = Val_topologyinfo(&c_topologyinfo); > + CAMLreturn(topologyinfo); > +} > + > value stub_xl_sched_credit_domain_get(value domid) > { > CAMLparam1(domid); > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel