On 29 Jun 2022, at 14:55, Jane Malalane 
<jane.malal...@citrix.com<mailto:jane.malal...@citrix.com>> 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

Reply via email to