Lines Matching refs:enabler

146 	struct user_event_enabler	*enabler;  member
380 static void user_event_enabler_destroy(struct user_event_enabler *enabler, in user_event_enabler_destroy() argument
383 list_del_rcu(&enabler->mm_enablers_link); in user_event_enabler_destroy()
386 user_event_put(enabler->event, locked); in user_event_enabler_destroy()
388 kfree(enabler); in user_event_enabler_destroy()
421 struct user_event_enabler *enabler,
428 struct user_event_enabler *enabler = fault->enabler; in user_event_enabler_fault_fixup() local
430 unsigned long uaddr = enabler->addr; in user_event_enabler_fault_fixup()
437 struct user_event *user = enabler->event; in user_event_enabler_fault_fixup()
447 if (test_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler))) { in user_event_enabler_fault_fixup()
448 user_event_enabler_destroy(enabler, true); in user_event_enabler_fault_fixup()
459 clear_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler)); in user_event_enabler_fault_fixup()
463 user_event_enabler_write(mm, enabler, true, &attempt); in user_event_enabler_fault_fixup()
475 struct user_event_enabler *enabler, in user_event_enabler_queue_fault() argument
487 fault->enabler = enabler; in user_event_enabler_queue_fault()
491 set_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler)); in user_event_enabler_queue_fault()
495 clear_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler)); in user_event_enabler_queue_fault()
507 struct user_event_enabler *enabler, in user_event_enabler_write() argument
510 unsigned long uaddr = enabler->addr; in user_event_enabler_write()
514 int bit = ENABLE_BIT(enabler); in user_event_enabler_write()
526 if (unlikely(test_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler)) || in user_event_enabler_write()
527 test_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler)))) in user_event_enabler_write()
530 align_addr_bit(&uaddr, &bit, ENABLE_BITOPS(enabler)); in user_event_enabler_write()
539 if (!user_event_enabler_queue_fault(mm, enabler, *attempt)) in user_event_enabler_write()
549 if (enabler->event && enabler->event->status) in user_event_enabler_write()
563 struct user_event_enabler *enabler; in user_event_enabler_exists() local
565 list_for_each_entry(enabler, &mm->enablers, mm_enablers_link) { in user_event_enabler_exists()
566 if (enabler->addr == uaddr && ENABLE_BIT(enabler) == bit) in user_event_enabler_exists()
575 struct user_event_enabler *enabler; in user_event_enabler_update() local
599 list_for_each_entry(enabler, &mm->enablers, mm_enablers_link) { in user_event_enabler_update()
600 if (enabler->event == user) { in user_event_enabler_update()
602 user_event_enabler_write(mm, enabler, true, &attempt); in user_event_enabler_update()
615 struct user_event_enabler *enabler; in user_event_enabler_dup() local
621 enabler = kzalloc(sizeof(*enabler), GFP_NOWAIT | __GFP_ACCOUNT); in user_event_enabler_dup()
623 if (!enabler) in user_event_enabler_dup()
626 enabler->event = user_event_get(orig->event); in user_event_enabler_dup()
627 enabler->addr = orig->addr; in user_event_enabler_dup()
630 enabler->values = orig->values & ENABLE_VAL_DUP_MASK; in user_event_enabler_dup()
633 list_add(&enabler->mm_enablers_link, &mm->enablers); in user_event_enabler_dup()
648 struct user_event_enabler *enabler; in user_event_mm_get_all() local
672 list_for_each_entry_rcu(enabler, &mm->enablers, mm_enablers_link) { in user_event_mm_get_all()
673 if (enabler->event == user) { in user_event_mm_get_all()
745 struct user_event_enabler *enabler, *next; in user_event_mm_destroy() local
747 list_for_each_entry_safe(enabler, next, &mm->enablers, mm_enablers_link) in user_event_mm_destroy()
748 user_event_enabler_destroy(enabler, false); in user_event_mm_destroy()
825 struct user_event_enabler *enabler; in user_event_mm_dup() local
832 list_for_each_entry_rcu(enabler, &old_mm->enablers, mm_enablers_link) { in user_event_mm_dup()
833 if (!user_event_enabler_dup(enabler, mm)) in user_event_mm_dup()
866 struct user_event_enabler *enabler; in user_event_enabler_create() local
876 enabler = kzalloc(sizeof(*enabler), GFP_KERNEL_ACCOUNT); in user_event_enabler_create()
878 if (!enabler) in user_event_enabler_create()
881 enabler->event = user; in user_event_enabler_create()
882 enabler->addr = uaddr; in user_event_enabler_create()
883 enabler->values = reg->enable_bit; in user_event_enabler_create()
887 set_bit(ENABLE_VAL_32_ON_64_BIT, ENABLE_BITOPS(enabler)); in user_event_enabler_create()
896 *write_result = user_event_enabler_write(user_mm, enabler, false, in user_event_enabler_create()
910 list_add_rcu(&enabler->mm_enablers_link, &user_mm->enablers); in user_event_enabler_create()
920 kfree(enabler); in user_event_enabler_create()
921 enabler = NULL; in user_event_enabler_create()
926 return enabler; in user_event_enabler_create()
2296 struct user_event_enabler *enabler; in user_events_ioctl_reg() local
2352 enabler = user_event_enabler_create(&reg, user, &write_result); in user_events_ioctl_reg()
2354 if (!enabler) in user_events_ioctl_reg()
2421 struct user_event_enabler enabler; in user_event_mm_clear_bit() local
2425 memset(&enabler, 0, sizeof(enabler)); in user_event_mm_clear_bit()
2426 enabler.addr = uaddr; in user_event_mm_clear_bit()
2427 enabler.values = bit | flags; in user_event_mm_clear_bit()
2434 result = user_event_enabler_write(user_mm, &enabler, false, &attempt); in user_event_mm_clear_bit()
2455 struct user_event_enabler *enabler, *next; in user_events_ioctl_unreg() local
2480 list_for_each_entry_safe(enabler, next, &mm->enablers, mm_enablers_link) { in user_events_ioctl_unreg()
2481 if (enabler->addr == reg.disable_addr && in user_events_ioctl_unreg()
2482 ENABLE_BIT(enabler) == reg.disable_bit) { in user_events_ioctl_unreg()
2483 set_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler)); in user_events_ioctl_unreg()
2486 flags |= enabler->values & ENABLE_VAL_COMPAT_MASK; in user_events_ioctl_unreg()
2488 if (!test_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler))) in user_events_ioctl_unreg()
2489 user_event_enabler_destroy(enabler, true); in user_events_ioctl_unreg()