Lines Matching refs:mo
68 struct i915_mmu_object *mo = container_of(work, typeof(*mo), work); in __cancel_userptr__worker() local
69 struct drm_i915_gem_object *obj = mo->obj; in __cancel_userptr__worker()
97 static unsigned long cancel_userptr(struct i915_mmu_object *mo) in cancel_userptr() argument
99 unsigned long end = mo->obj->userptr.ptr + mo->obj->base.size; in cancel_userptr()
108 if (mo->active && kref_get_unless_zero(&mo->obj->base.refcount)) { in cancel_userptr()
109 schedule_work(&mo->work); in cancel_userptr()
111 mo->active = false; in cancel_userptr()
124 struct i915_mmu_object *mo; in i915_gem_userptr_mn_invalidate_range_start() local
131 list_for_each_entry(mo, &mn->linear, link) { in i915_gem_userptr_mn_invalidate_range_start()
132 if (mo->it.last < start || mo->it.start > end) in i915_gem_userptr_mn_invalidate_range_start()
135 cancel_userptr(mo); in i915_gem_userptr_mn_invalidate_range_start()
142 mo = container_of(it, struct i915_mmu_object, it); in i915_gem_userptr_mn_invalidate_range_start()
143 start = cancel_userptr(mo); in i915_gem_userptr_mn_invalidate_range_start()
183 struct i915_mmu_object *mo) in i915_mmu_notifier_add() argument
203 mo->it.start, mo->it.last); 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()
237 struct i915_mmu_object *mo; in i915_mmu_notifier_has_linear() local
239 list_for_each_entry(mo, &mn->linear, link) in i915_mmu_notifier_has_linear()
240 if (mo->is_linear) in i915_mmu_notifier_has_linear()
248 struct i915_mmu_object *mo) in i915_mmu_notifier_del() argument
251 list_del(&mo->link); in i915_mmu_notifier_del()
252 if (mo->is_linear) in i915_mmu_notifier_del()
255 interval_tree_remove(&mo->it, &mn->objects); in i915_mmu_notifier_del()
262 struct i915_mmu_object *mo; in i915_gem_userptr_release__mmu_notifier() local
264 mo = obj->userptr.mmu_object; in i915_gem_userptr_release__mmu_notifier()
265 if (mo == NULL) in i915_gem_userptr_release__mmu_notifier()
268 i915_mmu_notifier_del(mo->mn, mo); in i915_gem_userptr_release__mmu_notifier()
269 kfree(mo); in i915_gem_userptr_release__mmu_notifier()
301 struct i915_mmu_object *mo; in i915_gem_userptr_init__mmu_notifier() local
314 mo = kzalloc(sizeof(*mo), GFP_KERNEL); in i915_gem_userptr_init__mmu_notifier()
315 if (mo == NULL) in i915_gem_userptr_init__mmu_notifier()
318 mo->mn = mn; in i915_gem_userptr_init__mmu_notifier()
319 mo->it.start = obj->userptr.ptr; in i915_gem_userptr_init__mmu_notifier()
320 mo->it.last = mo->it.start + obj->base.size - 1; in i915_gem_userptr_init__mmu_notifier()
321 mo->obj = obj; in i915_gem_userptr_init__mmu_notifier()
322 INIT_WORK(&mo->work, __cancel_userptr__worker); 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()
326 kfree(mo); in i915_gem_userptr_init__mmu_notifier()
330 obj->userptr.mmu_object = mo; in i915_gem_userptr_init__mmu_notifier()