Lines Matching refs:mn
38 struct i915_mmu_notifier *mn; member
50 struct mmu_notifier mn; member
57 struct i915_mmu_notifier *mn; member
122 struct i915_mmu_notifier *mn = in i915_gem_userptr_mn_invalidate_range_start() local
123 container_of(_mn, struct i915_mmu_notifier, mn); in i915_gem_userptr_mn_invalidate_range_start()
129 spin_lock(&mn->lock); in i915_gem_userptr_mn_invalidate_range_start()
130 if (mn->has_linear) { in i915_gem_userptr_mn_invalidate_range_start()
131 list_for_each_entry(mo, &mn->linear, link) { in i915_gem_userptr_mn_invalidate_range_start()
140 it = interval_tree_iter_first(&mn->objects, start, end); in i915_gem_userptr_mn_invalidate_range_start()
147 spin_unlock(&mn->lock); in i915_gem_userptr_mn_invalidate_range_start()
157 struct i915_mmu_notifier *mn; in i915_mmu_notifier_create() local
160 mn = kmalloc(sizeof(*mn), GFP_KERNEL); in i915_mmu_notifier_create()
161 if (mn == NULL) in i915_mmu_notifier_create()
164 spin_lock_init(&mn->lock); in i915_mmu_notifier_create()
165 mn->mn.ops = &i915_gem_userptr_notifier; in i915_mmu_notifier_create()
166 mn->objects = RB_ROOT; in i915_mmu_notifier_create()
167 INIT_LIST_HEAD(&mn->linear); in i915_mmu_notifier_create()
168 mn->has_linear = false; in i915_mmu_notifier_create()
171 ret = __mmu_notifier_register(&mn->mn, mm); in i915_mmu_notifier_create()
173 kfree(mn); in i915_mmu_notifier_create()
177 return mn; in i915_mmu_notifier_create()
182 struct i915_mmu_notifier *mn, in i915_mmu_notifier_add() argument
201 spin_lock(&mn->lock); in i915_mmu_notifier_add()
202 it = interval_tree_iter_first(&mn->objects, in i915_mmu_notifier_add()
220 mn->has_linear = mo->is_linear = true; in i915_mmu_notifier_add()
224 interval_tree_insert(&mo->it, &mn->objects); in i915_mmu_notifier_add()
227 list_add(&mo->link, &mn->linear); in i915_mmu_notifier_add()
229 spin_unlock(&mn->lock); in i915_mmu_notifier_add()
235 static bool i915_mmu_notifier_has_linear(struct i915_mmu_notifier *mn) in i915_mmu_notifier_has_linear() argument
239 list_for_each_entry(mo, &mn->linear, link) in i915_mmu_notifier_has_linear()
247 i915_mmu_notifier_del(struct i915_mmu_notifier *mn, in i915_mmu_notifier_del() argument
250 spin_lock(&mn->lock); in i915_mmu_notifier_del()
253 mn->has_linear = i915_mmu_notifier_has_linear(mn); in i915_mmu_notifier_del()
255 interval_tree_remove(&mo->it, &mn->objects); in i915_mmu_notifier_del()
256 spin_unlock(&mn->lock); in i915_mmu_notifier_del()
268 i915_mmu_notifier_del(mo->mn, mo); in i915_gem_userptr_release__mmu_notifier()
277 struct i915_mmu_notifier *mn = mm->mn; in i915_mmu_notifier_find() local
279 mn = mm->mn; in i915_mmu_notifier_find()
280 if (mn) in i915_mmu_notifier_find()
281 return mn; in i915_mmu_notifier_find()
285 if ((mn = mm->mn) == NULL) { in i915_mmu_notifier_find()
286 mn = i915_mmu_notifier_create(mm->mm); in i915_mmu_notifier_find()
287 if (!IS_ERR(mn)) in i915_mmu_notifier_find()
288 mm->mn = mn; in i915_mmu_notifier_find()
293 return mn; in i915_mmu_notifier_find()
300 struct i915_mmu_notifier *mn; in i915_gem_userptr_init__mmu_notifier() local
310 mn = i915_mmu_notifier_find(obj->userptr.mm); in i915_gem_userptr_init__mmu_notifier()
311 if (IS_ERR(mn)) in i915_gem_userptr_init__mmu_notifier()
312 return PTR_ERR(mn); in i915_gem_userptr_init__mmu_notifier()
318 mo->mn = mn; in i915_gem_userptr_init__mmu_notifier()
324 ret = i915_mmu_notifier_add(obj->base.dev, mn, mo); in i915_gem_userptr_init__mmu_notifier()
335 i915_mmu_notifier_free(struct i915_mmu_notifier *mn, in i915_mmu_notifier_free() argument
338 if (mn == NULL) in i915_mmu_notifier_free()
341 mmu_notifier_unregister(&mn->mn, mm); in i915_mmu_notifier_free()
342 kfree(mn); in i915_mmu_notifier_free()
366 i915_mmu_notifier_free(struct i915_mmu_notifier *mn, in i915_mmu_notifier_free() argument
418 mm->mn = NULL; in i915_gem_userptr_init__mm_struct()
436 i915_mmu_notifier_free(mm->mn, mm->mm); in __i915_mm_struct_free__worker()
551 spin_lock(&obj->userptr.mmu_object->mn->lock); in __i915_gem_userptr_set_active()
559 spin_unlock(&obj->userptr.mmu_object->mn->lock); in __i915_gem_userptr_set_active()