Lines Matching refs:mm

140 	struct user_event_mm		*mm;  member
208 static struct user_event_mm *user_event_mm_get(struct user_event_mm *mm);
210 static void user_event_mm_put(struct user_event_mm *mm);
410 static int user_event_mm_fault_in(struct user_event_mm *mm, unsigned long uaddr, in user_event_mm_fault_in() argument
423 mmap_read_lock(mm->mm); in user_event_mm_fault_in()
426 if (refcount_read(&mm->tasks) == 0) { in user_event_mm_fault_in()
431 ret = fixup_user_fault(mm->mm, uaddr, FAULT_FLAG_WRITE | FAULT_FLAG_REMOTE, in user_event_mm_fault_in()
434 mmap_read_unlock(mm->mm); in user_event_mm_fault_in()
439 static int user_event_enabler_write(struct user_event_mm *mm,
448 struct user_event_mm *mm = fault->mm; in user_event_enabler_fault_fixup() local
453 ret = user_event_mm_fault_in(mm, uaddr, attempt); in user_event_enabler_fault_fixup()
459 mm->mm, (unsigned long long)uaddr, EVENT_NAME(user)); in user_event_enabler_fault_fixup()
481 mmap_read_lock(mm->mm); in user_event_enabler_fault_fixup()
482 user_event_enabler_write(mm, enabler, true, &attempt); in user_event_enabler_fault_fixup()
483 mmap_read_unlock(mm->mm); in user_event_enabler_fault_fixup()
489 user_event_mm_put(mm); in user_event_enabler_fault_fixup()
493 static bool user_event_enabler_queue_fault(struct user_event_mm *mm, in user_event_enabler_queue_fault() argument
505 fault->mm = user_event_mm_get(mm); in user_event_enabler_queue_fault()
516 user_event_mm_put(mm); in user_event_enabler_queue_fault()
525 static int user_event_enabler_write(struct user_event_mm *mm, in user_event_enabler_write() argument
537 mmap_assert_locked(mm->mm); in user_event_enabler_write()
542 if (refcount_read(&mm->tasks) == 0) in user_event_enabler_write()
551 ret = pin_user_pages_remote(mm->mm, uaddr, 1, FOLL_WRITE | FOLL_NOFAULT, in user_event_enabler_write()
558 if (!user_event_enabler_queue_fault(mm, enabler, *attempt)) in user_event_enabler_write()
579 static bool user_event_enabler_exists(struct user_event_mm *mm, in user_event_enabler_exists() argument
584 list_for_each_entry(enabler, &mm->enablers, mm_enablers_link) { in user_event_enabler_exists()
596 struct user_event_mm *mm; in user_event_enabler_update() local
612 mm = user_event_mm_get_all(user); in user_event_enabler_update()
614 while (mm) { in user_event_enabler_update()
615 next = mm->next; in user_event_enabler_update()
616 mmap_read_lock(mm->mm); in user_event_enabler_update()
618 list_for_each_entry(enabler, &mm->enablers, mm_enablers_link) { in user_event_enabler_update()
621 user_event_enabler_write(mm, enabler, true, &attempt); in user_event_enabler_update()
625 mmap_read_unlock(mm->mm); in user_event_enabler_update()
626 user_event_mm_put(mm); in user_event_enabler_update()
627 mm = next; in user_event_enabler_update()
632 struct user_event_mm *mm) in user_event_enabler_dup() argument
652 list_add(&enabler->mm_enablers_link, &mm->enablers); in user_event_enabler_dup()
657 static struct user_event_mm *user_event_mm_get(struct user_event_mm *mm) in user_event_mm_get() argument
659 refcount_inc(&mm->refcnt); in user_event_mm_get()
661 return mm; in user_event_mm_get()
668 struct user_event_mm *mm; in user_event_mm_get_all() local
690 list_for_each_entry_rcu(mm, &user_event_mms, mms_link) { in user_event_mm_get_all()
691 list_for_each_entry_rcu(enabler, &mm->enablers, mm_enablers_link) { in user_event_mm_get_all()
693 mm->next = found; in user_event_mm_get_all()
694 found = user_event_mm_get(mm); in user_event_mm_get_all()
714 user_mm->mm = t->mm; in user_event_mm_alloc()
727 mmgrab(user_mm->mm); in user_event_mm_alloc()
762 static void user_event_mm_destroy(struct user_event_mm *mm) in user_event_mm_destroy() argument
766 list_for_each_entry_safe(enabler, next, &mm->enablers, mm_enablers_link) in user_event_mm_destroy()
769 mmdrop(mm->mm); in user_event_mm_destroy()
770 kfree(mm); in user_event_mm_destroy()
773 static void user_event_mm_put(struct user_event_mm *mm) in user_event_mm_put() argument
775 if (mm && refcount_dec_and_test(&mm->refcnt)) in user_event_mm_put()
776 user_event_mm_destroy(mm); in user_event_mm_put()
781 struct user_event_mm *mm; in delayed_user_event_mm_put() local
783 mm = container_of(to_rcu_work(work), struct user_event_mm, put_rwork); in delayed_user_event_mm_put()
784 user_event_mm_put(mm); in delayed_user_event_mm_put()
789 struct user_event_mm *mm; in user_event_mm_remove() local
794 mm = t->user_event_mm; in user_event_mm_remove()
798 if (!refcount_dec_and_test(&mm->tasks)) in user_event_mm_remove()
803 list_del_rcu(&mm->mms_link); in user_event_mm_remove()
817 mmap_write_lock(mm->mm); in user_event_mm_remove()
818 mmap_write_unlock(mm->mm); in user_event_mm_remove()
837 INIT_RCU_WORK(&mm->put_rwork, delayed_user_event_mm_put); in user_event_mm_remove()
838 queue_rcu_work(system_wq, &mm->put_rwork); in user_event_mm_remove()
843 struct user_event_mm *mm = user_event_mm_alloc(t); in user_event_mm_dup() local
846 if (!mm) in user_event_mm_dup()
852 if (!user_event_enabler_dup(enabler, mm)) in user_event_mm_dup()
858 user_event_mm_attach(mm, t); in user_event_mm_dup()
862 user_event_mm_destroy(mm); in user_event_mm_dup()
914 mmap_read_lock(user_mm->mm); in user_event_enabler_create()
917 mmap_read_unlock(user_mm->mm); in user_event_enabler_create()
2602 mmap_read_lock(user_mm->mm); in user_event_mm_clear_bit()
2604 mmap_read_unlock(user_mm->mm); in user_event_mm_clear_bit()
2623 struct user_event_mm *mm = current->user_event_mm; in user_events_ioctl_unreg() local
2634 if (!mm) in user_events_ioctl_unreg()
2649 list_for_each_entry_safe(enabler, next, &mm->enablers, mm_enablers_link) { in user_events_ioctl_unreg()
2669 ret = user_event_mm_clear_bit(mm, reg.disable_addr, in user_events_ioctl_unreg()