mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-22 18:44:44 +08:00
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: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
533df0fecd
commit
dd4916c55a
@ -7285,14 +7285,21 @@ intel_framebuffer_create(struct drm_device *dev,
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
ret = i915_mutex_lock_interruptible(dev);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
ret = intel_framebuffer_init(dev, intel_fb, mode_cmd, obj);
|
||||
if (ret) {
|
||||
drm_gem_object_unreference_unlocked(&obj->base);
|
||||
kfree(intel_fb);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
return &intel_fb->base;
|
||||
err:
|
||||
drm_gem_object_unreference_unlocked(&obj->base);
|
||||
kfree(intel_fb);
|
||||
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
static u32
|
||||
@ -9989,6 +9996,8 @@ int intel_framebuffer_init(struct drm_device *dev,
|
||||
int pitch_limit;
|
||||
int ret;
|
||||
|
||||
WARN_ON(!mutex_is_locked(&dev->struct_mutex));
|
||||
|
||||
if (obj->tiling_mode == I915_TILING_Y) {
|
||||
DRM_DEBUG("hardware does not support tiling Y\n");
|
||||
return -EINVAL;
|
||||
|
Loading…
Reference in New Issue
Block a user