Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:olh:xen-buildrequires
valgrind
valgrind.xen-4.13-versioned-xen_sysctl_getdomai...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File valgrind.xen-4.13-versioned-xen_sysctl_getdomaininfolist.patch of Package valgrind
From: Olaf Hering <olaf@aepfle.de> Date: Fri, 28 Feb 2020 15:15:01 +0100 Subject: xen-4.13: versioned xen_sysctl_getdomaininfolist bz#390553 --- coregrind/m_syswrap/syswrap-xen.c | 44 ++++++++++++++++++++++++++++++++++++-------- include/vki/vki-xen-domctl.h | 22 ++++++++++++++++++++++ include/vki/vki-xen-sysctl.h | 10 ++++++++++ 3 files changed, 68 insertions(+), 8 deletions(-) --- a/coregrind/m_syswrap/syswrap-xen.c +++ b/coregrind/m_syswrap/syswrap-xen.c @@ -716,27 +716,41 @@ PRE(sysctl) { case 0x0000000b: case 0x0000000c: case 0x0000000d: case 0x0000000e: PRE_XEN_SYSCTL_READ(getdomaininfolist_00000009, first_domain); PRE_XEN_SYSCTL_READ(getdomaininfolist_00000009, max_domains); PRE_XEN_SYSCTL_READ(getdomaininfolist_00000009, buffer); break; case 0x0000000f: case 0x00000010: case 0x00000011: case 0x00000012: - PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000f, first_domain); - PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000f, max_domains); - PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000f, buffer); + switch (vki_assumed_xenversion) { + case vki_xenversion_412: + PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000f, first_domain); + PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000f, max_domains); + PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000f, buffer); + break; + case vki_xenversion_unset: + case vki_xenversion_412_or_413: + vki_report_unknown_xenversion("VKI_XEN_SYSCTL_getdomaininfolist"); + /* fallthrough */ + case vki_xenversion_413: + default: + PRE_XEN_SYSCTL_READ(getdomaininfolist_00000012, first_domain); + PRE_XEN_SYSCTL_READ(getdomaininfolist_00000012, max_domains); + PRE_XEN_SYSCTL_READ(getdomaininfolist_00000012, buffer); + break; + } break; default: VG_(dmsg)("WARNING: XEN_SYSCTL_getdomaininfolist for sysctl version " "%"PRIx32" not implemented yet\n", sysctl->interface_version); SET_STATUS_Failure(VKI_EINVAL); return; } break; case VKI_XEN_SYSCTL_debug_keys: PRE_XEN_SYSCTL_READ(debug_keys, keys); @@ -2331,29 +2345,43 @@ POST(sysctl) case 0x0000000d: case 0x0000000e: POST_XEN_SYSCTL_WRITE(getdomaininfolist_00000009, num_domains); if (sysctl->u.getdomaininfolist_00000009.num_domains > 0) POST_MEM_WRITE((Addr)sysctl->u.getdomaininfolist_00000009.buffer.p, sizeof(*sysctl->u.getdomaininfolist_00000009.buffer.p) * sysctl->u.getdomaininfolist_00000009.num_domains); break; case 0x0000000f: case 0x00000010: case 0x00000011: case 0x00000012: - POST_XEN_SYSCTL_WRITE(getdomaininfolist_0000000f, num_domains); - if (sysctl->u.getdomaininfolist_0000000f.num_domains > 0) - POST_MEM_WRITE((Addr)sysctl->u.getdomaininfolist_0000000f.buffer.p, - sizeof(*sysctl->u.getdomaininfolist_0000000f.buffer.p) * - sysctl->u.getdomaininfolist_0000000f.num_domains); + switch (vki_assumed_xenversion) { + case vki_xenversion_412: + POST_XEN_SYSCTL_WRITE(getdomaininfolist_0000000f, num_domains); + if (sysctl->u.getdomaininfolist_0000000f.num_domains > 0) + POST_MEM_WRITE((Addr)sysctl->u.getdomaininfolist_0000000f.buffer.p, + sizeof(*sysctl->u.getdomaininfolist_0000000f.buffer.p) * + sysctl->u.getdomaininfolist_0000000f.num_domains); + break; + case vki_xenversion_unset: + case vki_xenversion_412_or_413: + case vki_xenversion_413: + default: + POST_XEN_SYSCTL_WRITE(getdomaininfolist_00000012, num_domains); + if (sysctl->u.getdomaininfolist_00000012.num_domains > 0) + POST_MEM_WRITE((Addr)sysctl->u.getdomaininfolist_00000012.buffer.p, + sizeof(*sysctl->u.getdomaininfolist_00000012.buffer.p) * + sysctl->u.getdomaininfolist_00000012.num_domains); + break; + } break; } break; case VKI_XEN_SYSCTL_sched_id: POST_XEN_SYSCTL_WRITE(sched_id, sched_id); break; case VKI_XEN_SYSCTL_cpupool_op: if (sysctl->u.cpupool_op.op == VKI_XEN_SYSCTL_CPUPOOL_OP_CREATE || sysctl->u.cpupool_op.op == VKI_XEN_SYSCTL_CPUPOOL_OP_INFO) POST_XEN_SYSCTL_WRITE(cpupool_op, cpupool_id); --- a/include/vki/vki-xen-domctl.h +++ b/include/vki/vki-xen-domctl.h @@ -300,24 +300,45 @@ struct vki_xen_domctl_getdomaininfo_0000000f { vki_xen_uint64_aligned_t shared_info_frame; vki_xen_uint64_aligned_t cpu_time; vki_uint32_t nr_online_vcpus; vki_uint32_t max_vcpu_id; vki_uint32_t ssidref; vki_xen_domain_handle_t handle; vki_uint32_t cpupool; struct vki_xen_arch_domainconfig_0000000c arch; }; typedef struct vki_xen_domctl_getdomaininfo_0000000f vki_xen_domctl_getdomaininfo_0000000f_t; DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_0000000f_t); +struct vki_xen_domctl_getdomaininfo_00000012 { + /* OUT variables. */ + vki_xen_domid_t domain; + vki_uint32_t flags; + vki_xen_uint64_aligned_t tot_pages; + vki_xen_uint64_aligned_t max_pages; + vki_xen_uint64_aligned_t outstanding_pages; + vki_xen_uint64_aligned_t shr_pages; + vki_xen_uint64_aligned_t paged_pages; + vki_xen_uint64_aligned_t shared_info_frame; + vki_xen_uint64_aligned_t cpu_time; + vki_uint32_t nr_online_vcpus; + vki_uint32_t max_vcpu_id; + vki_uint32_t ssidref; + vki_xen_domain_handle_t handle; + vki_uint32_t cpupool; + struct vki_xen_arch_domainconfig_00000012 arch; +}; +typedef struct vki_xen_domctl_getdomaininfo_00000012 vki_xen_domctl_getdomaininfo_00000012_t; +DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000012_t); + /* Get/set the NUMA node(s) with which the guest has affinity with. */ /* XEN_DOMCTL_setnodeaffinity */ /* XEN_DOMCTL_getnodeaffinity */ struct vki_xen_domctl_nodeaffinity { struct vki_xenctl_bitmap nodemap;/* IN */ }; typedef struct vki_xen_domctl_nodeaffinity vki_xen_domctl_nodeaffinity_t; DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_nodeaffinity_t); struct vki_xen_domctl_getpageframeinfo3 { vki_xen_uint64_aligned_t num; /* IN */ VKI_XEN_GUEST_HANDLE_64(vki_xen_pfn_t) array; /* IN/OUT */ @@ -815,24 +836,25 @@ struct vki_xen_domctl { vki_uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */ vki_xen_domid_t domain; union { struct vki_xen_domctl_createdomain_00000004 createdomain_00000004; struct vki_xen_domctl_createdomain_0000000b createdomain_0000000b; struct vki_xen_domctl_createdomain_0000000c createdomain_0000000c; struct vki_xen_domctl_createdomain_00000011 createdomain_00000011; struct vki_xen_domctl_createdomain_00000012 createdomain_00000012; struct vki_xen_domctl_getdomaininfo_00000007 getdomaininfo_00000007; struct vki_xen_domctl_getdomaininfo_00000008 getdomaininfo_00000008; struct vki_xen_domctl_getdomaininfo_00000009 getdomaininfo_00000009; struct vki_xen_domctl_getdomaininfo_0000000f getdomaininfo_0000000f; + struct vki_xen_domctl_getdomaininfo_00000012 getdomaininfo_00000012; //struct vki_xen_domctl_getmemlist getmemlist; //struct vki_xen_domctl_getpageframeinfo getpageframeinfo; //struct vki_xen_domctl_getpageframeinfo2 getpageframeinfo2; struct vki_xen_domctl_getpageframeinfo3 getpageframeinfo3; struct vki_xen_domctl_nodeaffinity nodeaffinity; struct vki_xen_domctl_vcpuaffinity_00000009 vcpuaffinity_00000009; struct vki_xen_domctl_vcpuaffinity_0000000a vcpuaffinity_0000000a; struct vki_xen_domctl_shadow_op shadow_op; struct vki_xen_domctl_max_mem max_mem; struct vki_xen_domctl_vcpucontext vcpucontext; struct vki_xen_domctl_getvcpuinfo getvcpuinfo; struct vki_xen_domctl_max_vcpus max_vcpus; --- a/include/vki/vki-xen-sysctl.h +++ b/include/vki/vki-xen-sysctl.h @@ -108,24 +108,33 @@ struct vki_xen_sysctl_getdomaininfolist_00000009 { vki_uint32_t num_domains; }; struct vki_xen_sysctl_getdomaininfolist_0000000f { /* IN variables. */ vki_xen_domid_t first_domain; vki_uint32_t max_domains; VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_0000000f_t) buffer; /* OUT variables. */ vki_uint32_t num_domains; }; +struct vki_xen_sysctl_getdomaininfolist_00000012 { + /* IN variables. */ + vki_xen_domid_t first_domain; + vki_uint32_t max_domains; + VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000012_t) buffer; + /* OUT variables. */ + vki_uint32_t num_domains; +}; + #define VKI_XEN_SYSCTL_CPUPOOL_OP_CREATE 1 /* C */ #define VKI_XEN_SYSCTL_CPUPOOL_OP_DESTROY 2 /* D */ #define VKI_XEN_SYSCTL_CPUPOOL_OP_INFO 3 /* I */ #define VKI_XEN_SYSCTL_CPUPOOL_OP_ADDCPU 4 /* A */ #define VKI_XEN_SYSCTL_CPUPOOL_OP_RMCPU 5 /* R */ #define VKI_XEN_SYSCTL_CPUPOOL_OP_MOVEDOMAIN 6 /* M */ #define VKI_XEN_SYSCTL_CPUPOOL_OP_FREEINFO 7 /* F */ #define VKI_XEN_SYSCTL_CPUPOOL_PAR_ANY 0xFFFFFFFF struct vki_xen_sysctl_cpupool_op { vki_uint32_t op; /* IN */ vki_uint32_t cpupool_id; /* IN: CDIARM OUT: CI */ vki_uint32_t sched_id; /* IN: C OUT: I */ @@ -270,24 +279,25 @@ struct vki_xen_sysctl { struct vki_xen_sysctl_topologyinfo topologyinfo; struct vki_xen_sysctl_cputopoinfo_0000000c cputopoinfo_0000000c; struct vki_xen_sysctl_pcitopoinfo_0000000c pcitopoinfo_0000000c; struct vki_xen_sysctl_numainfo_00000008 numainfo_00000008; struct vki_xen_sysctl_numainfo_0000000c numainfo_0000000c; struct vki_xen_sysctl_sched_id sched_id; //struct vki_xen_sysctl_perfc_op perfc_op; /* getdomaininfolist (sysctl) suffix is the getdomaininfo (domctl) suffix */ struct vki_xen_sysctl_getdomaininfolist_00000007 getdomaininfolist_00000007; struct vki_xen_sysctl_getdomaininfolist_00000008 getdomaininfolist_00000008; struct vki_xen_sysctl_getdomaininfolist_00000009 getdomaininfolist_00000009; struct vki_xen_sysctl_getdomaininfolist_0000000f getdomaininfolist_0000000f; + struct vki_xen_sysctl_getdomaininfolist_00000012 getdomaininfolist_00000012; struct vki_xen_sysctl_debug_keys debug_keys; //struct vki_xen_sysctl_getcpuinfo getcpuinfo; //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_gcov_op gcov_op;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor