소스 검색

drm/i915: Remove pinned check from madvise ioctl

We don't need to incur the overhead of checking whether the object is
pinned prior to changing its madvise. If the object is pinned, the
madvise will not take effect until it is unpinned and so we cannot free
the pages being pointed at by hardware. Marking a pinned object with
allocated pages as DONTNEED will not trigger any undue warnings. The check
is therefore superfluous, and by removing it we can remove a linear walk
over all the vma the object has.

Still despite it being an overzealous check, that error code is part of
the current ABI and so we must proceed with caution.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1470388464-28458-15-git-send-email-chris@chris-wilson.co.uk
Chris Wilson 9 년 전
부모
커밋
e883d73503
1개의 변경된 파일0개의 추가작업 그리고 6개의 파일을 삭제
  1. 0 6
      drivers/gpu/drm/i915/i915_gem.c

+ 0 - 6
drivers/gpu/drm/i915/i915_gem.c

@@ -3883,11 +3883,6 @@ i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
 		goto unlock;
 		goto unlock;
 	}
 	}
 
 
-	if (i915_gem_obj_is_pinned(obj)) {
-		ret = -EINVAL;
-		goto out;
-	}
-
 	if (obj->pages &&
 	if (obj->pages &&
 	    obj->tiling_mode != I915_TILING_NONE &&
 	    obj->tiling_mode != I915_TILING_NONE &&
 	    dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES) {
 	    dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES) {
@@ -3906,7 +3901,6 @@ i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
 
 
 	args->retained = obj->madv != __I915_MADV_PURGED;
 	args->retained = obj->madv != __I915_MADV_PURGED;
 
 
-out:
 	i915_gem_object_put(obj);
 	i915_gem_object_put(obj);
 unlock:
 unlock:
 	mutex_unlock(&dev->struct_mutex);
 	mutex_unlock(&dev->struct_mutex);