drm/i915: Never allow userptr into the new mapping types
Commit4f2a572eda
("drm/i915/userptr: Never allow userptr into the mappable GGTT") made I915_GEM_MMAP_GTT IOCTLs to fail when attempted on a userptr object in order to protect from a lockdep splat. Later on, new mapping types were introduced by commitcc662126b4
("drm/i915: Introduce DRM_I915_GEM_MMAP_OFFSET"). Those new mapping types suffer from the same lockdep splat issue but they now succeed when tried on top of a userptr object. Fix it. v2: Don't play with the -ENODEV driver response (Chris) Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com> Cc: Abdiel Janulgue <abdiel.janulgue@linux.intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20200204162302.1299516-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
6311d260a1
commit
f6c26b555e
@ -613,8 +613,7 @@ __assign_mmap_offset(struct drm_file *file,
|
||||
if (!obj)
|
||||
return -ENOENT;
|
||||
|
||||
if (mmap_type == I915_MMAP_TYPE_GTT &&
|
||||
i915_gem_object_never_bind_ggtt(obj)) {
|
||||
if (i915_gem_object_never_mmap(obj)) {
|
||||
err = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
|
@ -194,9 +194,9 @@ i915_gem_object_is_proxy(const struct drm_i915_gem_object *obj)
|
||||
}
|
||||
|
||||
static inline bool
|
||||
i915_gem_object_never_bind_ggtt(const struct drm_i915_gem_object *obj)
|
||||
i915_gem_object_never_mmap(const struct drm_i915_gem_object *obj)
|
||||
{
|
||||
return i915_gem_object_type_has(obj, I915_GEM_OBJECT_NO_GGTT);
|
||||
return i915_gem_object_type_has(obj, I915_GEM_OBJECT_NO_MMAP);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
|
@ -34,7 +34,7 @@ struct drm_i915_gem_object_ops {
|
||||
#define I915_GEM_OBJECT_HAS_IOMEM BIT(1)
|
||||
#define I915_GEM_OBJECT_IS_SHRINKABLE BIT(2)
|
||||
#define I915_GEM_OBJECT_IS_PROXY BIT(3)
|
||||
#define I915_GEM_OBJECT_NO_GGTT BIT(4)
|
||||
#define I915_GEM_OBJECT_NO_MMAP BIT(4)
|
||||
#define I915_GEM_OBJECT_ASYNC_CANCEL BIT(5)
|
||||
|
||||
/* Interface between the GEM object and its backing storage.
|
||||
|
@ -704,7 +704,7 @@ i915_gem_userptr_dmabuf_export(struct drm_i915_gem_object *obj)
|
||||
static const struct drm_i915_gem_object_ops i915_gem_userptr_ops = {
|
||||
.flags = I915_GEM_OBJECT_HAS_STRUCT_PAGE |
|
||||
I915_GEM_OBJECT_IS_SHRINKABLE |
|
||||
I915_GEM_OBJECT_NO_GGTT |
|
||||
I915_GEM_OBJECT_NO_MMAP |
|
||||
I915_GEM_OBJECT_ASYNC_CANCEL,
|
||||
.get_pages = i915_gem_userptr_get_pages,
|
||||
.put_pages = i915_gem_userptr_put_pages,
|
||||
|
@ -941,9 +941,6 @@ i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,
|
||||
struct i915_vma *vma;
|
||||
int ret;
|
||||
|
||||
if (i915_gem_object_never_bind_ggtt(obj))
|
||||
return ERR_PTR(-ENODEV);
|
||||
|
||||
if (flags & PIN_MAPPABLE &&
|
||||
(!view || view->type == I915_GGTT_VIEW_NORMAL)) {
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user