Commit dd4916c5 authored by Daniel Vetter's avatar Daniel Vetter

drm/i915: grab dev->struct_mutex around framebuffer_init

We look at gem state (like obj->tiling/obj->stride), we better have
the relevant locks.

Right now this doesn't matter much since most of these checks are
a curtesy to safe buggy userspace, but I'd like to freeze the tiling
once we have framebuffer objects attached. And then locking matters.

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 533df0fe
...@@ -7285,14 +7285,21 @@ intel_framebuffer_create(struct drm_device *dev, ...@@ -7285,14 +7285,21 @@ intel_framebuffer_create(struct drm_device *dev,
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
} }
ret = i915_mutex_lock_interruptible(dev);
if (ret)
goto err;
ret = intel_framebuffer_init(dev, intel_fb, mode_cmd, obj); ret = intel_framebuffer_init(dev, intel_fb, mode_cmd, obj);
if (ret) { mutex_unlock(&dev->struct_mutex);
if (ret)
goto err;
return &intel_fb->base;
err:
drm_gem_object_unreference_unlocked(&obj->base); drm_gem_object_unreference_unlocked(&obj->base);
kfree(intel_fb); kfree(intel_fb);
return ERR_PTR(ret);
}
return &intel_fb->base; return ERR_PTR(ret);
} }
static u32 static u32
...@@ -9989,6 +9996,8 @@ int intel_framebuffer_init(struct drm_device *dev, ...@@ -9989,6 +9996,8 @@ int intel_framebuffer_init(struct drm_device *dev,
int pitch_limit; int pitch_limit;
int ret; int ret;
WARN_ON(!mutex_is_locked(&dev->struct_mutex));
if (obj->tiling_mode == I915_TILING_Y) { if (obj->tiling_mode == I915_TILING_Y) {
DRM_DEBUG("hardware does not support tiling Y\n"); DRM_DEBUG("hardware does not support tiling Y\n");
return -EINVAL; return -EINVAL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment