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                                                          ---*/
 /*--------------------------------------------------------------------*/
openSUSE Build Service is sponsored by