diff options
author | Tvrtko Ursulin <tvrtko.ursulin@intel.com> | 2017-10-31 06:23:25 -0400 |
---|---|---|
committer | Rodrigo Vivi <rodrigo.vivi@intel.com> | 2017-11-08 13:19:45 -0500 |
commit | 40a4884512d5bf9ed3a9cb162b8a7ec3306b6cfc (patch) | |
tree | da0b4156263cba25b94ee051ccace5df4e9eedb5 | |
parent | 39dae59d66acd86d1de24294bd2f343fd5e7a625 (diff) |
drm/i915: Reject unknown syncobj flags
We have to reject unknown flags for uAPI considerations, and also
because the curent implementation limits their i915 storage space
to two bits.
v2: (Chris Wilson)
* Fix fail in ABI check.
* Added unknown flags and BUILD_BUG_ON.
v3:
* Use ARCH_KMALLOC_MINALIGN instead of alignof. (Chris Wilson)
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Fixes: cf6e7bac6357 ("drm/i915: Add support for drm syncobjs")
Cc: Jason Ekstrand <jason@jlekstrand.net>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: David Airlie <airlied@linux.ie>
Cc: intel-gfx@lists.freedesktop.org
Cc: dri-devel@lists.freedesktop.org
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20171031102326.9738-1-tvrtko.ursulin@linux.intel.com
(cherry picked from commit ebcaa1ff8b59097805d548fe7a676f194625c033)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_execbuffer.c | 8 | ||||
-rw-r--r-- | include/uapi/drm/i915_drm.h | 1 |
2 files changed, 9 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index 4ac454ae54d7..83876a1c8d98 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c | |||
@@ -2094,6 +2094,11 @@ get_fence_array(struct drm_i915_gem_execbuffer2 *args, | |||
2094 | goto err; | 2094 | goto err; |
2095 | } | 2095 | } |
2096 | 2096 | ||
2097 | if (fence.flags & __I915_EXEC_FENCE_UNKNOWN_FLAGS) { | ||
2098 | err = -EINVAL; | ||
2099 | goto err; | ||
2100 | } | ||
2101 | |||
2097 | syncobj = drm_syncobj_find(file, fence.handle); | 2102 | syncobj = drm_syncobj_find(file, fence.handle); |
2098 | if (!syncobj) { | 2103 | if (!syncobj) { |
2099 | DRM_DEBUG("Invalid syncobj handle provided\n"); | 2104 | DRM_DEBUG("Invalid syncobj handle provided\n"); |
@@ -2101,6 +2106,9 @@ get_fence_array(struct drm_i915_gem_execbuffer2 *args, | |||
2101 | goto err; | 2106 | goto err; |
2102 | } | 2107 | } |
2103 | 2108 | ||
2109 | BUILD_BUG_ON(~(ARCH_KMALLOC_MINALIGN - 1) & | ||
2110 | ~__I915_EXEC_FENCE_UNKNOWN_FLAGS); | ||
2111 | |||
2104 | fences[n] = ptr_pack_bits(syncobj, fence.flags, 2); | 2112 | fences[n] = ptr_pack_bits(syncobj, fence.flags, 2); |
2105 | } | 2113 | } |
2106 | 2114 | ||
diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h index 6598fb76d2c2..9816590d3ad2 100644 --- a/include/uapi/drm/i915_drm.h +++ b/include/uapi/drm/i915_drm.h | |||
@@ -829,6 +829,7 @@ struct drm_i915_gem_exec_fence { | |||
829 | 829 | ||
830 | #define I915_EXEC_FENCE_WAIT (1<<0) | 830 | #define I915_EXEC_FENCE_WAIT (1<<0) |
831 | #define I915_EXEC_FENCE_SIGNAL (1<<1) | 831 | #define I915_EXEC_FENCE_SIGNAL (1<<1) |
832 | #define __I915_EXEC_FENCE_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SIGNAL << 1)) | ||
832 | __u32 flags; | 833 | __u32 flags; |
833 | }; | 834 | }; |
834 | 835 | ||