File valgrind.xen-4.5-versioned-XEN_SYSCTL_topologyinfo.patch of Package valgrind
From: Olaf Hering <olaf@aepfle.de>
Date: Fri, 16 Nov 2018 17:21:12 +0100
Subject: xen-4.5: versioned XEN_SYSCTL_topologyinfo
The XEN_SYSCTL_topologyinfo was available until xen-4.5.
In xen-4.6 it was replaced by XEN_SYSCTL_cputopoinfo.
Both share the same sysctl number.
bz#390553
---
coregrind/m_syswrap/syswrap-xen.c | 46 ++++++++++++++++++++++++++++++++--------------
1 file changed, 32 insertions(+), 14 deletions(-)
--- a/coregrind/m_syswrap/syswrap-xen.c
+++ b/coregrind/m_syswrap/syswrap-xen.c
@@ -757,28 +757,37 @@ PRE(sysctl) {
if (sysctl->u.cpupool_op.op == VKI_XEN_SYSCTL_CPUPOOL_OP_ADDCPU ||
sysctl->u.cpupool_op.op == VKI_XEN_SYSCTL_CPUPOOL_OP_RMCPU)
PRE_XEN_SYSCTL_READ(cpupool_op, cpu);
break;
case VKI_XEN_SYSCTL_physinfo:
/* No input params */
break;
case VKI_XEN_SYSCTL_topologyinfo:
- PRE_XEN_SYSCTL_READ(topologyinfo, max_cpu_index);
- PRE_XEN_SYSCTL_READ(topologyinfo, cpu_to_core);
- PRE_XEN_SYSCTL_READ(topologyinfo, cpu_to_socket);
- PRE_XEN_SYSCTL_READ(topologyinfo, cpu_to_node);
+ switch (sysctl->interface_version)
+ {
+ case 0x00000007:
+ case 0x00000008:
+ case 0x00000009:
+ case 0x0000000a:
+ case 0x0000000b:
+ PRE_XEN_SYSCTL_READ(topologyinfo, max_cpu_index);
+ PRE_XEN_SYSCTL_READ(topologyinfo, cpu_to_core);
+ PRE_XEN_SYSCTL_READ(topologyinfo, cpu_to_socket);
+ PRE_XEN_SYSCTL_READ(topologyinfo, cpu_to_node);
+ break;
+ }
break;
case VKI_XEN_SYSCTL_numainfo:
switch (sysctl->interface_version)
{
case 0x00000008:
case 0x00000009:
case 0x0000000a:
case 0x0000000b:
PRE_XEN_SYSCTL_READ(numainfo_00000008, max_node_index);
PRE_XEN_SYSCTL_READ(numainfo_00000008, node_to_memsize);
PRE_XEN_SYSCTL_READ(numainfo_00000008, node_to_memfree);
@@ -2085,34 +2094,43 @@ POST(sysctl)
POST_XEN_SYSCTL_WRITE(physinfo_00000010, cpu_khz);
POST_XEN_SYSCTL_WRITE(physinfo_00000010, capabilities);
POST_XEN_SYSCTL_WRITE(physinfo_00000010, total_pages);
POST_XEN_SYSCTL_WRITE(physinfo_00000010, free_pages);
POST_XEN_SYSCTL_WRITE(physinfo_00000010, scrub_pages);
POST_XEN_SYSCTL_WRITE(physinfo_00000010, outstanding_pages);
POST_XEN_SYSCTL_WRITE(physinfo_00000010, max_mfn);
POST_XEN_SYSCTL_WRITE(physinfo_00000010, hw_cap[8]);
}
break;
case VKI_XEN_SYSCTL_topologyinfo:
- POST_XEN_SYSCTL_WRITE(topologyinfo, max_cpu_index);
- if (sysctl->u.topologyinfo.cpu_to_core.p)
- POST_MEM_WRITE((Addr)sysctl->u.topologyinfo.cpu_to_core.p,
- sizeof(uint32_t) * sysctl->u.topologyinfo.max_cpu_index);
- if (sysctl->u.topologyinfo.cpu_to_socket.p)
- POST_MEM_WRITE((Addr)sysctl->u.topologyinfo.cpu_to_socket.p,
- sizeof(uint32_t) * sysctl->u.topologyinfo.max_cpu_index);
- if (sysctl->u.topologyinfo.cpu_to_node.p)
- POST_MEM_WRITE((Addr)sysctl->u.topologyinfo.cpu_to_node.p,
- sizeof(uint32_t) * sysctl->u.topologyinfo.max_cpu_index);
+ switch (sysctl->interface_version)
+ {
+ case 0x00000007:
+ case 0x00000008:
+ case 0x00000009:
+ case 0x0000000a:
+ case 0x0000000b:
+ POST_XEN_SYSCTL_WRITE(topologyinfo, max_cpu_index);
+ if (sysctl->u.topologyinfo.cpu_to_core.p)
+ POST_MEM_WRITE((Addr)sysctl->u.topologyinfo.cpu_to_core.p,
+ sizeof(uint32_t) * sysctl->u.topologyinfo.max_cpu_index);
+ if (sysctl->u.topologyinfo.cpu_to_socket.p)
+ POST_MEM_WRITE((Addr)sysctl->u.topologyinfo.cpu_to_socket.p,
+ sizeof(uint32_t) * sysctl->u.topologyinfo.max_cpu_index);
+ if (sysctl->u.topologyinfo.cpu_to_node.p)
+ POST_MEM_WRITE((Addr)sysctl->u.topologyinfo.cpu_to_node.p,
+ sizeof(uint32_t) * sysctl->u.topologyinfo.max_cpu_index);
+ break;
+ }
break;
case VKI_XEN_SYSCTL_numainfo:
switch (sysctl->interface_version)
{
case 0x00000008:
case 0x00000009:
case 0x0000000a:
case 0x0000000b:
POST_XEN_SYSCTL_WRITE(numainfo_00000008, max_node_index);
POST_MEM_WRITE((Addr)sysctl->u.numainfo_00000008.node_to_memsize.p,
sizeof(uint64_t) * sysctl->u.numainfo_00000008.max_node_index);