File valgrind.xen-4.7-versioned-XEN_SYSCTL_get_cpu_featureset.patch of Package valgrind

From: Olaf Hering <olaf@aepfle.de>
Date: Fri, 16 Nov 2018 17:21:31 +0100
Subject: xen-4.7: versioned XEN_SYSCTL_get_cpu_featureset

bz#390553
---
 coregrind/m_syswrap/syswrap-xen.c | 22 +++++++++
 include/vki/vki-xen-sysctl.h      |  8 +++
 2 files changed, 30 insertions(+)

--- a/coregrind/m_syswrap/syswrap-xen.c
+++ b/coregrind/m_syswrap/syswrap-xen.c
@@ -810,24 +810,34 @@ PRE(sysctl) {
       break;
 
    case VKI_XEN_SYSCTL_pcitopoinfo:
       switch (sysctl->interface_version)
       {
       case 0x0000000c:
          PRE_XEN_SYSCTL_READ(pcitopoinfo_0000000c, num_devs);
          PRE_XEN_SYSCTL_READ(pcitopoinfo_0000000c, devs);
          break;
       }
       break;
 
+   case VKI_XEN_SYSCTL_get_cpu_featureset:
+      switch (sysctl->interface_version)
+      {
+      case 0x0000000d:
+         PRE_XEN_SYSCTL_READ(cpu_featureset_0000000d, index);
+         PRE_XEN_SYSCTL_READ(cpu_featureset_0000000d, nr_features);
+         break;
+      }
+      break;
+
    default:
       bad_subop(tid, layout, arrghs, status, flags,
                 "__HYPERVISOR_sysctl", sysctl->cmd);
       break;
    }
 #undef PRE_XEN_SYSCTL_READ
 #undef __PRE_XEN_SYSCTL_READ
 }
 
 PRE(domctl)
 {
    struct vki_xen_domctl *domctl = (struct vki_xen_domctl *)ARG1;
@@ -2225,24 +2235,36 @@ POST(sysctl)
       break;
 
    case VKI_XEN_SYSCTL_pcitopoinfo:
       switch (sysctl->interface_version)
       {
       case 0x0000000c:
          POST_XEN_SYSCTL_WRITE(pcitopoinfo_0000000c, num_devs);
          POST_MEM_WRITE((Addr)sysctl->u.pcitopoinfo_0000000c.nodes.p,
                         sizeof(uint32_t) *  sysctl->u.pcitopoinfo_0000000c.num_devs);
          break;
       }
       break;
+
+   case VKI_XEN_SYSCTL_get_cpu_featureset:
+      switch (sysctl->interface_version)
+      {
+      case 0x0000000d:
+         POST_XEN_SYSCTL_WRITE(cpu_featureset_0000000d, nr_features);
+         POST_MEM_WRITE((Addr)sysctl->u.cpu_featureset_0000000d.features.p,
+                        sizeof(uint32_t) *  sysctl->u.cpu_featureset_0000000d.nr_features);
+         break;
+      }
+      break;
+
    /* No outputs */
    case VKI_XEN_SYSCTL_debug_keys:
        break;
    }
 #undef POST_XEN_SYSCTL_WRITE
 #undef __POST_XEN_SYSCTL_WRITE
 }
 
 POST(domctl){
    struct vki_xen_domctl *domctl = (struct vki_xen_domctl *)ARG1;
 
    switch (domctl->interface_version) {
--- a/include/vki/vki-xen-sysctl.h
+++ b/include/vki/vki-xen-sysctl.h
@@ -40,24 +40,25 @@
 #define VKI_XEN_SYSCTL_page_offline_op               14
 #define VKI_XEN_SYSCTL_lockprof_op                   15
 #define VKI_XEN_SYSCTL_topologyinfo                  16
 #define VKI_XEN_SYSCTL_cputopoinfo                   16 /* Since xen-4.6 */
 #define VKI_XEN_SYSCTL_numainfo                      17
 #define VKI_XEN_SYSCTL_cpupool_op                    18
 #define VKI_XEN_SYSCTL_scheduler_op                  19
 #define VKI_XEN_SYSCTL_coverage_op                   20
 #define VKI_XEN_SYSCTL_psr_cmt_op                    21
 #define VKI_XEN_SYSCTL_pcitopoinfo                   22
 #define VKI_XEN_SYSCTL_psr_cat_op                    23
 #define VKI_XEN_SYSCTL_tmem_op                       24
+#define VKI_XEN_SYSCTL_get_cpu_featureset            26
 
 struct vki_xen_sysctl_readconsole {
     /* IN */
     vki_uint8_t clear;
     vki_uint8_t incremental;
 
     vki_uint8_t pad0, pad1;
 
     /*
      * IN:  Start index for consumption if @incremental.
      * OUT: End index after consuming from the console.
      */
@@ -223,24 +224,30 @@ struct vki_xen_sysctl_physinfo_00000010 {
     vki_xen_uint64_aligned_t scrub_pages;
     vki_xen_uint64_aligned_t outstanding_pages;
     vki_xen_uint64_aligned_t max_mfn;
     vki_uint32_t hw_cap[8];
 
 };
 
 struct vki_xen_sysctl_sched_id {
     /* OUT variable. */
     vki_uint32_t              sched_id;
 };
 
+struct vki_xen_sysctl_cpu_featureset_0000000d {
+    vki_uint32_t index;
+    vki_uint32_t nr_features;
+    VKI_XEN_GUEST_HANDLE_64(vki_uint32) features;
+};
+
 struct vki_xen_sysctl {
     vki_uint32_t cmd;
     vki_uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */
     union {
         struct vki_xen_sysctl_readconsole       readconsole;
         //struct vki_xen_sysctl_tbuf_op           tbuf_op;
         struct vki_xen_sysctl_physinfo_00000008 physinfo_00000008;
         struct vki_xen_sysctl_physinfo_0000000a physinfo_0000000a;
         struct vki_xen_sysctl_physinfo_00000010 physinfo_00000010;
         struct vki_xen_sysctl_topologyinfo      topologyinfo;
         struct vki_xen_sysctl_cputopoinfo_0000000c cputopoinfo_0000000c;
         struct vki_xen_sysctl_pcitopoinfo_0000000c pcitopoinfo_0000000c;
@@ -258,22 +265,23 @@ struct vki_xen_sysctl {
         //struct vki_xen_sysctl_availheap         availheap;
         //struct vki_xen_sysctl_get_pmstat        get_pmstat;
         //struct vki_xen_sysctl_cpu_hotplug       cpu_hotplug;
         //struct vki_xen_sysctl_pm_op             pm_op;
         //struct vki_xen_sysctl_page_offline_op   page_offline;
         //struct vki_xen_sysctl_lockprof_op       lockprof_op;
         struct vki_xen_sysctl_cpupool_op        cpupool_op;
         //struct vki_xen_sysctl_scheduler_op      scheduler_op;
         //struct vki_xen_sysctl_coverage_op       coverage_op;
         //struct vki_xen_sysctl_psr_cmt_op        psr_cmt_op;
         //struct vki_xen_sysctl_psr_cat_op        psr_cat_op;
         //struct vki_xen_sysctl_tmem_op           tmem_op;
+        struct vki_xen_sysctl_cpu_featureset_0000000d cpu_featureset_0000000d;
 
         vki_uint8_t                             pad[128];
     } u;
 };
 
 #endif // __VKI_XEN_SYSCTL_H
 
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
openSUSE Build Service is sponsored by