File valgrind.xen-3.4-handle-XENMEM_set_pod_target-XENMEM_get_pod_.patch of Package valgrind
From: Olaf Hering <olaf@aepfle.de>
Date: Fri, 16 Nov 2018 17:29:53 +0100
Subject: xen-3.4: handle XENMEM_set_pod_target/XENMEM_get_pod_target
bz#390553
---
coregrind/m_syswrap/syswrap-xen.c | 20 ++++++++++++++++++++
include/vki/vki-xen-memory.h | 8 ++++++++
2 files changed, 28 insertions(+)
--- a/coregrind/m_syswrap/syswrap-xen.c
+++ b/coregrind/m_syswrap/syswrap-xen.c
@@ -274,24 +274,34 @@ PRE(memory_op)
(struct vki_xen_remove_from_physmap *)ARG2;
PRE_MEM_READ("XENMEM_remove_from_physmap domid",
(Addr)&arg->domid, sizeof(arg->domid));
PRE_MEM_READ("XENMEM_remove_from_physmap gpfn",
(Addr)&arg->gpfn, sizeof(arg->gpfn));
break;
}
case VKI_XENMEM_get_sharing_freed_pages:
case VKI_XENMEM_get_sharing_shared_pages:
break;
+ case VKI_XENMEM_get_pod_target:
+ case VKI_XENMEM_set_pod_target: {
+ struct vki_xen_pod_target *arg =
+ (struct vki_xen_pod_target *)ARG2;
+ PRE_MEM_READ("XENMEM_set_pod_target target_pages",
+ (Addr)&arg->target_pages, sizeof(arg->target_pages));
+ PRE_MEM_READ("XENMEM_set_pod_target domid",
+ (Addr)&arg->domid, sizeof(arg->domid));
+ break;
+ }
case VKI_XENMEM_access_op: {
struct vki_xen_mem_event_op *arg =
(struct vki_xen_mem_event_op *)ARG2;
PRE_MEM_READ("XENMEM_access_op domid",
(Addr)&arg->domain, sizeof(arg->domain));
PRE_MEM_READ("XENMEM_access_op op",
(Addr)&arg->op, sizeof(arg->op));
PRE_MEM_READ("XENMEM_access_op gfn",
(Addr)&arg->gfn, sizeof(arg->gfn));
break;
}
default:
@@ -1549,24 +1559,25 @@ PRE(tmem_op)
#undef __PRE_XEN_TMEMOP_READ
}
POST(memory_op)
{
switch (ARG1) {
case VKI_XENMEM_maximum_ram_page:
case VKI_XENMEM_set_memory_map:
case VKI_XENMEM_decrease_reservation:
case VKI_XENMEM_claim_pages:
case VKI_XENMEM_maximum_gpfn:
case VKI_XENMEM_remove_from_physmap:
+ case VKI_XENMEM_set_pod_target:
case VKI_XENMEM_access_op:
/* No outputs */
break;
case VKI_XENMEM_increase_reservation:
case VKI_XENMEM_populate_physmap: {
struct xen_memory_reservation *memory_reservation =
(struct xen_memory_reservation *)ARG2;
POST_MEM_WRITE((Addr)memory_reservation->extent_start.p,
sizeof(vki_xen_pfn_t) * memory_reservation->nr_extents);
break;
}
@@ -1593,24 +1604,33 @@ POST(memory_op)
case VKI_XENMEM_add_to_physmap: {
struct vki_xen_add_to_physmap *arg =
(struct vki_xen_add_to_physmap *)ARG2;
if (arg->space == VKI_XENMAPSPACE_gmfn_range)
POST_MEM_WRITE(ARG2, sizeof(*arg));
}
case VKI_XENMEM_get_sharing_freed_pages:
case VKI_XENMEM_get_sharing_shared_pages:
/* No outputs */
break;
+ case VKI_XENMEM_get_pod_target: {
+ struct vki_xen_pod_target *arg =
+ (struct vki_xen_pod_target *)ARG2;
+ POST_MEM_WRITE((Addr)&arg->tot_pages, sizeof(arg->tot_pages));
+ POST_MEM_WRITE((Addr)&arg->pod_cache_pages, sizeof(arg->pod_cache_pages));
+ POST_MEM_WRITE((Addr)&arg->pod_entries, sizeof(arg->pod_entries));
+ }
+ break;
+
}
}
POST(mmuext_op)
{
unsigned int *pdone = (unsigned int *)ARG3;
/* simplistic */
POST_MEM_WRITE((Addr)pdone, sizeof(*pdone));
}
POST(xsm_op)
{
--- a/include/vki/vki-xen-memory.h
+++ b/include/vki/vki-xen-memory.h
@@ -84,24 +84,32 @@ struct vki_xen_add_to_physmap {
#define VKI_XENMAPSPACE_gmfn_foreign 4
unsigned int space;
vki_xen_ulong_t idx;
vki_xen_pfn_t gpfn;
};
struct vki_xen_remove_from_physmap {
vki_xen_domid_t domid;
vki_xen_pfn_t gpfn;
};
+struct vki_xen_pod_target {
+ vki_uint64_t target_pages;
+ vki_uint64_t tot_pages;
+ vki_uint64_t pod_cache_pages;
+ vki_uint64_t pod_entries;
+ vki_xen_domid_t domid;
+};
+
struct vki_xen_mem_event_op {
vki_uint8_t op;
vki_xen_domid_t domain;
vki_uint64_t buffer;
vki_uint64_t gfn;
};
#endif // __VKI_XEN_MEMORY_H
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/