On 29 Jun 2022, at 14:55, Jane Malalane
<[email protected]<mailto:[email protected]>> wrote:
+ physinfo = caml_alloc_tuple(11);
Store_field(physinfo, 0, Val_int(c_physinfo.threads_per_core));
Store_field(physinfo, 1, Val_int(c_physinfo.cores_per_socket));
Store_field(physinfo, 2, Val_int(c_physinfo.nr_cpus));
@@ -749,6 +749,17 @@ CAMLprim value stub_xc_physinfo(value xch)
Store_field(physinfo, 8, cap_list);
Store_field(physinfo, 9, Val_int(c_physinfo.max_cpu_id + 1));
+#if defined(__i386__) || defined(__x86_64__)
+ /*
+ * arch_capabilities: physinfo_arch_cap_flag list;
+ */
+ arch_cap_list = c_bitmap_to_ocaml_list
+ /* ! physinfo_arch_cap_flag CAP_ none */
+ /* ! XEN_SYSCTL_PHYSCAP_ XEN_SYSCTL_PHYSCAP_X86_MAX max */
+ (c_physinfo.arch_capabilities);
+ Store_field(physinfo, 10, arch_cap_list);
+#endif
+
CAMLreturn(physinfo);
}
I this extending the tuple but only defining a value on x86? Does this not lead
to undefined fields on other architectures?
type physinfo = {
threads_per_core : int;
cores_per_socket : int;
@@ -124,6 +128,7 @@ type physinfo = {
scrub_pages : nativeint;
capabilities : physinfo_cap_flag list;
max_nr_cpus : int; (** compile-time max possible number of nr_cpus *)
+ arch_capabilities : physinfo_arch_cap_flag list;
}
type version = { major : int; minor : int; extra : string
Here the record is extended but it looks to me like the new field is kept
undefined on non x86 architectures. If the field still has a defined content,
it would be good to explain why.
— C