File valgrind.xen-4.7-versioned-XEN_SYSCTL_get_cpu_featureset.patch of Package valgrind
From: Olaf Hering <olaf@aepfle.de>
Date: Fri, 16 Nov 2018 17:21:31 +0100
Subject: xen-4.7: versioned XEN_SYSCTL_get_cpu_featureset
bz#390553
---
coregrind/m_syswrap/syswrap-xen.c | 22 +++++++++
include/vki/vki-xen-sysctl.h | 8 +++
2 files changed, 30 insertions(+)
--- a/coregrind/m_syswrap/syswrap-xen.c
+++ b/coregrind/m_syswrap/syswrap-xen.c
@@ -810,24 +810,34 @@ PRE(sysctl) {
break;
case VKI_XEN_SYSCTL_pcitopoinfo:
switch (sysctl->interface_version)
{
case 0x0000000c:
PRE_XEN_SYSCTL_READ(pcitopoinfo_0000000c, num_devs);
PRE_XEN_SYSCTL_READ(pcitopoinfo_0000000c, devs);
break;
}
break;
+ case VKI_XEN_SYSCTL_get_cpu_featureset:
+ switch (sysctl->interface_version)
+ {
+ case 0x0000000d:
+ PRE_XEN_SYSCTL_READ(cpu_featureset_0000000d, index);
+ PRE_XEN_SYSCTL_READ(cpu_featureset_0000000d, nr_features);
+ break;
+ }
+ break;
+
default:
bad_subop(tid, layout, arrghs, status, flags,
"__HYPERVISOR_sysctl", sysctl->cmd);
break;
}
#undef PRE_XEN_SYSCTL_READ
#undef __PRE_XEN_SYSCTL_READ
}
PRE(domctl)
{
struct vki_xen_domctl *domctl = (struct vki_xen_domctl *)ARG1;
@@ -2225,24 +2235,36 @@ POST(sysctl)
break;
case VKI_XEN_SYSCTL_pcitopoinfo:
switch (sysctl->interface_version)
{
case 0x0000000c:
POST_XEN_SYSCTL_WRITE(pcitopoinfo_0000000c, num_devs);
POST_MEM_WRITE((Addr)sysctl->u.pcitopoinfo_0000000c.nodes.p,
sizeof(uint32_t) * sysctl->u.pcitopoinfo_0000000c.num_devs);
break;
}
break;
+
+ case VKI_XEN_SYSCTL_get_cpu_featureset:
+ switch (sysctl->interface_version)
+ {
+ case 0x0000000d:
+ POST_XEN_SYSCTL_WRITE(cpu_featureset_0000000d, nr_features);
+ POST_MEM_WRITE((Addr)sysctl->u.cpu_featureset_0000000d.features.p,
+ sizeof(uint32_t) * sysctl->u.cpu_featureset_0000000d.nr_features);
+ break;
+ }
+ break;
+
/* No outputs */
case VKI_XEN_SYSCTL_debug_keys:
break;
}
#undef POST_XEN_SYSCTL_WRITE
#undef __POST_XEN_SYSCTL_WRITE
}
POST(domctl){
struct vki_xen_domctl *domctl = (struct vki_xen_domctl *)ARG1;
switch (domctl->interface_version) {
--- a/include/vki/vki-xen-sysctl.h
+++ b/include/vki/vki-xen-sysctl.h
@@ -40,24 +40,25 @@
#define VKI_XEN_SYSCTL_page_offline_op 14
#define VKI_XEN_SYSCTL_lockprof_op 15
#define VKI_XEN_SYSCTL_topologyinfo 16
#define VKI_XEN_SYSCTL_cputopoinfo 16 /* Since xen-4.6 */
#define VKI_XEN_SYSCTL_numainfo 17
#define VKI_XEN_SYSCTL_cpupool_op 18
#define VKI_XEN_SYSCTL_scheduler_op 19
#define VKI_XEN_SYSCTL_coverage_op 20
#define VKI_XEN_SYSCTL_psr_cmt_op 21
#define VKI_XEN_SYSCTL_pcitopoinfo 22
#define VKI_XEN_SYSCTL_psr_cat_op 23
#define VKI_XEN_SYSCTL_tmem_op 24
+#define VKI_XEN_SYSCTL_get_cpu_featureset 26
struct vki_xen_sysctl_readconsole {
/* IN */
vki_uint8_t clear;
vki_uint8_t incremental;
vki_uint8_t pad0, pad1;
/*
* IN: Start index for consumption if @incremental.
* OUT: End index after consuming from the console.
*/
@@ -223,24 +224,30 @@ struct vki_xen_sysctl_physinfo_00000010 {
vki_xen_uint64_aligned_t scrub_pages;
vki_xen_uint64_aligned_t outstanding_pages;
vki_xen_uint64_aligned_t max_mfn;
vki_uint32_t hw_cap[8];
};
struct vki_xen_sysctl_sched_id {
/* OUT variable. */
vki_uint32_t sched_id;
};
+struct vki_xen_sysctl_cpu_featureset_0000000d {
+ vki_uint32_t index;
+ vki_uint32_t nr_features;
+ VKI_XEN_GUEST_HANDLE_64(vki_uint32) features;
+};
+
struct vki_xen_sysctl {
vki_uint32_t cmd;
vki_uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */
union {
struct vki_xen_sysctl_readconsole readconsole;
//struct vki_xen_sysctl_tbuf_op tbuf_op;
struct vki_xen_sysctl_physinfo_00000008 physinfo_00000008;
struct vki_xen_sysctl_physinfo_0000000a physinfo_0000000a;
struct vki_xen_sysctl_physinfo_00000010 physinfo_00000010;
struct vki_xen_sysctl_topologyinfo topologyinfo;
struct vki_xen_sysctl_cputopoinfo_0000000c cputopoinfo_0000000c;
struct vki_xen_sysctl_pcitopoinfo_0000000c pcitopoinfo_0000000c;
@@ -258,22 +265,23 @@ struct vki_xen_sysctl {
//struct vki_xen_sysctl_availheap availheap;
//struct vki_xen_sysctl_get_pmstat get_pmstat;
//struct vki_xen_sysctl_cpu_hotplug cpu_hotplug;
//struct vki_xen_sysctl_pm_op pm_op;
//struct vki_xen_sysctl_page_offline_op page_offline;
//struct vki_xen_sysctl_lockprof_op lockprof_op;
struct vki_xen_sysctl_cpupool_op cpupool_op;
//struct vki_xen_sysctl_scheduler_op scheduler_op;
//struct vki_xen_sysctl_coverage_op coverage_op;
//struct vki_xen_sysctl_psr_cmt_op psr_cmt_op;
//struct vki_xen_sysctl_psr_cat_op psr_cat_op;
//struct vki_xen_sysctl_tmem_op tmem_op;
+ struct vki_xen_sysctl_cpu_featureset_0000000d cpu_featureset_0000000d;
vki_uint8_t pad[128];
} u;
};
#endif // __VKI_XEN_SYSCTL_H
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/