Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:olh:xen-buildrequires
valgrind
valgrind.xen-4.8-versioned-xen_domctl_monitor_o...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File valgrind.xen-4.8-versioned-xen_domctl_monitor_op.patch of Package valgrind
From: Olaf Hering <olaf@aepfle.de> Date: Fri, 16 Nov 2018 17:29:28 +0100 Subject: xen-4.8: versioned xen_domctl_monitor_op Layout of xen_domctl_monitor_op changed in xen-4.8. Copy and adjust the existing monitor_op_0000000b handler. bz#390553 --- coregrind/m_syswrap/syswrap-xen.c | 47 +++++++++++++++++++++++++++++++++++++++++------ include/vki/vki-xen-domctl.h | 22 ++++++++++++++++++++++ 2 files changed, 63 insertions(+), 6 deletions(-) --- a/coregrind/m_syswrap/syswrap-xen.c +++ b/coregrind/m_syswrap/syswrap-xen.c @@ -1564,45 +1564,63 @@ PRE(domctl) __PRE_XEN_DOMCTL_READ(set_vcpu_msrs, vcpu_msrs, vcpu); __PRE_XEN_DOMCTL_READ(set_vcpu_msrs, vcpu_msrs, msr_count); __PRE_XEN_DOMCTL_READ(set_vcpu_msrs, vcpu_msrs, msrs); PRE_MEM_READ("XEN_DOMCTL_set_vcpu_msrs *u.vcpu_msrs.msrs.p", (Addr)domctl->u.vcpu_msrs.msrs.p, sizeof(vki_xen_domctl_vcpu_msr_t) * domctl->u.vcpu_msrs.msr_count); break; case VKI_XEN_DOMCTL_monitor_op: switch (domctl->interface_version) { case 0x0000000b: - case 0x0000000c: - case 0x0000000d: - case 0x0000000e: - case 0x0000000f: - case 0x00000010: if (domctl->u.monitor_op_0000000b.op == VKI_XEN_DOMCTL_MONITOR_OP_ENABLE || domctl->u.monitor_op_0000000b.op == VKI_XEN_DOMCTL_MONITOR_OP_DISABLE) { switch (domctl->u.monitor_op_0000000b.event) { case VKI_XEN_DOMCTL_MONITOR_EVENT_WRITE_CTRLREG: __PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_0000000b, u.mov_to_cr); break; case VKI_XEN_DOMCTL_MONITOR_EVENT_MOV_TO_MSR: __PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_0000000b, u.mov_to_msr); break; case VKI_XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST: __PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_0000000b, u.guest_request); break; } } break; + case 0x0000000c: + case 0x0000000d: + case 0x0000000e: + case 0x0000000f: + case 0x00000010: + if (domctl->u.monitor_op_0000000c.op == VKI_XEN_DOMCTL_MONITOR_OP_ENABLE || + domctl->u.monitor_op_0000000c.op == VKI_XEN_DOMCTL_MONITOR_OP_DISABLE) { + switch (domctl->u.monitor_op_0000000c.event) { + case VKI_XEN_DOMCTL_MONITOR_EVENT_WRITE_CTRLREG: + __PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_0000000c, u.mov_to_cr); + break; + case VKI_XEN_DOMCTL_MONITOR_EVENT_MOV_TO_MSR: + __PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_0000000c, u.mov_to_msr); + 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 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) { case VKI_XEN_DOMCTL_MONITOR_EVENT_WRITE_CTRLREG: __PRE_XEN_DOMCTL_READ(monitor_op, monitor_op_00000011, 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); break; case VKI_XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST: @@ -2653,25 +2671,42 @@ POST(domctl){ switch(domctl->u.monitor_op_0000000b.event) { case VKI_XEN_DOMCTL_MONITOR_EVENT_WRITE_CTRLREG: __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000b, u.mov_to_cr); break; case VKI_XEN_DOMCTL_MONITOR_EVENT_MOV_TO_MSR: __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000b, u.mov_to_msr); break; case VKI_XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST: __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000b, u.guest_request); break; } } - + break; + case 0x0000000c: + if (domctl->u.monitor_op_0000000c.op == VKI_XEN_DOMCTL_MONITOR_OP_GET_CAPABILITIES) { + switch(domctl->u.monitor_op_0000000c.event) { + case VKI_XEN_DOMCTL_MONITOR_EVENT_WRITE_CTRLREG: + __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000c, u.mov_to_cr); + break; + case VKI_XEN_DOMCTL_MONITOR_EVENT_MOV_TO_MSR: + __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000c, u.mov_to_msr); + break; + case VKI_XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST: + __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000c, u.guest_request); + break; + case VKI_XEN_DOMCTL_MONITOR_EVENT_DEBUG_EXCEPTION: + __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000c, u.debug_exception); + break; + } + } break; case 0x0000011: if (domctl->u.monitor_op_00000011.op == VKI_XEN_DOMCTL_MONITOR_OP_GET_CAPABILITIES) { switch(domctl->u.monitor_op_00000011.event) { case VKI_XEN_DOMCTL_MONITOR_EVENT_WRITE_CTRLREG: __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_00000011, 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); break; case VKI_XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST: __POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_00000011, u.guest_request); --- a/include/vki/vki-xen-domctl.h +++ b/include/vki/vki-xen-domctl.h @@ -660,24 +660,45 @@ struct vki_xen_domctl_monitor_op_0000000b { struct { /* Enable the capture of an extended set of MSRs */ vki_uint8_t extended_capture; } mov_to_msr; struct { /* Pause vCPU until response */ vki_uint8_t sync; } guest_request; } u; }; +struct vki_xen_domctl_monitor_op_0000000c { + vki_uint32_t op; /* vki_xen_DOMCTL_MONITOR_OP_* */ + vki_uint32_t event; + union { + struct { + vki_uint8_t index; + vki_uint8_t sync; + vki_uint8_t onchangeonly; + } mov_to_cr; + struct { + vki_uint32_t msr; + } mov_to_msr; + struct { + vki_uint8_t sync; + } guest_request; + struct { + vki_uint8_t sync; + } debug_exception; + } u; +}; + struct vki_xen_domctl_monitor_op_00000011 { 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; @@ -784,24 +805,25 @@ struct vki_xen_domctl { struct vki_xen_domctl_vcpu_msrs vcpu_msrs; #endif 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_00000011 monitor_op_00000011; //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; vki_uint8_t pad[128]; } u; }; #endif // __VKI_XEN_DOMCTL_H /*--------------------------------------------------------------------*/
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