From: Andrew Cooper Date: Thu, 11 Jan 2018 17:47:59 +0000 (+0000) Subject: tools/ocaml: Expose arch_config in domaininfo X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~816 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=9d683b5e37;p=xen.git tools/ocaml: Expose arch_config in domaininfo Signed-off-by: Andrew Cooper --- diff --git a/tools/ocaml/libs/xc/xenctrl.ml b/tools/ocaml/libs/xc/xenctrl.ml index 70a325b0e9..d549068d60 100644 --- a/tools/ocaml/libs/xc/xenctrl.ml +++ b/tools/ocaml/libs/xc/xenctrl.ml @@ -28,6 +28,34 @@ type vcpuinfo = cpumap: int32; } +type xen_arm_arch_domainconfig = +{ + gic_version: int; + nr_spis: int; + clock_frequency: int32; +} + +type x86_arch_emulation_flags = + | X86_EMU_LAPIC + | X86_EMU_HPET + | X86_EMU_PM + | X86_EMU_RTC + | X86_EMU_IOAPIC + | X86_EMU_PIC + | X86_EMU_VGA + | X86_EMU_IOMMU + | X86_EMU_PIT + | X86_EMU_USE_PIRQ + +type xen_x86_arch_domainconfig = +{ + emulation_flags: x86_arch_emulation_flags list; +} + +type arch_domainconfig = + | ARM of xen_arm_arch_domainconfig + | X86 of xen_x86_arch_domainconfig + type domaininfo = { domid : domid; @@ -46,6 +74,7 @@ type domaininfo = max_vcpu_id : int; ssidref : int32; handle : int array; + arch_config : arch_domainconfig; } type sched_control = diff --git a/tools/ocaml/libs/xc/xenctrl.mli b/tools/ocaml/libs/xc/xenctrl.mli index 702d8a7ab8..08f1fd26ae 100644 --- a/tools/ocaml/libs/xc/xenctrl.mli +++ b/tools/ocaml/libs/xc/xenctrl.mli @@ -22,6 +22,33 @@ type vcpuinfo = { cputime : int64; cpumap : int32; } + +type xen_arm_arch_domainconfig = { + gic_version: int; + nr_spis: int; + clock_frequency: int32; +} + +type x86_arch_emulation_flags = + | X86_EMU_LAPIC + | X86_EMU_HPET + | X86_EMU_PM + | X86_EMU_RTC + | X86_EMU_IOAPIC + | X86_EMU_PIC + | X86_EMU_VGA + | X86_EMU_IOMMU + | X86_EMU_PIT + | X86_EMU_USE_PIRQ + +type xen_x86_arch_domainconfig = { + emulation_flags: x86_arch_emulation_flags list; +} + +type arch_domainconfig = + | ARM of xen_arm_arch_domainconfig + | X86 of xen_x86_arch_domainconfig + type domaininfo = { domid : domid; dying : bool; @@ -39,6 +66,7 @@ type domaininfo = { max_vcpu_id : int; ssidref : int32; handle : int array; + arch_config : arch_domainconfig; } type sched_control = { weight : int; cap : int; } type physinfo_cap_flag = CAP_HVM | CAP_DirectIO diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c b/tools/ocaml/libs/xc/xenctrl_stubs.c index c66732f67c..124aa34fe8 100644 --- a/tools/ocaml/libs/xc/xenctrl_stubs.c +++ b/tools/ocaml/libs/xc/xenctrl_stubs.c @@ -273,10 +273,10 @@ CAMLprim value stub_xc_domain_shutdown(value xch, value domid, value reason) static value alloc_domaininfo(xc_domaininfo_t * info) { CAMLparam0(); - CAMLlocal2(result, tmp); + CAMLlocal5(result, tmp, arch_config, x86_arch_config, emul_list); int i; - result = caml_alloc_tuple(16); + result = caml_alloc_tuple(17); Store_field(result, 0, Val_int(info->domain)); Store_field(result, 1, Val_bool(info->flags & XEN_DOMINF_dying)); @@ -302,6 +302,28 @@ static value alloc_domaininfo(xc_domaininfo_t * info) Store_field(result, 15, tmp); + /* emulation_flags: x86_arch_emulation_flags list; */ + tmp = emul_list = Val_emptylist; + for (i = 0; i < 10; i++) { + if ((info->arch_config.emulation_flags >> i) & 1) { + tmp = caml_alloc_small(2, Tag_cons); + Field(tmp, 0) = Val_int(i); + Field(tmp, 1) = emul_list; + emul_list = tmp; + } + } + + /* xen_x86_arch_domainconfig */ + x86_arch_config = caml_alloc_tuple(1); + Store_field(x86_arch_config, 0, emul_list); + + /* arch_config: arch_domainconfig */ + arch_config = caml_alloc_small(1, 1); + + Store_field(arch_config, 0, x86_arch_config); + + Store_field(result, 16, arch_config); + CAMLreturn(result); }