|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3-RESEND 20/28] libxl: ocaml: allow device operations to be called asynchronously
On Mon, 2013-10-21 at 14:32 +0100, Rob Hoes wrote:
> Signed-off-by: Rob Hoes <rob.hoes@xxxxxxxxxx>
> ---
> tools/ocaml/libs/xl/genwrap.py | 6 +++---
> tools/ocaml/libs/xl/xenlight_stubs.c | 14 +++++++++++---
> 2 files changed, 14 insertions(+), 6 deletions(-)
>
> diff --git a/tools/ocaml/libs/xl/genwrap.py b/tools/ocaml/libs/xl/genwrap.py
> index daeffdf..721a336 100644
> --- a/tools/ocaml/libs/xl/genwrap.py
> +++ b/tools/ocaml/libs/xl/genwrap.py
> @@ -22,9 +22,9 @@ builtins = {
> "libxl_cpuid_policy_list": ("unit", "%(c)s = 0",
> "Val_unit"),
> }
>
> -DEVICE_FUNCTIONS = [ ("add", ["ctx", "t", "domid", "unit"]),
> - ("remove", ["ctx", "t", "domid", "unit"]),
> - ("destroy", ["ctx", "t", "domid", "unit"]),
> +DEVICE_FUNCTIONS = [ ("add", ["ctx", "t", "domid", "?async:'a",
> "unit", "unit"]),
> + ("remove", ["ctx", "t", "domid", "?async:'a",
> "unit", "unit"]),
> + ("destroy", ["ctx", "t", "domid", "?async:'a",
> "unit", "unit"]),
I probably don't speak enough ocaml to make heads or tails of it but can
you include the resulting ocaml type in the changelog? Is it really
ctx-> t -> ?async -> () -> ()
?
I guess I don't fully grok "-> ()" if it can chain like that ;-)
> ]
>
> functions = { # ( name , [type1,type2,....] )
> diff --git a/tools/ocaml/libs/xl/xenlight_stubs.c
> b/tools/ocaml/libs/xl/xenlight_stubs.c
> index 5b38e7c..7e56db9 100644
> --- a/tools/ocaml/libs/xl/xenlight_stubs.c
> +++ b/tools/ocaml/libs/xl/xenlight_stubs.c
> @@ -396,15 +396,23 @@ void async_callback(libxl_ctx *ctx, int rc, void
> *for_callback)
> #define STRINGIFY(x) _STRINGIFY(x)
>
> #define _DEVICE_ADDREMOVE(type,op) \
> -value stub_xl_device_##type##_##op(value ctx, value info, value domid)
> \
> +value stub_xl_device_##type##_##op(value ctx, value info, value domid,
> \
> + value async, value unit) \
> { \
> - CAMLparam3(ctx, info, domid); \
> + CAMLparam5(ctx, info, domid, async, unit); \
Only one unit here?
> libxl_device_##type c_info; \
> int ret, marker_var; \
> + libxl_asyncop_how ao_how; \
> \
> device_##type##_val(CTX, &c_info, info); \
> \
> - ret = libxl_device_##type##_##op(CTX, Int_val(domid), &c_info, 0); \
> + if (async != Val_none) { \
> + ao_how.callback = async_callback; \
> + ao_how.u.for_callback = (void *) Some_val(async); \
> + } \
> + \
> + ret = libxl_device_##type##_##op(CTX, Int_val(domid), &c_info, \
> + async != Val_none ? &ao_how : NULL); \
> \
> libxl_device_##type##_dispose(&c_info); \
> \
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |