Bug 413119 - ioctl wrapper for DRM_IOCTL_I915_GEM_MMAP.

Patches from Simon Richter <Simon.Richter@hogyros.de>.
This commit is contained in:
Julian Seward 2019-12-30 11:23:32 +01:00
parent 11b7891a8a
commit 57296eee72
2 changed files with 58 additions and 0 deletions

View 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 =

View 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;