]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Bug 413119 - ioctl wrapper for DRM_IOCTL_I915_GEM_MMAP.
authorJulian Seward <jseward@acm.org>
Mon, 30 Dec 2019 10:23:32 +0000 (11:23 +0100)
committerJulian Seward <jseward@acm.org>
Mon, 30 Dec 2019 10:23:32 +0000 (11:23 +0100)
Patches from Simon Richter <Simon.Richter@hogyros.de>.

coregrind/m_syswrap/syswrap-linux.c
include/vki/vki-linux-drm.h

index 20132f5ac88481b4cfc6e38683dfb24365768006..6852366dda34b8d80a1c314f740686e442029135 100644 (file)
@@ -8251,6 +8251,27 @@ PRE(sys_ioctl)
          * consecutive vertices) */
       }
       break;
+   case VKI_DRM_IOCTL_I915_GEM_MMAPv1:
+      if (ARG3) {
+        struct vki_drm_i915_gem_mmap_v1 *data =
+            (struct vki_drm_i915_gem_mmap_v1 *)(Addr)ARG3;
+        PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAPv1).handle", (Addr)&data->handle, sizeof(data->handle));
+        PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAPv1).offset", (Addr)&data->offset, sizeof(data->offset));
+        PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAPv1).size", (Addr)&data->size, sizeof(data->size));
+        PRE_MEM_WRITE("ioctl(DRM_I915_GEM_MMAPv1).addr_ptr", (Addr)&data->addr_ptr, sizeof(data->addr_ptr));
+      }
+      break;
+   case VKI_DRM_IOCTL_I915_GEM_MMAP:
+      if (ARG3) {
+        struct vki_drm_i915_gem_mmap *data =
+            (struct vki_drm_i915_gem_mmap *)(Addr)ARG3;
+        PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAP).handle", (Addr)&data->handle, sizeof(data->handle));
+        PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAP).offset", (Addr)&data->offset, sizeof(data->offset));
+        PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAP).size", (Addr)&data->size, sizeof(data->size));
+        PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAP).flags", (Addr)&data->size, sizeof(data->flags));
+        PRE_MEM_WRITE("ioctl(DRM_I915_GEM_MMAP).addr_ptr", (Addr)&data->addr_ptr, sizeof(data->addr_ptr));
+      }
+      break;
    case VKI_DRM_IOCTL_I915_GEM_MMAP_GTT:
       if (ARG3) {
          struct vki_drm_i915_gem_mmap_gtt *data =
@@ -10903,6 +10924,34 @@ POST(sys_ioctl)
         POST_MEM_WRITE((Addr)data->data_ptr, data->size);
       }
       break;
+   case VKI_DRM_IOCTL_I915_GEM_MMAPv1:
+      if (ARG3) {
+        struct vki_drm_i915_gem_mmap_v1 *data =
+           (struct vki_drm_i915_gem_mmap_v1 *)(Addr)ARG3;
+        Addr addr = data->addr_ptr;
+        SizeT size = data->size;
+        vg_assert(ML_(valid_client_addr)(addr, size, tid,
+                                         "ioctl(DRM_IOCTL_I915_GEM_MMAPv1)"));
+        ML_(notify_core_and_tool_of_mmap)(addr, size,
+                                          VKI_PROT_READ | VKI_PROT_WRITE,
+                                          VKI_MAP_ANONYMOUS, -1, 0 );
+        POST_MEM_WRITE((Addr)&data->addr_ptr, sizeof(data->addr_ptr));
+      }
+      break;
+   case VKI_DRM_IOCTL_I915_GEM_MMAP:
+      if (ARG3) {
+        struct vki_drm_i915_gem_mmap *data =
+           (struct vki_drm_i915_gem_mmap *)(Addr)ARG3;
+        Addr addr = data->addr_ptr;
+        SizeT size = data->size;
+        vg_assert(ML_(valid_client_addr)(addr, size, tid,
+                                         "ioctl(DRM_IOCTL_I915_GEM_MMAP)"));
+        ML_(notify_core_and_tool_of_mmap)(addr, size,
+                                          VKI_PROT_READ | VKI_PROT_WRITE,
+                                          VKI_MAP_ANONYMOUS, -1, 0 );
+        POST_MEM_WRITE((Addr)&data->addr_ptr, sizeof(data->addr_ptr));
+      }
+      break;
    case VKI_DRM_IOCTL_I915_GEM_MMAP_GTT:
       if (ARG3) {
          struct vki_drm_i915_gem_mmap_gtt *data =
index 6ba909c6ac89161519e00605be0aa1bb49b7633c..ca62044d229816be59feac4695157734cdede08f 100644 (file)
@@ -633,6 +633,7 @@ typedef struct _vki_drm_i915_init {
 #define VKI_DRM_IOCTL_I915_GEM_CREATE              VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_CREATE, struct vki_drm_i915_gem_create)
 #define VKI_DRM_IOCTL_I915_GEM_PREAD               VKI_DRM_IOW (VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_PREAD, struct vki_drm_i915_gem_pread)
 #define VKI_DRM_IOCTL_I915_GEM_PWRITE              VKI_DRM_IOW (VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_PWRITE, struct vki_drm_i915_gem_pwrite)
+#define VKI_DRM_IOCTL_I915_GEM_MMAPv1              VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_MMAP, struct vki_drm_i915_gem_mmap_v1)
 #define VKI_DRM_IOCTL_I915_GEM_MMAP                VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_MMAP, struct vki_drm_i915_gem_mmap)
 #define VKI_DRM_IOCTL_I915_GEM_MMAP_GTT                    VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_MMAP_GTT, struct vki_drm_i915_gem_mmap_gtt)
 #define VKI_DRM_IOCTL_I915_GEM_SET_DOMAIN          VKI_DRM_IOW (VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_SET_DOMAIN, struct vki_drm_i915_gem_set_domain)
@@ -724,12 +725,20 @@ struct vki_drm_i915_gem_pwrite {
        __vki_u64 size;
        __vki_u64 data_ptr;
 };
+struct vki_drm_i915_gem_mmap_v1 {
+       __vki_u32 handle;
+       __vki_u32 pad;
+       __vki_u64 offset;
+       __vki_u64 size;
+       __vki_u64 addr_ptr;
+};
 struct vki_drm_i915_gem_mmap {
        __vki_u32 handle;
        __vki_u32 pad;
        __vki_u64 offset;
        __vki_u64 size;
        __vki_u64 addr_ptr;
+       __vki_u64 flags;
 };
 struct vki_drm_i915_gem_mmap_gtt {
        __vki_u32 handle;