]> www.infradead.org Git - linux-platform-drivers-x86.git/commitdiff
drm/i915: Add gem object locking to madvise.
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Tue, 23 Mar 2021 15:49:55 +0000 (16:49 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 24 Mar 2021 10:43:39 +0000 (11:43 +0100)
Doesn't need the full ww lock, only checking if pages are bound.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> #irc
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20210323155059.628690-7-maarten.lankhorst@linux.intel.com
drivers/gpu/drm/i915/i915_gem.c

index 5b762d1adac21347f86f5b33db5060238d5eac62..45a08758ae0f60a321e76ce5fef033688c695148 100644 (file)
@@ -963,10 +963,14 @@ i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
        if (!obj)
                return -ENOENT;
 
-       err = mutex_lock_interruptible(&obj->mm.lock);
+       err = i915_gem_object_lock_interruptible(obj, NULL);
        if (err)
                goto out;
 
+       err = mutex_lock_interruptible(&obj->mm.lock);
+       if (err)
+               goto out_ww;
+
        if (i915_gem_object_has_pages(obj) &&
            i915_gem_object_is_tiled(obj) &&
            i915->quirks & QUIRK_PIN_SWIZZLED_PAGES) {
@@ -1011,6 +1015,8 @@ i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
        args->retained = obj->mm.madv != __I915_MADV_PURGED;
        mutex_unlock(&obj->mm.lock);
 
+out_ww:
+       i915_gem_object_unlock(obj);
 out:
        i915_gem_object_put(obj);
        return err;