File valgrind.xen-4.13-versioned-xen_domctl_createdomain.patch of Package valgrind
From: Olaf Hering <olaf@aepfle.de>
Date: Tue, 28 Jan 2020 13:06:33 +0100
Subject: xen-4.13: versioned xen_domctl_createdomain
bz#390553
---
coregrind/m_syswrap/syswrap-xen.c | 18 ++++++++++++++++++
include/vki/vki-xen-domctl.h | 29 +++++++++++++++++++++++++++++
2 files changed, 47 insertions(+)
--- a/coregrind/m_syswrap/syswrap-xen.c
+++ b/coregrind/m_syswrap/syswrap-xen.c
@@ -1021,24 +1021,42 @@ PRE(domctl)
PRE_XEN_DOMCTL_READ(createdomain_00000011, handle);
PRE_XEN_DOMCTL_READ(createdomain_00000011, flags);
PRE_XEN_DOMCTL_READ(createdomain_00000011, max_vcpus);
PRE_XEN_DOMCTL_READ(createdomain_00000011, max_evtchn_port);
PRE_XEN_DOMCTL_READ(createdomain_00000011, max_maptrack_frames);
#if defined(__i386__) || defined(__x86_64__)
__PRE_XEN_DOMCTL_READ(createdomain_00000011, createdomain_00000011, config.emulation_flags);
#endif
#if defined(__arm__) || defined(__aarch64__)
__PRE_XEN_DOMCTL_READ(createdomain_00000011, createdomain_00000011, config.gic_version);
__PRE_XEN_DOMCTL_READ(createdomain_00000011, createdomain_00000011, config.nr_spis);
__PRE_XEN_DOMCTL_READ(createdomain_00000011, createdomain_00000011, config.clock_frequency);
+#endif
+ break;
+ case 0x00000012:
+ PRE_XEN_DOMCTL_READ(createdomain_00000012, ssidref);
+ PRE_XEN_DOMCTL_READ(createdomain_00000012, handle);
+ PRE_XEN_DOMCTL_READ(createdomain_00000012, flags);
+ PRE_XEN_DOMCTL_READ(createdomain_00000012, iommu_opts);
+ PRE_XEN_DOMCTL_READ(createdomain_00000012, max_vcpus);
+ PRE_XEN_DOMCTL_READ(createdomain_00000012, max_evtchn_port);
+ PRE_XEN_DOMCTL_READ(createdomain_00000012, max_maptrack_frames);
+#if defined(__i386__) || defined(__x86_64__)
+ __PRE_XEN_DOMCTL_READ(createdomain_00000012, createdomain_00000012, config.emulation_flags);
+#endif
+#if defined(__arm__) || defined(__aarch64__)
+ __PRE_XEN_DOMCTL_READ(createdomain_00000012, createdomain_00000012, config.gic_version);
+ __PRE_XEN_DOMCTL_READ(createdomain_00000012, createdomain_00000012, config.tee_type);
+ __PRE_XEN_DOMCTL_READ(createdomain_00000012, createdomain_00000012, config.nr_spis);
+ __PRE_XEN_DOMCTL_READ(createdomain_00000012, createdomain_00000012, config.clock_frequency);
#endif
break;
}
break;
case VKI_XEN_DOMCTL_gethvmcontext:
/* Xen unconditionally reads the 'buffer' pointer */
__PRE_XEN_DOMCTL_READ(gethvmcontext, hvmcontext, buffer);
/* Xen only consumes 'size' if 'buffer' is non NULL. A NULL
* buffer is a request for the required size. */
if ( domctl->u.hvmcontext.buffer.p )
__PRE_XEN_DOMCTL_READ(gethvmcontext, hvmcontext, size);
--- a/include/vki/vki-xen-domctl.h
+++ b/include/vki/vki-xen-domctl.h
@@ -166,24 +166,39 @@ struct vki_xen_arch_domainconfig_0000000c {
#if defined(__i386__) || defined(__x86_64__)
vki_uint32_t emulation_flags;
#endif
#if defined(__arm__) || defined(__aarch64__)
/* IN/OUT */
vki_uint8_t gic_version;
/* IN */
vki_uint32_t nr_spis;
vki_uint32_t clock_frequency;
#endif
};
+struct vki_xen_arch_domainconfig_00000012 {
+#if defined(__i386__) || defined(__x86_64__)
+ vki_uint32_t emulation_flags;
+#endif
+#if defined(__arm__) || defined(__aarch64__)
+ /* IN/OUT */
+ vki_uint8_t gic_version;
+ /* IN */
+ vki_uint16_t tee_type;
+ /* IN */
+ vki_uint32_t nr_spis;
+ vki_uint32_t clock_frequency;
+#endif
+};
+
struct vki_xen_domctl_createdomain_0000000b {
/* IN parameters */
vki_uint32_t ssidref;
vki_xen_domain_handle_t handle;
vki_uint32_t flags;
struct vki_xen_arch_domainconfig_0000000b config;
};
struct vki_xen_domctl_createdomain_0000000c {
/* IN parameters */
vki_uint32_t ssidref;
vki_xen_domain_handle_t handle;
@@ -194,24 +209,37 @@ struct vki_xen_domctl_createdomain_0000000c {
struct vki_xen_domctl_createdomain_00000011 {
/* IN parameters */
vki_uint32_t ssidref;
vki_xen_domain_handle_t handle;
vki_uint32_t flags;
vki_uint32_t max_vcpus;
vki_uint32_t max_evtchn_port;
vki_uint32_t max_grant_frames;
vki_uint32_t max_maptrack_frames;
struct vki_xen_arch_domainconfig_0000000c config;
};
+struct vki_xen_domctl_createdomain_00000012 {
+ /* IN parameters */
+ vki_uint32_t ssidref;
+ vki_xen_domain_handle_t handle;
+ vki_uint32_t flags;
+ vki_uint32_t iommu_opts;
+ vki_uint32_t max_vcpus;
+ vki_uint32_t max_evtchn_port;
+ vki_uint32_t max_grant_frames;
+ vki_uint32_t max_maptrack_frames;
+ struct vki_xen_arch_domainconfig_00000012 config;
+};
+
struct vki_xen_domctl_getdomaininfo_00000007 {
/* 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 shr_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;
@@ -782,24 +810,25 @@ struct vki_xen_domctl_cpu_policy_00000011 {
VKI_XEN_GUEST_HANDLE_64(vki_xen_msr_entry_00000012_t) msr_policy;
};
struct vki_xen_domctl {
vki_uint32_t cmd;
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_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;