Lines Matching refs:mm
37 struct mm_struct *mm; member
72 mutex_lock(&obj->mm.lock); in cancel_userptr()
74 mutex_unlock(&obj->mm.lock); in cancel_userptr()
88 atomic_read(&obj->mm.pages_pin_count), in cancel_userptr()
116 struct mm_struct *mm, in i915_gem_userptr_mn_invalidate_range_start() argument
171 i915_mmu_notifier_create(struct mm_struct *mm) in i915_mmu_notifier_create() argument
211 i915_mmu_notifier_find(struct i915_mm_struct *mm) in i915_mmu_notifier_find() argument
216 mn = mm->mn; in i915_mmu_notifier_find()
220 mn = i915_mmu_notifier_create(mm->mm); in i915_mmu_notifier_find()
224 down_write(&mm->mm->mmap_sem); in i915_mmu_notifier_find()
225 mutex_lock(&mm->i915->mm_lock); in i915_mmu_notifier_find()
226 if (mm->mn == NULL && !err) { in i915_mmu_notifier_find()
228 err = __mmu_notifier_register(&mn->mn, mm->mm); in i915_mmu_notifier_find()
231 mm->mn = fetch_and_zero(&mn); in i915_mmu_notifier_find()
233 } else if (mm->mn) { in i915_mmu_notifier_find()
240 mutex_unlock(&mm->i915->mm_lock); in i915_mmu_notifier_find()
241 up_write(&mm->mm->mmap_sem); in i915_mmu_notifier_find()
248 return err ? ERR_PTR(err) : mm->mn; in i915_mmu_notifier_find()
261 if (WARN_ON(obj->userptr.mm == NULL)) in i915_gem_userptr_init__mmu_notifier()
264 mn = i915_mmu_notifier_find(obj->userptr.mm); in i915_gem_userptr_init__mmu_notifier()
284 struct mm_struct *mm) in i915_mmu_notifier_free() argument
289 mmu_notifier_unregister(&mn->mn, mm); in i915_mmu_notifier_free()
316 struct mm_struct *mm) in i915_mmu_notifier_free() argument
325 struct i915_mm_struct *mm; in __i915_mm_struct_find() local
328 hash_for_each_possible(dev_priv->mm_structs, mm, node, (unsigned long)real) in __i915_mm_struct_find()
329 if (mm->mm == real) in __i915_mm_struct_find()
330 return mm; in __i915_mm_struct_find()
339 struct i915_mm_struct *mm; in i915_gem_userptr_init__mm_struct() local
353 mm = __i915_mm_struct_find(dev_priv, current->mm); in i915_gem_userptr_init__mm_struct()
354 if (mm == NULL) { in i915_gem_userptr_init__mm_struct()
355 mm = kmalloc(sizeof(*mm), GFP_KERNEL); in i915_gem_userptr_init__mm_struct()
356 if (mm == NULL) { in i915_gem_userptr_init__mm_struct()
361 kref_init(&mm->kref); in i915_gem_userptr_init__mm_struct()
362 mm->i915 = to_i915(obj->base.dev); in i915_gem_userptr_init__mm_struct()
364 mm->mm = current->mm; in i915_gem_userptr_init__mm_struct()
365 mmgrab(current->mm); in i915_gem_userptr_init__mm_struct()
367 mm->mn = NULL; in i915_gem_userptr_init__mm_struct()
371 &mm->node, (unsigned long)mm->mm); in i915_gem_userptr_init__mm_struct()
373 kref_get(&mm->kref); in i915_gem_userptr_init__mm_struct()
375 obj->userptr.mm = mm; in i915_gem_userptr_init__mm_struct()
384 struct i915_mm_struct *mm = container_of(work, typeof(*mm), work); in __i915_mm_struct_free__worker() local
385 i915_mmu_notifier_free(mm->mn, mm->mm); in __i915_mm_struct_free__worker()
386 mmdrop(mm->mm); in __i915_mm_struct_free__worker()
387 kfree(mm); in __i915_mm_struct_free__worker()
393 struct i915_mm_struct *mm = container_of(kref, typeof(*mm), kref); in __i915_mm_struct_free() local
396 hash_del(&mm->node); in __i915_mm_struct_free()
397 mutex_unlock(&mm->i915->mm_lock); in __i915_mm_struct_free()
399 INIT_WORK(&mm->work, __i915_mm_struct_free__worker); in __i915_mm_struct_free()
400 queue_work(mm->i915->mm.userptr_wq, &mm->work); in __i915_mm_struct_free()
406 if (obj->userptr.mm == NULL) in i915_gem_userptr_release__mm_struct()
409 kref_put_mutex(&obj->userptr.mm->kref, in i915_gem_userptr_release__mm_struct()
412 obj->userptr.mm = NULL; in i915_gem_userptr_release__mm_struct()
514 struct mm_struct *mm = obj->userptr.mm->mm; in __i915_gem_userptr_get_pages_worker() local
521 if (mmget_not_zero(mm)) { in __i915_gem_userptr_get_pages_worker()
522 down_read(&mm->mmap_sem); in __i915_gem_userptr_get_pages_worker()
525 (work->task, mm, in __i915_gem_userptr_get_pages_worker()
535 up_read(&mm->mmap_sem); in __i915_gem_userptr_get_pages_worker()
536 mmput(mm); in __i915_gem_userptr_get_pages_worker()
540 mutex_lock(&obj->mm.lock); in __i915_gem_userptr_get_pages_worker()
557 mutex_unlock(&obj->mm.lock); in __i915_gem_userptr_get_pages_worker()
603 queue_work(to_i915(obj->base.dev)->mm.userptr_wq, &work->work); in __i915_gem_userptr_get_pages_schedule()
611 struct mm_struct *mm = obj->userptr.mm->mm; in i915_gem_userptr_get_pages() local
645 if (mm == current->mm) { in i915_gem_userptr_get_pages()
688 if (obj->mm.madv != I915_MADV_WILLNEED) in i915_gem_userptr_put_pages()
689 obj->mm.dirty = false; in i915_gem_userptr_put_pages()
694 if (obj->mm.dirty) in i915_gem_userptr_put_pages()
700 obj->mm.dirty = false; in i915_gem_userptr_put_pages()
848 dev_priv->mm.userptr_wq = in i915_gem_init_userptr()
852 if (!dev_priv->mm.userptr_wq) in i915_gem_init_userptr()
860 destroy_workqueue(dev_priv->mm.userptr_wq); in i915_gem_cleanup_userptr()