return end;
}
-static void invalidate_range__linear(struct i915_mmu_notifier *mn,
- struct mm_struct *mm,
- unsigned long start,
- unsigned long end)
+static void *invalidate_range__linear(struct i915_mmu_notifier *mn,
+ struct mm_struct *mm,
+ unsigned long start,
+ unsigned long end)
{
struct i915_mmu_object *mmu;
unsigned long serial;
goto restart;
}
- spin_unlock(&mn->lock);
+ return NULL;
}
static void i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
end--; /* interval ranges are inclusive, but invalidate range is exclusive */
while (next < end) {
- struct drm_i915_gem_object *obj;
+ struct drm_i915_gem_object *obj = NULL;
- obj = NULL;
spin_lock(&mn->lock);
if (mn->has_linear)
- return invalidate_range__linear(mn, mm, start, end);
- if (serial == mn->serial)
+ it = invalidate_range__linear(mn, mm, start, end);
+ else if (serial == mn->serial)
it = interval_tree_iter_next(it, next, end);
else
it = interval_tree_iter_first(&mn->objects, start, end);