]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/xen.git/commitdiff
tools: ocaml: Add an ocaml binding for libxl_get_topologyinfo
authorDavid Scott <dave.scott@eu.citrix.com>
Thu, 31 Mar 2011 18:02:55 +0000 (19:02 +0100)
committerDavid Scott <dave.scott@eu.citrix.com>
Thu, 31 Mar 2011 18:02:55 +0000 (19:02 +0100)
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>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
tools/ocaml/libs/xl/xl.ml
tools/ocaml/libs/xl/xl.mli
tools/ocaml/libs/xl/xl_stubs.c

index c856eef88b18192ae58347cf635be4f6aa2fcb5c..11a04bca132b02ca95e0ad0f18fee62e369612f7 100644 (file)
@@ -169,6 +169,15 @@ type physinfo =
        physcap: int32;
 }
 
+type topology = 
+{
+       core: int;
+       socket: int;
+       node: int;
+}
+
+type topologyinfo = topology option array
+
 type sched_credit =
 {
        weight: int;
@@ -205,6 +214,8 @@ type button =
 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"
 
index fcf4b2e0a91fa1e92b50b9bf119cad6f4d91fbb9..b1d3f43d6295a1b60d2f3f9e25718c8fea5f6bec 100644 (file)
@@ -169,6 +169,15 @@ type physinfo =
        physcap: int32;
 }
 
+type topology = 
+{
+       core: int;
+       socket: int;
+       node: int;
+}
+
+type topologyinfo = topology option array
+
 type sched_credit =
 {
        weight: int;
@@ -205,6 +214,8 @@ type button =
 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"
 
index ab08962bf20a204c1576969f08af0929433c9d72..33aba54ab0b7e433ee652eca312eb65404c08beb 100644 (file)
@@ -345,6 +345,29 @@ static value Val_physinfo(libxl_physinfo *c_val)
        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);
@@ -620,6 +643,24 @@ value stub_xl_physinfo(value unit)
        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);