40 lines
1.7 KiB
Diff
40 lines
1.7 KiB
Diff
From: Chris Wilson <chris@chris-wilson.co.uk>
|
|
Date: Fri, 11 Jul 2014 11:28:01 +0100
|
|
Subject: drm/i915: Initialise userptr mmu_notifier serial to 1
|
|
Origin: https://git.kernel.org/linus/6c308fecb4d1f928d52f9586d976f79b37149388
|
|
Bug-Debian: https://bugs.debian.org/765590
|
|
|
|
During the range invalidate, we walk the list of buffers associated with
|
|
the mmu_notifer and find the ones that overlap the range. An
|
|
optimisation is made to speed up the iteration by assuming the previous
|
|
iter is still valid whilst the tree is unmodified. This exposes a bug
|
|
when a range invalidate is triggered after we have just created the
|
|
mmu_notifier, but before attaching any buffers. In that case, we presume
|
|
we have an unmodified list and start walking from the last iter which is
|
|
NULL. Oops.
|
|
|
|
The easiest fix is then to initialise the serial of the tree to 1.
|
|
|
|
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
|
|
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
|
|
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
|
|
Testecase: igt/gem_userptr_blts/stress-mm
|
|
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
|
---
|
|
drivers/gpu/drm/i915/i915_gem_userptr.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c
|
|
index 21ea928..b41614d 100644
|
|
--- a/drivers/gpu/drm/i915/i915_gem_userptr.c
|
|
+++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
|
|
@@ -150,7 +150,7 @@ i915_mmu_notifier_get(struct drm_device *dev, struct mm_struct *mm)
|
|
mmu->mm = mm;
|
|
mmu->objects = RB_ROOT;
|
|
mmu->count = 0;
|
|
- mmu->serial = 0;
|
|
+ mmu->serial = 1;
|
|
|
|
/* Protected by mmap_sem (write-lock) */
|
|
ret = __mmu_notifier_register(&mmu->mn, mm);
|