Lines Matching defs:enabler
146 struct user_event_enabler *enabler;
380 static void user_event_enabler_destroy(struct user_event_enabler *enabler,
383 list_del_rcu(&enabler->mm_enablers_link);
385 /* No longer tracking the event via the enabler */
386 user_event_put(enabler->event, locked);
388 kfree(enabler);
421 struct user_event_enabler *enabler,
428 struct user_event_enabler *enabler = fault->enabler;
430 unsigned long uaddr = enabler->addr;
437 struct user_event *user = enabler->event;
446 /* User asked for enabler to be removed during fault */
447 if (test_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler))) {
448 user_event_enabler_destroy(enabler, true);
459 clear_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler));
463 user_event_enabler_write(mm, enabler, true, &attempt);
475 struct user_event_enabler *enabler,
487 fault->enabler = enabler;
491 set_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler));
495 clear_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler));
507 struct user_event_enabler *enabler,
510 unsigned long uaddr = enabler->addr;
514 int bit = ENABLE_BIT(enabler);
526 if (unlikely(test_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler)) ||
527 test_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler))))
530 align_addr_bit(&uaddr, &bit, ENABLE_BITOPS(enabler));
539 if (!user_event_enabler_queue_fault(mm, enabler, *attempt))
549 if (enabler->event && enabler->event->status)
563 struct user_event_enabler *enabler;
565 list_for_each_entry(enabler, &mm->enablers, mm_enablers_link) {
566 if (enabler->addr == uaddr && ENABLE_BIT(enabler) == bit)
575 struct user_event_enabler *enabler;
584 * enabler for the user_event passed in. This list is only valid
599 list_for_each_entry(enabler, &mm->enablers, mm_enablers_link) {
600 if (enabler->event == user) {
602 user_event_enabler_write(mm, enabler, true, &attempt);
615 struct user_event_enabler *enabler;
621 enabler = kzalloc(sizeof(*enabler), GFP_NOWAIT | __GFP_ACCOUNT);
623 if (!enabler)
626 enabler->event = user_event_get(orig->event);
627 enabler->addr = orig->addr;
630 enabler->values = orig->values & ENABLE_VAL_DUP_MASK;
633 list_add(&enabler->mm_enablers_link, &mm->enablers);
648 struct user_event_enabler *enabler;
662 * user_events ABI for 1 or more events. Each enabler found in each
672 list_for_each_entry_rcu(enabler, &mm->enablers, mm_enablers_link) {
673 if (enabler->event == user) {
745 struct user_event_enabler *enabler, *next;
747 list_for_each_entry_safe(enabler, next, &mm->enablers, mm_enablers_link)
748 user_event_enabler_destroy(enabler, false);
825 struct user_event_enabler *enabler;
832 list_for_each_entry_rcu(enabler, &old_mm->enablers, mm_enablers_link) {
833 if (!user_event_enabler_dup(enabler, mm))
866 struct user_event_enabler *enabler;
876 enabler = kzalloc(sizeof(*enabler), GFP_KERNEL_ACCOUNT);
878 if (!enabler)
881 enabler->event = user;
882 enabler->addr = uaddr;
883 enabler->values = reg->enable_bit;
887 set_bit(ENABLE_VAL_32_ON_64_BIT, ENABLE_BITOPS(enabler));
896 *write_result = user_event_enabler_write(user_mm, enabler, false,
901 * If the write works, then we will track the enabler. A ref to the
902 * underlying user_event is held by the enabler to prevent it going
903 * away while the enabler is still in use by a process. The ref is
904 * removed when the enabler is destroyed. This means a event cannot
910 list_add_rcu(&enabler->mm_enablers_link, &user_mm->enablers);
920 kfree(enabler);
921 enabler = NULL;
926 return enabler;
2296 struct user_event_enabler *enabler;
2347 * Attempt to create an enabler, which too has a lifetime tied in the
2348 * same way for the event. Once the task that caused the enabler to be
2352 enabler = user_event_enabler_create(®, user, &write_result);
2354 if (!enabler)
2421 struct user_event_enabler enabler;
2425 memset(&enabler, 0, sizeof(enabler));
2426 enabler.addr = uaddr;
2427 enabler.values = bit | flags;
2434 result = user_event_enabler_write(user_mm, &enabler, false, &attempt);
2455 struct user_event_enabler *enabler, *next;
2472 * Flags freeing and faulting are used to indicate if the enabler is in
2474 * During async fault if freeing is set, the enabler will be destroyed.
2480 list_for_each_entry_safe(enabler, next, &mm->enablers, mm_enablers_link) {
2481 if (enabler->addr == reg.disable_addr &&
2482 ENABLE_BIT(enabler) == reg.disable_bit) {
2483 set_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler));
2486 flags |= enabler->values & ENABLE_VAL_COMPAT_MASK;
2488 if (!test_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler)))
2489 user_event_enabler_destroy(enabler, true);