Lines Matching refs:enabler
141 struct user_event_enabler *enabler; member
399 static void user_event_enabler_destroy(struct user_event_enabler *enabler, in user_event_enabler_destroy() argument
402 list_del_rcu(&enabler->mm_enablers_link); in user_event_enabler_destroy()
405 user_event_put(enabler->event, locked); in user_event_enabler_destroy()
407 kfree(enabler); in user_event_enabler_destroy()
440 struct user_event_enabler *enabler,
447 struct user_event_enabler *enabler = fault->enabler; in user_event_enabler_fault_fixup() local
449 unsigned long uaddr = enabler->addr; in user_event_enabler_fault_fixup()
456 struct user_event *user = enabler->event; in user_event_enabler_fault_fixup()
466 if (test_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler))) { in user_event_enabler_fault_fixup()
467 user_event_enabler_destroy(enabler, true); in user_event_enabler_fault_fixup()
478 clear_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler)); in user_event_enabler_fault_fixup()
482 user_event_enabler_write(mm, enabler, true, &attempt); in user_event_enabler_fault_fixup()
494 struct user_event_enabler *enabler, in user_event_enabler_queue_fault() argument
506 fault->enabler = enabler; in user_event_enabler_queue_fault()
510 set_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler)); in user_event_enabler_queue_fault()
514 clear_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler)); in user_event_enabler_queue_fault()
526 struct user_event_enabler *enabler, in user_event_enabler_write() argument
529 unsigned long uaddr = enabler->addr; in user_event_enabler_write()
533 int bit = ENABLE_BIT(enabler); in user_event_enabler_write()
545 if (unlikely(test_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler)) || in user_event_enabler_write()
546 test_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler)))) in user_event_enabler_write()
549 align_addr_bit(&uaddr, &bit, ENABLE_BITOPS(enabler)); in user_event_enabler_write()
558 if (!user_event_enabler_queue_fault(mm, enabler, *attempt)) in user_event_enabler_write()
568 if (enabler->event && enabler->event->status) in user_event_enabler_write()
582 struct user_event_enabler *enabler; in user_event_enabler_exists() local
584 list_for_each_entry(enabler, &mm->enablers, mm_enablers_link) { in user_event_enabler_exists()
585 if (enabler->addr == uaddr && ENABLE_BIT(enabler) == bit) in user_event_enabler_exists()
594 struct user_event_enabler *enabler; in user_event_enabler_update() local
618 list_for_each_entry(enabler, &mm->enablers, mm_enablers_link) { in user_event_enabler_update()
619 if (enabler->event == user) { in user_event_enabler_update()
621 user_event_enabler_write(mm, enabler, true, &attempt); in user_event_enabler_update()
634 struct user_event_enabler *enabler; in user_event_enabler_dup() local
640 enabler = kzalloc_obj(*enabler, GFP_NOWAIT | __GFP_ACCOUNT); in user_event_enabler_dup()
642 if (!enabler) in user_event_enabler_dup()
645 enabler->event = user_event_get(orig->event); in user_event_enabler_dup()
646 enabler->addr = orig->addr; in user_event_enabler_dup()
649 enabler->values = orig->values & ENABLE_VAL_DUP_MASK; in user_event_enabler_dup()
652 list_add(&enabler->mm_enablers_link, &mm->enablers); in user_event_enabler_dup()
667 struct user_event_enabler *enabler; in user_event_mm_get_all() local
691 list_for_each_entry_rcu(enabler, &mm->enablers, mm_enablers_link) { in user_event_mm_get_all()
692 if (enabler->event == user) { in user_event_mm_get_all()
764 struct user_event_enabler *enabler, *next; in user_event_mm_destroy() local
766 list_for_each_entry_safe(enabler, next, &mm->enablers, mm_enablers_link) in user_event_mm_destroy()
767 user_event_enabler_destroy(enabler, false); in user_event_mm_destroy()
844 struct user_event_enabler *enabler; in user_event_mm_dup() local
851 list_for_each_entry_rcu(enabler, &old_mm->enablers, mm_enablers_link) { in user_event_mm_dup()
852 if (!user_event_enabler_dup(enabler, mm)) in user_event_mm_dup()
885 struct user_event_enabler *enabler; in user_event_enabler_create() local
895 enabler = kzalloc_obj(*enabler, GFP_KERNEL_ACCOUNT); in user_event_enabler_create()
897 if (!enabler) in user_event_enabler_create()
900 enabler->event = user; in user_event_enabler_create()
901 enabler->addr = uaddr; in user_event_enabler_create()
902 enabler->values = reg->enable_bit; in user_event_enabler_create()
906 set_bit(ENABLE_VAL_32_ON_64_BIT, ENABLE_BITOPS(enabler)); in user_event_enabler_create()
915 *write_result = user_event_enabler_write(user_mm, enabler, false, in user_event_enabler_create()
929 list_add_rcu(&enabler->mm_enablers_link, &user_mm->enablers); in user_event_enabler_create()
939 kfree(enabler); in user_event_enabler_create()
940 enabler = NULL; in user_event_enabler_create()
945 return enabler; in user_event_enabler_create()
2455 struct user_event_enabler *enabler; in user_events_ioctl_reg() local
2511 enabler = user_event_enabler_create(®, user, &write_result); in user_events_ioctl_reg()
2513 if (!enabler) in user_events_ioctl_reg()
2580 struct user_event_enabler enabler; in user_event_mm_clear_bit() local
2584 memset(&enabler, 0, sizeof(enabler)); in user_event_mm_clear_bit()
2585 enabler.addr = uaddr; in user_event_mm_clear_bit()
2586 enabler.values = bit | flags; in user_event_mm_clear_bit()
2593 result = user_event_enabler_write(user_mm, &enabler, false, &attempt); in user_event_mm_clear_bit()
2614 struct user_event_enabler *enabler, *next; in user_events_ioctl_unreg() local
2639 list_for_each_entry_safe(enabler, next, &mm->enablers, mm_enablers_link) { in user_events_ioctl_unreg()
2640 if (enabler->addr == reg.disable_addr && in user_events_ioctl_unreg()
2641 ENABLE_BIT(enabler) == reg.disable_bit) { in user_events_ioctl_unreg()
2642 set_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler)); in user_events_ioctl_unreg()
2645 flags |= enabler->values & ENABLE_VAL_COMPAT_MASK; in user_events_ioctl_unreg()
2647 if (!test_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler))) in user_events_ioctl_unreg()
2648 user_event_enabler_destroy(enabler, true); in user_events_ioctl_unreg()