On Wed, 2011-03-23 at 20:57 +0000, Dave Scott wrote:
> # HG changeset patch
> # User David Scott <dave.scott@xxxxxxxxxxxxx>
> # 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@xxxxxxxxxxxxx>
>
> 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@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|