Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:olh:xen-buildrequires
valgrind
valgrind.xen-3.4-versioned-hvmcontext_partial.p...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File valgrind.xen-3.4-versioned-hvmcontext_partial.patch of Package valgrind
From: Olaf Hering <olaf@aepfle.de> Date: Fri, 16 Nov 2018 17:29:42 +0100 Subject: xen-3.4: versioned hvmcontext_partial The layout of xen_domctl_hvmcontext_partial used from xen-3.4 up to xen-4.9. Rename the existing code and use the domctl value from xen-3.4 as suffix. Actually use the required layout for the member value. The code to deal with xen-4.10 was not implemented. Fixes commit c88133141a354d65568fb85037abc5e1f74ce46b bz#390553 --- coregrind/m_syswrap/syswrap-xen.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++-------------------------------- include/vki/vki-xen-domctl.h | 8 ++++---- 2 files changed, 51 insertions(+), 36 deletions(-) --- a/coregrind/m_syswrap/syswrap-xen.c +++ b/coregrind/m_syswrap/syswrap-xen.c @@ -880,48 +880,56 @@ PRE(domctl) __PRE_XEN_DOMCTL_READ(gethvmcontext, hvmcontext, size); break; case VKI_XEN_DOMCTL_sethvmcontext: __PRE_XEN_DOMCTL_READ(sethvmcontext, hvmcontext, size); __PRE_XEN_DOMCTL_READ(sethvmcontext, hvmcontext, buffer); PRE_MEM_READ("XEN_DOMCTL_sethvmcontext *buffer", (Addr)domctl->u.hvmcontext.buffer.p, domctl->u.hvmcontext.size); break; case VKI_XEN_DOMCTL_gethvmcontext_partial: - __PRE_XEN_DOMCTL_READ(gethvmcontext_partial, hvmcontext_partial_00000007, type); - __PRE_XEN_DOMCTL_READ(gethvmcontext_partial, hvmcontext_partial_00000007, instance); - __PRE_XEN_DOMCTL_READ(gethvmcontext_partial, hvmcontext_partial_00000007, buffer); - - switch (domctl->u.hvmcontext_partial_00000007.type) { - case VKI_HVM_SAVE_CODE(CPU): - if ( domctl->u.hvmcontext_partial_00000007.buffer.p ) - PRE_MEM_WRITE("XEN_DOMCTL_gethvmcontext_partial *buffer", - (Addr)domctl->u.hvmcontext_partial_00000007.buffer.p, - VKI_HVM_SAVE_LENGTH(CPU)); - break; - case VKI_HVM_SAVE_CODE(MTRR): - if ( domctl->u.hvmcontext_partial_00000007.buffer.p ) - PRE_MEM_WRITE("XEN_DOMCTL_gethvmcontext_partial *buffer", - (Addr)domctl->u.hvmcontext_partial_00000007.buffer.p, - VKI_HVM_SAVE_LENGTH(MTRR)); - break; - default: - bad_subop(tid, layout, arrghs, status, flags, - "__HYPERVISOR_domctl_gethvmcontext_partial type", - domctl->u.hvmcontext_partial_00000007.type); - break; - } - break; + switch (domctl->interface_version) { + case 0x00000007: + case 0x00000008: + case 0x00000009: + case 0x0000000a: + case 0x0000000b: + __PRE_XEN_DOMCTL_READ(gethvmcontext_partial, hvmcontext_partial_00000005, type); + __PRE_XEN_DOMCTL_READ(gethvmcontext_partial, hvmcontext_partial_00000005, instance); + __PRE_XEN_DOMCTL_READ(gethvmcontext_partial, hvmcontext_partial_00000005, buffer); + + switch (domctl->u.hvmcontext_partial_00000005.type) { + case VKI_HVM_SAVE_CODE(CPU): + if ( domctl->u.hvmcontext_partial_00000005.buffer.p ) + PRE_MEM_WRITE("XEN_DOMCTL_gethvmcontext_partial *buffer", + (Addr)domctl->u.hvmcontext_partial_00000005.buffer.p, + VKI_HVM_SAVE_LENGTH(CPU)); + break; + case VKI_HVM_SAVE_CODE(MTRR): + if ( domctl->u.hvmcontext_partial_00000005.buffer.p ) + PRE_MEM_WRITE("XEN_DOMCTL_gethvmcontext_partial *buffer", + (Addr)domctl->u.hvmcontext_partial_00000005.buffer.p, + VKI_HVM_SAVE_LENGTH(MTRR)); + break; + default: + bad_subop(tid, layout, arrghs, status, flags, + "__HYPERVISOR_domctl_gethvmcontext_partial type", + domctl->u.hvmcontext_partial_00000005.type); + break; + } + break; + } + break; case VKI_XEN_DOMCTL_max_mem: PRE_XEN_DOMCTL_READ(max_mem, max_memkb); break; case VKI_XEN_DOMCTL_set_address_size: __PRE_XEN_DOMCTL_READ(set_address_size, address_size, size); break; case VKI_XEN_DOMCTL_test_assign_device: switch (domctl->interface_version) { case 0x00000007: @@ -2203,32 +2211,39 @@ POST(domctl){ case VKI_XEN_DOMCTL_gethvmcontext: /* Xen unconditionally writes size... */ __POST_XEN_DOMCTL_WRITE(gethvmcontext, hvmcontext, size); /* ...but only writes to the buffer if it was non NULL */ if ( domctl->u.hvmcontext.buffer.p ) POST_MEM_WRITE((Addr)domctl->u.hvmcontext.buffer.p, sizeof(*domctl->u.hvmcontext.buffer.p) * domctl->u.hvmcontext.size); break; case VKI_XEN_DOMCTL_gethvmcontext_partial: - switch (domctl->u.hvmcontext_partial_00000007.type) { - case VKI_HVM_SAVE_CODE(CPU): - if ( domctl->u.hvmcontext_partial_00000007.buffer.p ) - POST_MEM_WRITE((Addr)domctl->u.hvmcontext_partial_00000007.buffer.p, - VKI_HVM_SAVE_LENGTH(CPU)); - break; - } - break; + switch (domctl->interface_version) { + case 0x00000007: + case 0x00000008: + case 0x00000009: + case 0x0000000a: + case 0x0000000b: + switch (domctl->u.hvmcontext_partial_00000005.type) { + case VKI_HVM_SAVE_CODE(CPU): + if ( domctl->u.hvmcontext_partial_00000005.buffer.p ) + POST_MEM_WRITE((Addr)domctl->u.hvmcontext_partial_00000005.buffer.p, VKI_HVM_SAVE_LENGTH(CPU)); + break; + } + break; + } + break; case VKI_XEN_DOMCTL_scheduler_op: if ( domctl->u.scheduler_op.cmd == VKI_XEN_DOMCTL_SCHEDOP_getinfo ) { switch(domctl->u.scheduler_op.sched_id) { case VKI_XEN_SCHEDULER_SEDF: POST_XEN_DOMCTL_WRITE(scheduler_op, u.sedf.period); POST_XEN_DOMCTL_WRITE(scheduler_op, u.sedf.slice); POST_XEN_DOMCTL_WRITE(scheduler_op, u.sedf.latency); POST_XEN_DOMCTL_WRITE(scheduler_op, u.sedf.extratime); POST_XEN_DOMCTL_WRITE(scheduler_op, u.sedf.weight); break; case VKI_XEN_SCHEDULER_CREDIT: --- a/include/vki/vki-xen-domctl.h +++ b/include/vki/vki-xen-domctl.h @@ -395,31 +395,31 @@ struct vki_xen_domctl_tsc_info_0000000b { vki_uint32_t pad; vki_xen_uint64_aligned_t elapsed_nsec; }; struct vki_xen_domctl_hvmcontext { vki_uint32_t size; /* IN/OUT size of buffer */ VKI_XEN_GUEST_HANDLE_64(vki_uint8) buffer; /* IN/OUT */ }; typedef struct vki_xen_domctl_hvmcontext vki_xen_domctl_hvmcontext_t; DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_hvmcontext_t); -struct vki_xen_domctl_hvmcontext_partial_00000007 { +struct vki_xen_domctl_hvmcontext_partial_00000005 { vki_uint32_t type; /* IN */ vki_uint32_t instance; /* IN */ VKI_XEN_GUEST_HANDLE_64(vki_uint8) buffer; /* IN/OUT buffer */ }; -typedef struct vki_xen_domctl_hvmcontext_partial_00000007 vki_xen_domctl_hvmcontext_partial_00000007_t; -DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_hvmcontext_partial_00000007_t); +typedef struct vki_xen_domctl_hvmcontext_partial_00000005 vki_xen_domctl_hvmcontext_partial_00000005_t; +DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_hvmcontext_partial_00000005_t); struct vki_xen_domctl_hvmcontext_partial_0000000e { vki_uint32_t type; /* IN */ vki_uint32_t instance; /* IN */ vki_xen_uint64_aligned_t bufsz; /* IN */ VKI_XEN_GUEST_HANDLE_64(vki_uint8) buffer; /* OUT buffer */ }; typedef struct vki_xen_domctl_hvmcontext_partial_0000000e vki_xen_domctl_hvmcontext_partial_0000000e_t; DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_hvmcontext_partial_0000000e_t); struct vki_xen_domctl_pin_mem_cacheattr { vki_xen_uint64_aligned_t start, end; /* IN */ @@ -682,25 +682,25 @@ struct vki_xen_domctl { //struct vki_xen_domctl_setdebugging setdebugging; struct vki_xen_domctl_irq_permission irq_permission; struct vki_xen_domctl_iomem_permission iomem_permission; struct vki_xen_domctl_ioport_permission ioport_permission; struct vki_xen_domctl_hypercall_init hypercall_init; //struct vki_xen_domctl_arch_setup arch_setup; struct vki_xen_domctl_settimeoffset_00000001 settimeoffset_00000001; //struct vki_xen_domctl_disable_migrate disable_migrate; struct vki_xen_domctl_tsc_info_00000007 tsc_info_00000007; struct vki_xen_domctl_tsc_info_0000000b tsc_info_0000000b; //struct vki_xen_domctl_real_mode_area real_mode_area; struct vki_xen_domctl_hvmcontext hvmcontext; - struct vki_xen_domctl_hvmcontext_partial_0000000e hvmcontext_partial_00000007; + struct vki_xen_domctl_hvmcontext_partial_00000005 hvmcontext_partial_00000005; struct vki_xen_domctl_hvmcontext_partial_0000000e hvmcontext_partial_0000000e; struct vki_xen_domctl_address_size address_size; //struct vki_xen_domctl_sendtrigger sendtrigger; //struct vki_xen_domctl_get_device_group get_device_group; struct vki_xen_domctl_assign_device_00000007 assign_device_00000007; struct vki_xen_domctl_assign_device_0000000b assign_device_0000000b; //struct vki_xen_domctl_bind_pt_irq bind_pt_irq; //struct vki_xen_domctl_memory_mapping memory_mapping; //struct vki_xen_domctl_ioport_mapping ioport_mapping; struct vki_xen_domctl_pin_mem_cacheattr pin_mem_cacheattr; struct vki_xen_domctl_ext_vcpucontext_00000008 ext_vcpucontext_00000008; struct vki_xen_domctl_ext_vcpucontext_00000009 ext_vcpucontext_00000009;
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