[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 01/12] tools/ocaml: Pass a full domctl_create_config into stub_xc_domain_create()
The underlying C function is about to make the same change, and the structure is going to gain extra fields. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: Christian Lindig <christian.lindig@xxxxxxxxxx> --- v2: * Fix indirection bug with xen_x86_arch_domctlconfig --- tools/ocaml/libs/xc/xenctrl.ml | 14 +++++++--- tools/ocaml/libs/xc/xenctrl.mli | 13 +++++++--- tools/ocaml/libs/xc/xenctrl_stubs.c | 52 ++++++++++++++++++++++++------------- 3 files changed, 55 insertions(+), 24 deletions(-) diff --git a/tools/ocaml/libs/xc/xenctrl.ml b/tools/ocaml/libs/xc/xenctrl.ml index b3b33bb..3b7526e 100644 --- a/tools/ocaml/libs/xc/xenctrl.ml +++ b/tools/ocaml/libs/xc/xenctrl.ml @@ -56,6 +56,16 @@ type arch_domainconfig = | ARM of xen_arm_arch_domainconfig | X86 of xen_x86_arch_domainconfig +type domain_create_flag = CDF_HVM | CDF_HAP + +type domctl_create_config = +{ + ssidref: int32; + handle: string; + flags: domain_create_flag list; + arch: arch_domainconfig; +} + type domaininfo = { domid : domid; @@ -120,8 +130,6 @@ type compile_info = type shutdown_reason = Poweroff | Reboot | Suspend | Crash | Watchdog | Soft_reset -type domain_create_flag = CDF_HVM | CDF_HAP - exception Error of string type handle @@ -135,7 +143,7 @@ let with_intf f = interface_close xc; r -external domain_create: handle -> int32 -> domain_create_flag list -> string -> arch_domainconfig -> domid +external domain_create: handle -> domctl_create_config -> domid = "stub_xc_domain_create" external domain_sethandle: handle -> domid -> string -> unit diff --git a/tools/ocaml/libs/xc/xenctrl.mli b/tools/ocaml/libs/xc/xenctrl.mli index 35303ab..d103a33 100644 --- a/tools/ocaml/libs/xc/xenctrl.mli +++ b/tools/ocaml/libs/xc/xenctrl.mli @@ -49,6 +49,15 @@ type arch_domainconfig = | ARM of xen_arm_arch_domainconfig | X86 of xen_x86_arch_domainconfig +type domain_create_flag = CDF_HVM | CDF_HAP + +type domctl_create_config = { + ssidref: int32; + handle: string; + flags: domain_create_flag list; + arch: arch_domainconfig; +} + type domaininfo = { domid : domid; dying : bool; @@ -91,14 +100,12 @@ type compile_info = { } type shutdown_reason = Poweroff | Reboot | Suspend | Crash | Watchdog | Soft_reset -type domain_create_flag = CDF_HVM | CDF_HAP - exception Error of string type handle external interface_open : unit -> handle = "stub_xc_interface_open" external interface_close : handle -> unit = "stub_xc_interface_close" val with_intf : (handle -> 'a) -> 'a -external domain_create : handle -> int32 -> domain_create_flag list -> string -> arch_domainconfig -> domid +external domain_create : handle -> domctl_create_config -> domid = "stub_xc_domain_create" external domain_sethandle : handle -> domid -> string -> unit = "stub_xc_domain_sethandle" external domain_max_vcpus : handle -> domid -> int -> unit diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c b/tools/ocaml/libs/xc/xenctrl_stubs.c index 5274e56..dbe9c3e 100644 --- a/tools/ocaml/libs/xc/xenctrl_stubs.c +++ b/tools/ocaml/libs/xc/xenctrl_stubs.c @@ -119,36 +119,46 @@ static void domain_handle_of_uuid_string(xen_domain_handle_t h, #undef X } -CAMLprim value stub_xc_domain_create(value xch, value ssidref, - value flags, value handle, - value domconfig) +CAMLprim value stub_xc_domain_create(value xch, value config) { - CAMLparam4(xch, ssidref, flags, handle); + CAMLparam2(xch, config); + CAMLlocal2(l, arch_domconfig); + + /* Mnemonics for the named fields inside domctl_create_config */ +#define VAL_SSIDREF Field(config, 0) +#define VAL_HANDLE Field(config, 1) +#define VAL_FLAGS Field(config, 2) +#define VAL_ARCH Field(config, 3) uint32_t domid = 0; - xen_domain_handle_t h; int result; - uint32_t c_ssidref = Int32_val(ssidref); - unsigned int c_flags = 0; - value l; - xc_domain_configuration_t config = {}; + struct xen_domctl_createdomain cfg = { + .ssidref = Int32_val(VAL_SSIDREF), + }; - domain_handle_of_uuid_string(h, String_val(handle)); + domain_handle_of_uuid_string(cfg.handle, String_val(VAL_HANDLE)); - for (l = flags; l != Val_none; l = Field(l, 1)) - c_flags |= 1u << Int_val(Field(l, 0)); + for ( l = VAL_FLAGS; l != Val_none; l = Field(l, 1) ) + cfg.flags |= 1u << Int_val(Field(l, 0)); - switch(Tag_val(domconfig)) { + arch_domconfig = Field(VAL_ARCH, 0); + switch ( Tag_val(VAL_ARCH) ) + { case 0: /* ARM - nothing to do */ caml_failwith("Unhandled: ARM"); break; case 1: /* X86 - emulation flags in the block */ #if defined(__i386__) || defined(__x86_64__) - for (l = Field(Field(domconfig, 0), 0); - l != Val_none; - l = Field(l, 1)) - config.emulation_flags |= 1u << Int_val(Field(l, 0)); + + /* Mnemonics for the named fields inside xen_x86_arch_domctlconfig */ +#define VAL_EMUL_FLAGS Field(arch_domconfig, 0) + + for ( l = VAL_EMUL_FLAGS; l != Val_none; l = Field(l, 1) ) + cfg.arch.emulation_flags |= 1u << Int_val(Field(l, 0)); + +#undef VAL_EMUL_FLAGS + #else caml_failwith("Unhandled: x86"); #endif @@ -158,8 +168,14 @@ CAMLprim value stub_xc_domain_create(value xch, value ssidref, caml_failwith("Unhandled domconfig type"); } +#undef VAL_ARCH +#undef VAL_FLAGS +#undef VAL_HANDLE +#undef VAL_SSIDREF + caml_enter_blocking_section(); - result = xc_domain_create(_H(xch), c_ssidref, h, c_flags, &domid, &config); + result = xc_domain_create(_H(xch), cfg.ssidref, cfg.handle, cfg.flags, + &domid, &cfg.arch); caml_leave_blocking_section(); if (result < 0) -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |