File valgrind.xen-4.11-versioned-xen_domctl_monitor_op.patch of Package valgrind
From: Olaf Hering <olaf@aepfle.de>
Date: Tue, 20 Nov 2018 10:55:51 +0100
Subject: xen-4.11: versioned xen_domctl_monitor_op
Handle new layout of xen_domctl_monitor_op in xen-4.11
Fixes commit c88133141a354d65568fb85037abc5e1f74ce46b.
bz#390553
---
coregrind/m_syswrap/syswrap-xen.c | 32 +++++++++++++++++++-------------
include/vki/vki-xen-domctl.h | 29 ++---------------------------
2 files changed, 21 insertions(+), 40 deletions(-)
--- a/coregrind/m_syswrap/syswrap-xen.c
+++ b/coregrind/m_syswrap/syswrap-xen.c
@@ -1712,61 +1712,63 @@ PRE(domctl)
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST:
__PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_0000000c, u.guest_request);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_DEBUG_EXCEPTION:
__PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_0000000c, u.debug_exception);
break;
}
}
break;
case 0x0000000e:
case 0x0000000f:
- case 0x00000010:
if (domctl->u.monitor_op_0000000e.op == VKI_XEN_DOMCTL_MONITOR_OP_ENABLE ||
domctl->u.monitor_op_0000000e.op == VKI_XEN_DOMCTL_MONITOR_OP_DISABLE) {
switch (domctl->u.monitor_op_0000000e.event) {
case VKI_XEN_DOMCTL_MONITOR_EVENT_WRITE_CTRLREG:
__PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_0000000e, u.mov_to_cr);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_MOV_TO_MSR:
__PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_0000000e, u.mov_to_msr);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST:
__PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_0000000e, u.guest_request);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_DEBUG_EXCEPTION:
__PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_0000000e, u.debug_exception);
break;
}
}
break;
+ case 0x00000010:
case 0x0000011:
case 0x0000012:
- if (domctl->u.monitor_op_00000011.op == VKI_XEN_DOMCTL_MONITOR_OP_ENABLE ||
- domctl->u.monitor_op_00000011.op == VKI_XEN_DOMCTL_MONITOR_OP_DISABLE) {
- switch (domctl->u.monitor_op_00000011.event) {
+ if (domctl->u.monitor_op_00000010.op == VKI_XEN_DOMCTL_MONITOR_OP_ENABLE ||
+ domctl->u.monitor_op_00000010.op == VKI_XEN_DOMCTL_MONITOR_OP_DISABLE) {
+ switch (domctl->u.monitor_op_00000010.event) {
case VKI_XEN_DOMCTL_MONITOR_EVENT_WRITE_CTRLREG:
- __PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_00000011, u.mov_to_cr);
+ __PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_00000010, u.mov_to_cr);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_MOV_TO_MSR:
- __PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_00000011, u.mov_to_msr);
+ __PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_00000010, u.mov_to_msr);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST:
- __PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_00000011, u.guest_request);
+ __PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_00000010, u.guest_request);
+ break;
+ case VKI_XEN_DOMCTL_MONITOR_EVENT_DEBUG_EXCEPTION:
+ __PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_00000010, u.debug_exception);
break;
}
}
-
break;
}
break;
case VKI_XEN_DOMCTL_set_gnttab_limits:
PRE_XEN_DOMCTL_READ(set_gnttab_limits_0000000e, grant_frames);
PRE_XEN_DOMCTL_READ(set_gnttab_limits_0000000e, maptrack_frames);
break;
default:
bad_subop(tid, layout, arrghs, status, flags,
"__HYPERVISOR_domctl", domctl->cmd);
@@ -2906,36 +2908,40 @@ POST(domctl){
__POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000e, u.mov_to_msr);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST:
__POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000e, u.guest_request);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_DEBUG_EXCEPTION:
__POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000e, u.debug_exception);
break;
}
}
break;
+ case 0x0000010:
case 0x0000011:
- if (domctl->u.monitor_op_00000011.op == VKI_XEN_DOMCTL_MONITOR_OP_GET_CAPABILITIES) {
- switch(domctl->u.monitor_op_00000011.event) {
+ if (domctl->u.monitor_op_00000010.op == VKI_XEN_DOMCTL_MONITOR_OP_GET_CAPABILITIES) {
+ switch(domctl->u.monitor_op_00000010.event) {
case VKI_XEN_DOMCTL_MONITOR_EVENT_WRITE_CTRLREG:
- __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_00000011, u.mov_to_cr);
+ __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_00000010, u.mov_to_cr);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_MOV_TO_MSR:
- __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_00000011, u.mov_to_msr);
+ __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_00000010, u.mov_to_msr);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST:
- __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_00000011, u.guest_request);
+ __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_00000010, u.guest_request);
break;
+ case VKI_XEN_DOMCTL_MONITOR_EVENT_DEBUG_EXCEPTION:
+ __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_00000010, u.debug_exception);
+ break;
}
}
break;
}
break;
}
#undef POST_XEN_DOMCTL_WRITE
#undef __POST_XEN_DOMCTL_WRITE
}
--- a/include/vki/vki-xen-domctl.h
+++ b/include/vki/vki-xen-domctl.h
@@ -749,70 +749,45 @@ struct vki_xen_domctl_monitor_op_0000000e {
vki_uint32_t msr;
} mov_to_msr;
struct {
vki_uint8_t sync;
vki_uint8_t allow_userspace;
} guest_request;
struct {
vki_uint8_t sync;
} debug_exception;
} u;
};
-struct vki_xen_domctl_monitor_op_00000011 {
+struct vki_xen_domctl_monitor_op_00000010 {
vki_uint32_t op; /* vki_xen_DOMCTL_MONITOR_OP_* */
-
- /*
- * When used with ENABLE/DISABLE this has to be set to
- * the requested vki_xen_DOMCTL_MONITOR_EVENT_* value.
- * With GET_CAPABILITIES this field returns a bitmap of
- * events supported by the platform, in the format
- * (1 << vki_xen_DOMCTL_MONITOR_EVENT_*).
- */
vki_uint32_t event;
-
- /*
- * Further options when issuing vki_xen_DOMCTL_MONITOR_OP_ENABLE.
- */
union {
struct {
- /* Which control register */
vki_uint8_t index;
- /* Pause vCPU until response */
vki_uint8_t sync;
- /* Send event only on a change of value */
vki_uint8_t onchangeonly;
- /* Allignment padding */
vki_uint8_t pad1;
vki_uint32_t pad2;
- /*
- * Send event only if the changed bit in the control register
- * is not masked.
- */
vki_xen_uint64_aligned_t bitmask;
} mov_to_cr;
-
struct {
vki_uint32_t msr;
vki_uint8_t onchangeonly;
} mov_to_msr;
-
struct {
- /* Pause vCPU until response */
vki_uint8_t sync;
vki_uint8_t allow_userspace;
} guest_request;
-
struct {
- /* Pause vCPU until response */
vki_uint8_t sync;
} debug_exception;
} u;
};
struct vki_xen_domctl_set_gnttab_limits_0000000e {
vki_uint32_t grant_frames;
vki_uint32_t maptrack_frames;
};
struct vki_xen_domctl {
vki_uint32_t cmd;
@@ -882,25 +857,25 @@ struct vki_xen_domctl {
struct vki_xen_domctl_set_access_required access_required;
//struct vki_xen_domctl_audit_p2m audit_p2m;
//struct vki_xen_domctl_set_virq_handler set_virq_handler;
struct vki_xen_domctl_set_max_evtchn set_max_evtchn;
//struct vki_xen_domctl_gdbsx_memio gdbsx_guest_memio;
//struct vki_xen_domctl_set_broken_page_p2m set_broken_page_p2m;
struct vki_xen_domctl_cacheflush cacheflush;
//struct vki_xen_domctl_gdbsx_pauseunp_vcpu gdbsx_pauseunp_vcpu;
//struct vki_xen_domctl_gdbsx_domstatus gdbsx_domstatus;
struct vki_xen_domctl_monitor_op_0000000b monitor_op_0000000b;
struct vki_xen_domctl_monitor_op_0000000c monitor_op_0000000c;
struct vki_xen_domctl_monitor_op_0000000e monitor_op_0000000e;
- struct vki_xen_domctl_monitor_op_00000011 monitor_op_00000011;
+ struct vki_xen_domctl_monitor_op_00000010 monitor_op_00000010;
//struct vki_xen_domctl_vnuma vnuma;
//struct vki_xen_domctl_psr_cmt_op psr_cmt_op;
//struct vki_xen_domctl_psr_cat_op psr_cat_op;
//struct vki_xen_domctl_arm_configuredomain configuredomain;
struct vki_xen_domctl_set_gnttab_limits_0000000e set_gnttab_limits_0000000e;
//struct vki_xen_domctl_vuart_op vuart_op;
vki_uint8_t pad[128];
} u;
};
#endif // __VKI_XEN_DOMCTL_H