|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-API] [Xen-devel] [PATCH 12 of 15] libxl: ocaml: switch all functions over to take a context
> # HG changeset patch
> # User Ian Campbell <ijc@xxxxxxxxxxxxxx> # Date 1353432141 0 # Node ID
> e4525795eac22c7d199ceae8714e95ed660a00c4
> # Parent bdd9c3e423d7f505f93edf413a92ad7b47ed9e39
> libxl: ocaml: switch all functions over to take a context.
>
> Since the context has a logger we can get rid of the logger built into these
> bindings and use the xentoollog bindings instead.
>
> The gc is of limited use when most things are freed with libxl_FOO_dispose,
> so get rid of that too.
>
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Looks good, apart from one small bug/typo below.
Otherwise:
Acked-by: Rob Hoes <rob.hoes@xxxxxxxxxx>
> diff -r bdd9c3e423d7 -r e4525795eac2 tools/ocaml/libs/xl/genwrap.py
> --- a/tools/ocaml/libs/xl/genwrap.py Tue Nov 20 17:22:21 2012 +0000
> +++ b/tools/ocaml/libs/xl/genwrap.py Tue Nov 20 17:22:21 2012 +0000
> @@ -8,23 +8,23 @@ import idl
> builtins = {
> "bool": ("bool", "%(c)s =
> Bool_val(%(o)s)",
> "Val_bool(%(c)s)" ),
> "int": ("int", "%(c)s =
> Int_val(%(o)s)",
> "Val_int(%(c)s)" ),
> - "char *": ("string", "%(c)s =
> dup_String_val(gc, %(o)s)",
> "caml_copy_string(%(c)s)"),
> + "char *": ("string", "%(c)s =
> dup_String_val(%(o)s)",
> "caml_copy_string(%(c)s)"),
> "libxl_domid": ("domid", "%(c)s =
> Int_val(%(o)s)",
> "Val_int(%(c)s)" ),
> "libxl_devid": ("devid", "%(c)s =
> Int_val(%(o)s)",
> "Val_int(%(c)s)" ),
> "libxl_defbool": ("bool option", "%(c)s =
> Defbool_val(%(o)s)",
> "Val_defbool(%(c)s)" ),
> - "libxl_uuid": ("int array", "Uuid_val(gc, lg,
> &%(c)s, %(o)s)",
> "Val_uuid(&%(c)s)"),
> - "libxl_bitmap": ("bool array", "Bitmap_val(gc, lg,
> &%(c)s, %(o)s)", "Val_bitmap(&%(c)s)"),
> - "libxl_key_value_list": ("(string * string) list",
> "libxl_key_value_list_val(gc,
> lg, &%(c)s, %(o)s)", None),
> - "libxl_string_list": ("string list",
> "libxl_string_list_val(gc, lg,
> &%(c)s, %(o)s)", "String_list_val(gc, lg,
> &%(c)s, %(o)s)"),
> - "libxl_mac": ("int array", "Mac_val(gc, lg,
> &%(c)s, %(o)s)",
> "Val_mac(&%(c)s)"),
> + "libxl_uuid": ("int array", "Uuid_val(&%(c)s,
> %(o)s)",
> "Val_uuid(&%(c)s)"),
> + "libxl_bitmap": ("bool array", "Bitmap_val(ctx,
> &%(c)s, %(o)s)",
> "Val_bitmap(&%(c)s)"),
> + "libxl_key_value_list": ("(string * string) list",
> "libxl_key_value_list_val(&%(c)s, %(o)s)", None),
> + "libxl_string_list": ("string list",
> "libxl_string_list_val(&%(c)s, %(o)s)",
> "String_list_val(&%(c)s, %(o)s)"),
> + "libxl_mac": ("int array", "Mac_val(&%(c)s,
> %(o)s)",
> "Val_mac(&%(c)s)"),
> "libxl_hwcap": ("int32 array", None,
> "Val_hwcap(&%(c)s)"),
> # This is an opaque type
> - "libxl_cpuid_policy_list": ("Cpuid_policy.t",
> "Cpuid_policy_list_val(gc,
> lg, &%(c)s, %(o)s)", "Val_cpuid_policy_list(%(c)s)"),
> + "libxl_cpuid_policy_list": ("Cpuid_policy.t",
> "Cpuid_policy_list_val(&%(c)s, %(o)s)", "Val_cpuid_policy_list(%(c)s)"),
> }
>
> -DEVICE_FUNCTIONS = [ ("add", ["t", "domid", "unit"]),
> - ("remove", ["t", "domid", "unit"]),
> - ("destroy", ["t", "domid", "unit"]),
> +DEVICE_FUNCTIONS = [ ("add", ["handle", "t", "domid", "unit"]),
> + ("remove", ["handle", "t", "domid", "unit"]),
> + ("destroy", ["handle", "t", "domid", "unit"]),
> ]
This must be "ctx", which is the correct type for the libxl_ctx, instead of
"handle".
Same just below here.
>
> functions = { # ( name , [type1,type2,....] ) @@ -33,13 +33,13 @@ functions =
> { # ( name , [type1,type2,..
> "device_disk": DEVICE_FUNCTIONS,
> "device_nic": DEVICE_FUNCTIONS,
> "device_pci": DEVICE_FUNCTIONS,
> - "physinfo": [ ("get", ["unit", "t"]),
> + "physinfo": [ ("get", ["handle", "t"]),
> ],
> - "cputopology": [ ("get", ["unit", "t array"]),
> + "cputopology": [ ("get", ["handle", "t array"]),
> ],
> "domain_sched_params":
> - [ ("get", ["domid", "t"]),
> - ("set", ["domid", "t", "unit"]),
> + [ ("get", ["handle", "domid", "t"]),
> + ("set", ["handle", "domid", "t", "unit"]),
> ],
> }
> def stub_fn_name(ty, name):
> @@ -228,7 +228,7 @@ def c_val(ty, c, o, indent="", parent =
> for e in ty.values:
> s += " case %d: *%s = %s; break;\n" % (n, c, e.name)
> n += 1
> - s += " default: failwith_xl(\"cannot convert value to %s\", lg);
> break;\n" % ty.typename
> + s += " default: failwith_xl(\"cannot convert value to %s\");
> break;\n" % ty.typename
> s += "}"
> elif isinstance(ty, idl.KeyedUnion):
> s += "{\n"
> @@ -241,7 +241,7 @@ def c_val(ty, c, o, indent="", parent =
> parent + ty.keyvar.name,
> f.enumname)
> n += 1
> - s += "\t\t default: failwith_xl(\"variant handling bug %s%s
> (long)\",
> lg); break;\n" % (parent, ty.keyvar.name)
> + s += "\t\t default: failwith_xl(\"variant handling bug %s%s
> (long)\");
> break;\n" % (parent, ty.keyvar.name)
> s += "\t\t}\n"
> s += "\t} else {\n"
> s += "\t\t/* Is block... */\n"
> @@ -257,7 +257,7 @@ def c_val(ty, c, o, indent="", parent =
> s += "%s" % c_val(f.type, fexpr, o, indent=indent+"\t\t
> ")
> s += "break;\n"
> n += 1
> - s += "\t\t default: failwith_xl(\"variant handling bug %s%s
> (block)\",
> lg); break;\n" % (parent, ty.keyvar.name)
> + s += "\t\t default: failwith_xl(\"variant handling bug %s%s
> (block)\");
> break;\n" % (parent, ty.keyvar.name)
> s += "\t\t}\n"
> s += "\t}\n"
> s += "}"
> @@ -270,14 +270,14 @@ def c_val(ty, c, o, indent="", parent =
> s += "%s\n" % c_val(f.type, fexpr, "Field(%s, %d)" % (o,n),
> parent=nparent)
> n = n + 1
> else:
> - s += "%s_val(gc, lg, %s, %s);" % (ty.rawname, ty.pass_arg(c, parent
> is
> None, passby=idl.PASS_BY_REFERENCE), o)
> + s += "%s_val(ctx, %s, %s);" % (ty.rawname, ty.pass_arg(c,
> + parent is None, passby=idl.PASS_BY_REFERENCE), o)
>
> return s.replace("\n", "\n%s" % indent)
>
> def gen_c_val(ty, indent=""):
> s = "/* Convert caml value to %s */\n" % ty.rawname
>
> - s += "static int %s_val (caml_gc *gc, struct caml_logger *lg, %s, value
> v)\n" % (ty.rawname, ty.make_arg("c_val",
> passby=idl.PASS_BY_REFERENCE))
> + s += "static int %s_val (libxl_ctx *ctx, %s, value v)\n" %
> + (ty.rawname, ty.make_arg("c_val", passby=idl.PASS_BY_REFERENCE))
> s += "{\n"
> s += "\tCAMLparam1(v);\n"
> s += "\n"
> @@ -326,7 +326,7 @@ def ocaml_Val(ty, o, c, indent="", paren
> for e in ty.values:
> s += " case %s: %s = Int_val(%d); break;\n" % (e.name, o, n)
> n += 1
> - s += " default: failwith_xl(\"cannot convert value from %s\", lg);
> break;\n" % ty.typename
> + s += " default: failwith_xl(\"cannot convert value from %s\");
> break;\n" % ty.typename
> s += "}"
> elif isinstance(ty, idl.KeyedUnion):
> n = 0
> @@ -347,7 +347,7 @@ def ocaml_Val(ty, o, c, indent="", paren
> #s += "\t %s = caml_alloc(%d,%d);\n" %
> (o,len(f.type.fields),n)
> s += "\t break;\n"
> n += 1
> - s += "\t default: failwith_xl(\"cannot convert value from %s\",
> lg);
> break;\n" % ty.typename
> + s += "\t default: failwith_xl(\"cannot convert value from %s\");
> break;\n" % ty.typename
> s += "\t}"
> elif isinstance(ty,idl.Aggregate) and (parent is None or ty.rawname is
> None):
> s += "{\n"
> @@ -375,14 +375,14 @@ def ocaml_Val(ty, o, c, indent="", paren
> n = n + 1
> s += "}"
> else:
> - s += "%s = Val_%s(gc, lg, %s);" % (o, ty.rawname, ty.pass_arg(c,
> parent is
> None))
> + s += "%s = Val_%s(ctx, %s);" % (o, ty.rawname, ty.pass_arg(c,
> + parent is None))
>
> return s.replace("\n", "\n%s" % indent).rstrip(indent)
>
> def gen_Val_ocaml(ty, indent=""):
> s = "/* Convert %s to a caml value */\n" % ty.rawname
>
> - s += "static value Val_%s (caml_gc *gc, struct caml_logger *lg, %s)\n" %
> (ty.rawname, ty.make_arg(ty.rawname+"_c"))
> + s += "static value Val_%s (libxl_ctx *ctx, %s)\n" % (ty.rawname,
> + ty.make_arg(ty.rawname+"_c"))
> s += "{\n"
> s += "\tCAMLparam0();\n"
> s += "\tCAMLlocal1(%s_ocaml);\n" % ty.rawname diff -r bdd9c3e423d7 -r
> e4525795eac2 tools/ocaml/libs/xl/xenlight.ml.in
> --- a/tools/ocaml/libs/xl/xenlight.ml.in Tue Nov 20 17:22:21 2012
> +0000
> +++ b/tools/ocaml/libs/xl/xenlight.ml.in Tue Nov 20 17:22:21 2012
> +0000
> @@ -37,4 +37,4 @@ external send_trigger : domid -> trigger external
> send_sysrq : domid -> char -> unit = "stub_xl_send_sysrq"
> external send_debug_keys : ctx -> string -> unit =
> "stub_xl_send_debug_keys"
>
> -let _ = Callback.register_exception "xl.error" (Error "register_callback")
> +let _ = Callback.register_exception "Xenlight.Error" (Error(""))
> diff -r bdd9c3e423d7 -r e4525795eac2 tools/ocaml/libs/xl/xenlight_stubs.c
> --- a/tools/ocaml/libs/xl/xenlight_stubs.c Tue Nov 20 17:22:21 2012
> +0000
> +++ b/tools/ocaml/libs/xl/xenlight_stubs.c Tue Nov 20 17:22:21 2012
> +0000
> @@ -31,49 +31,7 @@
>
> #define CTX ((libxl_ctx *)ctx)
>
> -struct caml_logger {
> - struct xentoollog_logger logger;
> - int log_offset;
> - char log_buf[2048];
> -};
> -
> -typedef struct caml_gc {
> - int offset;
> - void *ptrs[64];
> -} caml_gc;
> -
> -static void log_vmessage(struct xentoollog_logger *logger,
> xentoollog_level level,
> - int errnoval, const char *context, const char *format,
> va_list al)
> -{
> - struct caml_logger *ologger = (struct caml_logger *) logger;
> -
> - ologger->log_offset += vsnprintf(ologger->log_buf + ologger-
> >log_offset,
> - 2048 - ologger->log_offset, format,
> al);
> -}
> -
> -static void log_destroy(struct xentoollog_logger *logger) -{ -}
> -
> -#define INIT_STRUCT() libxl_ctx *ctx; struct caml_logger lg; struct caml_gc
> gc; gc.offset = 0;
> -
> -#define INIT_CTX() \
> - lg.logger.vmessage = log_vmessage; \
> - lg.logger.destroy = log_destroy; \
> - lg.logger.progress = NULL; \
> - lg.log_offset = 0; \
> - memset(&lg.log_buf,0,sizeof(lg.log_buf)); \
> - caml_enter_blocking_section(); \
> - ret = libxl_ctx_alloc(&ctx, LIBXL_VERSION, 0, (struct
> xentoollog_logger *) &lg); \
> - if (ret != 0) \
> - failwith_xl("cannot init context", &lg);
> -
> -#define FREE_CTX() \
> - gc_free(&gc); \
> - caml_leave_blocking_section(); \
> - libxl_ctx_free(ctx)
> -
> -static char * dup_String_val(caml_gc *gc, value s)
> +static char * dup_String_val(value s)
> {
> int len;
> char *c;
> @@ -81,25 +39,16 @@ static char * dup_String_val(caml_gc *gc
> c = calloc(len + 1, sizeof(char));
> if (!c)
> caml_raise_out_of_memory();
> - if (gc) gc->ptrs[gc->offset++] = c;
> memcpy(c, String_val(s), len);
> return c;
> }
>
> -static void gc_free(caml_gc *gc)
> +static void failwith_xl(char *fname)
> {
> - int i;
> - for (i = 0; i < gc->offset; i++) {
> - free(gc->ptrs[i]);
> - }
> -}
> -
> -static void failwith_xl(char *fname, struct caml_logger *lg) -{
> - char *s;
> - s = (lg) ? lg->log_buf : fname;
> - printf("Error: %s\n", fname);
> - caml_raise_with_string(*caml_named_value("xl.error"), s);
> + value *exc = caml_named_value("Xenlight.Error");
> + if (!exc)
> + caml_invalid_argument("Exception Xenlight.Error not
> initialized, please link xl.cma");
> + caml_raise_with_string(*exc, fname);
> }
>
> CAMLprim value stub_libxl_ctx_alloc(value logger) @@ -111,7 +60,7 @@
> CAMLprim value stub_libxl_ctx_alloc(valu
> caml_enter_blocking_section();
> ret = libxl_ctx_alloc(&ctx, LIBXL_VERSION, 0, (struct
> xentoollog_logger *) logger);
> if (ret != 0) \
> - failwith_xl("cannot init context", NULL);
> + failwith_xl("cannot init context");
> caml_leave_blocking_section();
> CAMLreturn((value)ctx);
> }
> @@ -127,16 +76,6 @@ CAMLprim value stub_libxl_ctx_free(value
> CAMLreturn(Val_unit);
> }
>
> -static void * gc_calloc(caml_gc *gc, size_t nmemb, size_t size) -{
> - void *ptr;
> - ptr = calloc(nmemb, size);
> - if (!ptr)
> - caml_raise_out_of_memory();
> - gc->ptrs[gc->offset++] = ptr;
> - return ptr;
> -}
> -
> static int list_len(value v)
> {
> int len = 0;
> @@ -147,8 +86,7 @@ static int list_len(value v)
> return len;
> }
>
> -static int libxl_key_value_list_val(caml_gc *gc, struct caml_logger *lg,
> - libxl_key_value_list *c_val,
> +static int libxl_key_value_list_val(libxl_key_value_list *c_val,
> value v)
> {
> CAMLparam1(v);
> @@ -158,24 +96,22 @@ static int libxl_key_value_list_val(caml
>
> nr = list_len(v);
>
> - array = gc_calloc(gc, (nr + 1) * 2, sizeof(char *));
> + array = calloc((nr + 1) * 2, sizeof(char *));
> if (!array)
> caml_raise_out_of_memory();
>
> for (i=0; v != Val_emptylist; i++, v = Field(v, 1) ) {
> elem = Field(v, 0);
>
> - array[i * 2] = dup_String_val(gc, Field(elem, 0));
> - array[i * 2 + 1] = dup_String_val(gc, Field(elem, 1));
> + array[i * 2] = dup_String_val(Field(elem, 0));
> + array[i * 2 + 1] = dup_String_val(Field(elem, 1));
> }
>
> *c_val = array;
> CAMLreturn(0);
> }
>
> -static int libxl_string_list_val(caml_gc *gc, struct caml_logger *lg,
> - libxl_string_list *c_val,
> - value v)
> +static int libxl_string_list_val(libxl_string_list *c_val, value v)
> {
> CAMLparam1(v);
> int nr, i;
> @@ -183,12 +119,12 @@ static int libxl_string_list_val(caml_gc
>
> nr = list_len(v);
>
> - array = gc_calloc(gc, (nr + 1), sizeof(char *));
> + array = calloc(nr + 1, sizeof(char *));
> if (!array)
> caml_raise_out_of_memory();
>
> for (i=0; v != Val_emptylist; i++, v = Field(v, 1) )
> - array[i] = dup_String_val(gc, Field(v, 0));
> + array[i] = dup_String_val(Field(v, 0));
>
> *c_val = array;
> CAMLreturn(0);
> @@ -221,7 +157,7 @@ static value Val_mac (libxl_mac *c_val)
> CAMLreturn(v);
> }
>
> -static int Mac_val(caml_gc *gc, struct caml_logger *lg, libxl_mac *c_val,
> value v)
> +static int Mac_val(libxl_mac *c_val, value v)
> {
> CAMLparam1(v);
> int i;
> @@ -248,10 +184,20 @@ static value Val_bitmap (libxl_bitmap *c
> CAMLreturn(v);
> }
>
> -static int Bitmap_val(caml_gc *gc, struct caml_logger *lg,
> - libxl_bitmap *c_val, value v)
> +static int Bitmap_val(libxl_ctx *ctx, libxl_bitmap *c_val, value v)
> {
> - abort(); /* XXX */
> + CAMLparam1(v);
> + int i, len = Wosize_val(v);
> +
> + if (!libxl_bitmap_alloc(ctx, c_val, len))
> + failwith_xl("cannot allocate bitmap");
> + for (i=0; i<len; i++) {
> + if (Int_val(Field(v, i)))
> + libxl_bitmap_set(c_val, i);
> + else
> + libxl_bitmap_reset(c_val, i);
> + }
> + CAMLreturn(0);
> }
>
> static value Val_cpuid_policy_list(libxl_cpuid_policy_list c_val) @@ -261,8
> +207,7 @@ static value Val_cpuid_policy_list(libxl
> CAMLreturn((value)c_val);
> }
>
> -static int Cpuid_policy_list_val(caml_gc *gc, struct caml_logger *lg,
> - libxl_cpuid_policy_list *c_val, value v)
> +static int Cpuid_policy_list_val(libxl_cpuid_policy_list *c_val, value
> +v)
> {
> CAMLparam1(v);
>
> @@ -287,7 +232,7 @@ static value Val_uuid (libxl_uuid *c_val
> CAMLreturn(v);
> }
>
> -static int Uuid_val(caml_gc *gc, struct caml_logger *lg, libxl_uuid *c_val,
> value v)
> +static int Uuid_val(libxl_uuid *c_val, value v)
> {
> CAMLparam1(v);
> int i;
> @@ -345,14 +290,12 @@ value stub_libxl_list_domain(value ctx) {
> CAMLparam1(ctx);
> CAMLlocal2( cli, cons );
> - struct caml_gc gc;
> libxl_dominfo *info;
> int i, nr;
>
> - gc.offset = 0;
> info = libxl_list_domain(CTX, &nr);
> if (info == NULL)
> - failwith_xl("list_domain", NULL);
> + failwith_xl("list_domain");
>
> cli = Val_emptylist;
>
> @@ -360,7 +303,7 @@ value stub_libxl_list_domain(value ctx)
> cons = caml_alloc(2, 0);
>
> /* Head */
> - Store_field(cons, 0, Val_dominfo(&gc, NULL, &info[i]));
> + Store_field(cons, 0, Val_dominfo(CTX, &info[i]));
> /* Tail */
> Store_field(cons, 1, cli);
>
> @@ -369,259 +312,77 @@ value stub_libxl_list_domain(value ctx)
>
> libxl_dominfo_list_free(info, nr);
>
> - gc_free(&gc);
> -
> CAMLreturn(cli);
> }
>
> -value stub_xl_device_disk_add(value info, value domid) -{
> - CAMLparam2(info, domid);
> - libxl_device_disk c_info;
> - int ret;
> - INIT_STRUCT();
> +#define _STRINGIFY(x) #x
> +#define STRINGIFY(x) _STRINGIFY(x)
>
> - device_disk_val(&gc, &lg, &c_info, info);
> -
> - INIT_CTX();
> - ret = libxl_device_disk_add(ctx, Int_val(domid), &c_info, 0);
> - if (ret != 0)
> - failwith_xl("disk_add", &lg);
> - FREE_CTX();
> - CAMLreturn(Val_unit);
> +#define _DEVICE_ADDREMOVE(type,op)
> \
> +value stub_xl_device_##type##_##op(value ctx, value info, value domid)
> \
> +{ \
> + CAMLparam3(ctx, info, domid);
> \
> + libxl_device_##type c_info; \
> + int ret, marker_var; \
> + \
> + device_##type##_val(CTX, &c_info, info); \
> + \
> + ret = libxl_device_##type##_##op(CTX, Int_val(domid), &c_info, 0); \
> + \
> + libxl_device_##type##_dispose(&c_info);
> \
> + \
> + if (ret != 0) \
> + failwith_xl(STRINGIFY(type) "_" STRINGIFY(op));
> \
> + \
> + CAMLreturn(Val_unit); \
> }
>
> -value stub_xl_device_disk_del(value info, value domid)
> +#define DEVICE_ADDREMOVE(type) \
> + _DEVICE_ADDREMOVE(type, add) \
> + _DEVICE_ADDREMOVE(type, remove) \
> + _DEVICE_ADDREMOVE(type, destroy)
> +
> +DEVICE_ADDREMOVE(disk)
> +DEVICE_ADDREMOVE(nic)
> +DEVICE_ADDREMOVE(vfb)
> +DEVICE_ADDREMOVE(vkb)
> +DEVICE_ADDREMOVE(pci)
> +
> +value stub_xl_physinfo_get(value ctx)
> {
> - CAMLparam2(info, domid);
> - libxl_device_disk c_info;
> - int ret;
> - INIT_STRUCT();
> -
> - device_disk_val(&gc, &lg, &c_info, info);
> -
> - INIT_CTX();
> - ret = libxl_device_disk_remove(ctx, Int_val(domid), &c_info, 0);
> - if (ret != 0)
> - failwith_xl("disk_del", &lg);
> - FREE_CTX();
> - CAMLreturn(Val_unit);
> -}
> -
> -value stub_xl_device_nic_add(value info, value domid) -{
> - CAMLparam2(info, domid);
> - libxl_device_nic c_info;
> - int ret;
> - INIT_STRUCT();
> -
> - device_nic_val(&gc, &lg, &c_info, info);
> -
> - INIT_CTX();
> - ret = libxl_device_nic_add(ctx, Int_val(domid), &c_info, 0);
> - if (ret != 0)
> - failwith_xl("nic_add", &lg);
> - FREE_CTX();
> - CAMLreturn(Val_unit);
> -}
> -
> -value stub_xl_device_nic_del(value info, value domid) -{
> - CAMLparam2(info, domid);
> - libxl_device_nic c_info;
> - int ret;
> - INIT_STRUCT();
> -
> - device_nic_val(&gc, &lg, &c_info, info);
> -
> - INIT_CTX();
> - ret = libxl_device_nic_remove(ctx, Int_val(domid), &c_info, 0);
> - if (ret != 0)
> - failwith_xl("nic_del", &lg);
> - FREE_CTX();
> - CAMLreturn(Val_unit);
> -}
> -
> -value stub_xl_device_vkb_add(value info, value domid) -{
> - CAMLparam2(info, domid);
> - libxl_device_vkb c_info;
> - int ret;
> - INIT_STRUCT();
> -
> - device_vkb_val(&gc, &lg, &c_info, info);
> -
> - INIT_CTX();
> - ret = libxl_device_vkb_add(ctx, Int_val(domid), &c_info, 0);
> - if (ret != 0)
> - failwith_xl("vkb_add", &lg);
> - FREE_CTX();
> -
> - CAMLreturn(Val_unit);
> -}
> -
> -value stub_xl_device_vkb_remove(value info, value domid) -{
> - CAMLparam1(domid);
> - libxl_device_vkb c_info;
> - int ret;
> - INIT_STRUCT();
> -
> - device_vkb_val(&gc, &lg, &c_info, info);
> -
> - INIT_CTX();
> - ret = libxl_device_vkb_remove(ctx, Int_val(domid), &c_info, 0);
> - if (ret != 0)
> - failwith_xl("vkb_clean_shutdown", &lg);
> - FREE_CTX();
> -
> - CAMLreturn(Val_unit);
> -}
> -
> -value stub_xl_device_vkb_destroy(value info, value domid) -{
> - CAMLparam1(domid);
> - libxl_device_vkb c_info;
> - int ret;
> - INIT_STRUCT();
> -
> - device_vkb_val(&gc, &lg, &c_info, info);
> -
> - INIT_CTX();
> - ret = libxl_device_vkb_destroy(ctx, Int_val(domid), &c_info, 0);
> - if (ret != 0)
> - failwith_xl("vkb_hard_shutdown", &lg);
> - FREE_CTX();
> -
> - CAMLreturn(Val_unit);
> -}
> -
> -value stub_xl_device_vfb_add(value info, value domid) -{
> - CAMLparam2(info, domid);
> - libxl_device_vfb c_info;
> - int ret;
> - INIT_STRUCT();
> -
> - device_vfb_val(&gc, &lg, &c_info, info);
> -
> - INIT_CTX();
> - ret = libxl_device_vfb_add(ctx, Int_val(domid), &c_info, 0);
> - if (ret != 0)
> - failwith_xl("vfb_add", &lg);
> - FREE_CTX();
> -
> - CAMLreturn(Val_unit);
> -}
> -
> -value stub_xl_device_vfb_remove(value info, value domid) -{
> - CAMLparam1(domid);
> - libxl_device_vfb c_info;
> - int ret;
> - INIT_STRUCT();
> -
> - device_vfb_val(&gc, &lg, &c_info, info);
> -
> - INIT_CTX();
> - ret = libxl_device_vfb_remove(ctx, Int_val(domid), &c_info, 0);
> - if (ret != 0)
> - failwith_xl("vfb_clean_shutdown", &lg);
> - FREE_CTX();
> -
> - CAMLreturn(Val_unit);
> -}
> -
> -value stub_xl_device_vfb_destroy(value info, value domid) -{
> - CAMLparam1(domid);
> - libxl_device_vfb c_info;
> - int ret;
> - INIT_STRUCT();
> -
> - device_vfb_val(&gc, &lg, &c_info, info);
> -
> - INIT_CTX();
> - ret = libxl_device_vfb_destroy(ctx, Int_val(domid), &c_info, 0);
> - if (ret != 0)
> - failwith_xl("vfb_hard_shutdown", &lg);
> - FREE_CTX();
> -
> - CAMLreturn(Val_unit);
> -}
> -
> -value stub_xl_device_pci_add(value info, value domid) -{
> - CAMLparam2(info, domid);
> - libxl_device_pci c_info;
> - int ret;
> - INIT_STRUCT();
> -
> - device_pci_val(&gc, &lg, &c_info, info);
> -
> - INIT_CTX();
> - ret = libxl_device_pci_add(ctx, Int_val(domid), &c_info, 0);
> - if (ret != 0)
> - failwith_xl("pci_add", &lg);
> - FREE_CTX();
> -
> - CAMLreturn(Val_unit);
> -}
> -
> -value stub_xl_device_pci_remove(value info, value domid) -{
> - CAMLparam2(info, domid);
> - libxl_device_pci c_info;
> - int ret;
> - INIT_STRUCT();
> -
> - device_pci_val(&gc, &lg, &c_info, info);
> -
> - INIT_CTX();
> - ret = libxl_device_pci_remove(ctx, Int_val(domid), &c_info, 0);
> - if (ret != 0)
> - failwith_xl("pci_remove", &lg);
> - FREE_CTX();
> -
> - CAMLreturn(Val_unit);
> -}
> -
> -value stub_xl_physinfo_get(value unit)
> -{
> - CAMLparam1(unit);
> + CAMLparam1(ctx);
> CAMLlocal1(physinfo);
> libxl_physinfo c_physinfo;
> int ret;
> - INIT_STRUCT();
>
> - INIT_CTX();
> - ret = libxl_get_physinfo(ctx, &c_physinfo);
> + ret = libxl_get_physinfo(CTX, &c_physinfo);
> +
> if (ret != 0)
> - failwith_xl("physinfo", &lg);
> - FREE_CTX();
> + failwith_xl("get_physinfo");
>
> - physinfo = Val_physinfo(&gc, &lg, &c_physinfo);
> + physinfo = Val_physinfo(CTX, &c_physinfo);
> +
> + libxl_physinfo_dispose(&c_physinfo);
> +
> CAMLreturn(physinfo);
> }
>
> -value stub_xl_cputopology_get(value unit)
> +value stub_xl_cputopology_get(value ctx)
> {
> - CAMLparam1(unit);
> + CAMLparam1(ctx);
> CAMLlocal2(topology, v);
> libxl_cputopology *c_topology;
> - int i, nr, ret;
> - INIT_STRUCT();
> + int i, nr;
>
> - INIT_CTX();
> + c_topology = libxl_get_cpu_topology(CTX, &nr);
>
> - c_topology = libxl_get_cpu_topology(ctx, &nr);
> - if (ret != 0)
> - failwith_xl("topologyinfo", &lg);
> + if (!c_topology)
> + failwith_xl("topologyinfo");
>
> topology = caml_alloc_tuple(nr);
> for (i = 0; i < nr; i++) {
> if (c_topology[i].core !=
> LIBXL_CPUTOPOLOGY_INVALID_ENTRY)
> - v = Val_some(Val_cputopology(&gc, &lg,
> &c_topology[i]));
> + v = Val_some(Val_cputopology(CTX,
> &c_topology[i]));
> else
> v = Val_none;
> Store_field(topology, i, v);
> @@ -629,74 +390,72 @@ value stub_xl_cputopology_get(value unit
>
> libxl_cputopology_list_free(c_topology, nr);
>
> - FREE_CTX();
> CAMLreturn(topology);
> }
>
> -value stub_xl_domain_sched_params_get(value domid)
> +value stub_xl_domain_sched_params_get(value ctx, value domid)
> {
> - CAMLparam1(domid);
> + CAMLparam2(ctx, domid);
> CAMLlocal1(scinfo);
> libxl_domain_sched_params c_scinfo;
> int ret;
> - INIT_STRUCT();
>
> - INIT_CTX();
> - ret = libxl_domain_sched_params_get(ctx, Int_val(domid),
> &c_scinfo);
> + ret = libxl_domain_sched_params_get(CTX, Int_val(domid),
> &c_scinfo);
> if (ret != 0)
> - failwith_xl("domain_sched_params_get", &lg);
> - FREE_CTX();
> + failwith_xl("domain_sched_params_get");
>
> - scinfo = Val_domain_sched_params(&gc, &lg, &c_scinfo);
> + scinfo = Val_domain_sched_params(CTX, &c_scinfo);
> +
> + libxl_domain_sched_params_dispose(&c_scinfo);
> +
> CAMLreturn(scinfo);
> }
>
> -value stub_xl_domain_sched_params_set(value domid, value scinfo)
> +value stub_xl_domain_sched_params_set(value ctx, value domid, value
> +scinfo)
> {
> - CAMLparam2(domid, scinfo);
> + CAMLparam3(ctx, domid, scinfo);
> libxl_domain_sched_params c_scinfo;
> int ret;
> - INIT_STRUCT();
>
> - domain_sched_params_val(&gc, &lg, &c_scinfo, scinfo);
> + domain_sched_params_val(CTX, &c_scinfo, scinfo);
>
> - INIT_CTX();
> - ret = libxl_domain_sched_params_set(ctx, Int_val(domid),
> &c_scinfo);
> + ret = libxl_domain_sched_params_set(CTX, Int_val(domid),
> &c_scinfo);
> +
> + libxl_domain_sched_params_dispose(&c_scinfo);
> +
> if (ret != 0)
> - failwith_xl("domain_sched_params_set", &lg);
> - FREE_CTX();
> + failwith_xl("domain_sched_params_set");
>
> CAMLreturn(Val_unit);
> }
>
> -value stub_xl_send_trigger(value domid, value trigger, value vcpuid)
> +value stub_xl_send_trigger(value ctx, value domid, value trigger, value
> +vcpuid)
> {
> - CAMLparam3(domid, trigger, vcpuid);
> + CAMLparam4(ctx, domid, trigger, vcpuid);
> int ret;
> libxl_trigger c_trigger = LIBXL_TRIGGER_UNKNOWN;
> - INIT_STRUCT();
>
> - trigger_val(&gc, &lg, &c_trigger, trigger);
> + trigger_val(CTX, &c_trigger, trigger);
>
> - INIT_CTX();
> - ret = libxl_send_trigger(ctx, Int_val(domid), c_trigger,
> Int_val(vcpuid));
> + ret = libxl_send_trigger(CTX, Int_val(domid),
> + c_trigger, Int_val(vcpuid));
> +
> if (ret != 0)
> - failwith_xl("send_trigger", &lg);
> - FREE_CTX();
> + failwith_xl("send_trigger");
> +
> CAMLreturn(Val_unit);
> }
>
> -value stub_xl_send_sysrq(value domid, value sysrq)
> +value stub_xl_send_sysrq(value ctx, value domid, value sysrq)
> {
> - CAMLparam2(domid, sysrq);
> + CAMLparam3(ctx, domid, sysrq);
> int ret;
> - INIT_STRUCT();
>
> - INIT_CTX();
> - ret = libxl_send_sysrq(ctx, Int_val(domid), Int_val(sysrq));
> + ret = libxl_send_sysrq(CTX, Int_val(domid), Int_val(sysrq));
> +
> if (ret != 0)
> - failwith_xl("send_sysrq", &lg);
> - FREE_CTX();
> + failwith_xl("send_sysrq");
> +
> CAMLreturn(Val_unit);
> }
>
> @@ -706,11 +465,11 @@ value stub_xl_send_debug_keys(value ctx,
> int ret;
> char *c_keys;
>
> - c_keys = dup_String_val(NULL, keys);
> + c_keys = dup_String_val(keys);
>
> ret = libxl_send_debug_keys(CTX, c_keys);
> if (ret != 0)
> - failwith_xl("send_debug_keys", NULL);
> + failwith_xl("send_debug_keys");
>
> free(c_keys);
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-api mailing list
Xen-api@xxxxxxxxxxxxx
http://lists.xen.org/cgi-bin/mailman/listinfo/xen-api
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |