| /linux-6.15/kernel/locking/ |
| H A D | mutex-debug.c | 31 memset(waiter, MUTEX_DEBUG_INIT, sizeof(*waiter)); in debug_mutex_lock_common() 32 waiter->magic = waiter; in debug_mutex_lock_common() 33 INIT_LIST_HEAD(&waiter->list); in debug_mutex_lock_common() 34 waiter->ww_ctx = MUTEX_POISON_WW_CTX; in debug_mutex_lock_common() 41 DEBUG_LOCKS_WARN_ON(waiter->magic != waiter); in debug_mutex_wake_waiter() 42 DEBUG_LOCKS_WARN_ON(list_empty(&waiter->list)); in debug_mutex_wake_waiter() 48 memset(waiter, MUTEX_DEBUG_FREE, sizeof(*waiter)); in debug_mutex_free_waiter() 57 task->blocked_on = waiter; in debug_mutex_add_waiter() 64 DEBUG_LOCKS_WARN_ON(waiter->task != task); in debug_mutex_remove_waiter() 68 INIT_LIST_HEAD(&waiter->list); in debug_mutex_remove_waiter() [all …]
|
| H A D | rtmutex.c | 382 waiter->pi_tree.prio = waiter->tree.prio; in waiter_clone_prio() 383 waiter->pi_tree.deadline = waiter->tree.deadline; in waiter_clone_prio() 596 return waiter != NULL; in rt_mutex_cond_detect_deadlock() 748 if (!waiter) in rt_mutex_adjust_prio_chain() 835 lock = waiter->lock; in rt_mutex_adjust_prio_chain() 1122 if (waiter) { in try_to_take_rt_mutex() 1129 if (waiter == top_waiter || rt_mutex_steal(waiter, top_waiter)) { in try_to_take_rt_mutex() 1233 waiter->task = task; in task_blocks_on_rt_mutex() 1234 waiter->lock = lock; in task_blocks_on_rt_mutex() 1758 waiter.ww_ctx = ww_ctx; in __rt_mutex_slowlock_locked() [all …]
|
| H A D | rtmutex_common.h | 85 struct rt_mutex_waiter *waiter, 89 struct rt_mutex_waiter *waiter, 95 struct rt_mutex_waiter *waiter); 122 struct rt_mutex_waiter *waiter) in rt_mutex_waiter_is_top_waiter() argument 203 memset(waiter, 0x11, sizeof(*waiter)); in debug_rt_mutex_init_waiter() 209 memset(waiter, 0x22, sizeof(*waiter)); in debug_rt_mutex_free_waiter() 214 debug_rt_mutex_init_waiter(waiter); in rt_mutex_init_waiter() 216 RB_CLEAR_NODE(&waiter->tree.entry); in rt_mutex_init_waiter() 217 waiter->wake_state = TASK_NORMAL; in rt_mutex_init_waiter() 218 waiter->task = NULL; in rt_mutex_init_waiter() [all …]
|
| H A D | mutex.h | 52 struct mutex_waiter *waiter); 54 struct mutex_waiter *waiter); 55 extern void debug_mutex_free_waiter(struct mutex_waiter *waiter); 57 struct mutex_waiter *waiter, 59 extern void debug_mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter, 65 # define debug_mutex_lock_common(lock, waiter) do { } while (0) argument 66 # define debug_mutex_wake_waiter(lock, waiter) do { } while (0) argument 67 # define debug_mutex_free_waiter(waiter) do { } while (0) argument 68 # define debug_mutex_add_waiter(lock, waiter, ti) do { } while (0) argument 69 # define debug_mutex_remove_waiter(lock, waiter, ti) do { } while (0) argument
|
| H A D | mutex.c | 206 list_del(&waiter->list); in __mutex_remove_waiter() 296 struct mutex_waiter *waiter) in ww_mutex_spin_on_owner() argument 330 if (waiter && !__mutex_waiter_is_first(lock, waiter)) in ww_mutex_spin_on_owner() 435 if (!waiter) { in mutex_optimistic_spin() 479 if (!waiter) in mutex_optimistic_spin() 486 if (!waiter) in mutex_optimistic_spin() 570 struct mutex_waiter waiter; in __mutex_lock_common() local 627 waiter.task = current; in __mutex_lock_common() 629 waiter.ww_ctx = ww_ctx; in __mutex_lock_common() 936 struct mutex_waiter *waiter = in __mutex_unlock_slowpath() local [all …]
|
| H A D | rwsem.c | 387 list_del(&waiter->list); in rwsem_del_waiter() 480 owner = waiter->task; in rwsem_mark_wake() 550 tsk = waiter->task; in rwsem_mark_wake() 661 list_del(&waiter->list); in rwsem_try_write_lock() 998 struct rwsem_waiter waiter; in rwsem_down_read_slowpath() local 1033 waiter.task = current; in rwsem_down_read_slowpath() 1036 waiter.handoff_set = false; in rwsem_down_read_slowpath() 1078 if (waiter.task) in rwsem_down_read_slowpath() 1107 struct rwsem_waiter waiter; in rwsem_down_write_slowpath() local 1120 waiter.task = current; in rwsem_down_write_slowpath() [all …]
|
| H A D | semaphore.c | 216 struct semaphore_waiter waiter; in ___down_common() local 218 list_add_tail(&waiter.list, &sem->wait_list); in ___down_common() 219 waiter.task = current; in ___down_common() 220 waiter.up = false; in ___down_common() 231 if (waiter.up) in ___down_common() 236 list_del(&waiter.list); in ___down_common() 240 list_del(&waiter.list); in ___down_common() 279 struct semaphore_waiter *waiter = list_first_entry(&sem->wait_list, in __up() local 281 list_del(&waiter->list); in __up() 282 waiter->up = true; in __up() [all …]
|
| H A D | rtmutex_api.c | 294 struct rt_mutex_waiter *waiter, in __rt_mutex_start_proxy_lock() argument 342 struct rt_mutex_waiter *waiter, in rt_mutex_start_proxy_lock() argument 351 remove_waiter(lock, waiter); in rt_mutex_start_proxy_lock() 379 struct rt_mutex_waiter *waiter) in rt_mutex_wait_proxy_lock() argument 418 struct rt_mutex_waiter *waiter) in rt_mutex_cleanup_proxy_lock() argument 434 try_to_take_rt_mutex(lock, current, waiter); in rt_mutex_cleanup_proxy_lock() 440 remove_waiter(lock, waiter); in rt_mutex_cleanup_proxy_lock() 461 struct rt_mutex_waiter *waiter; in rt_mutex_adjust_pi() local 467 waiter = task->pi_blocked_on; in rt_mutex_adjust_pi() 468 if (!waiter || rt_waiter_node_equal(&waiter->tree, task_to_waiter_node(task))) { in rt_mutex_adjust_pi() [all …]
|
| H A D | ww_mutex.h | 53 __ww_waiter_add(struct mutex *lock, struct mutex_waiter *waiter, struct mutex_waiter *pos) in __ww_waiter_add() argument 58 __mutex_add_waiter(lock, waiter, p); in __ww_waiter_add() 277 __ww_mutex_die(struct MUTEX *lock, struct MUTEX_WAITER *waiter, in __ww_mutex_die() argument 283 if (waiter->ww_ctx->acquired > 0 && __ww_ctx_less(waiter->ww_ctx, ww_ctx)) { in __ww_mutex_die() 285 debug_mutex_wake_waiter(lock, waiter); in __ww_mutex_die() 287 wake_q_add(wake_q, waiter->task); in __ww_mutex_die() 449 __ww_mutex_check_kill(struct MUTEX *lock, struct MUTEX_WAITER *waiter, in __ww_mutex_check_kill() argument 473 for (cur = __ww_waiter_prev(lock, waiter); cur; in __ww_mutex_check_kill() 497 __ww_mutex_add_waiter(struct MUTEX_WAITER *waiter, in __ww_mutex_add_waiter() argument 506 __ww_waiter_add(lock, waiter, NULL); in __ww_mutex_add_waiter() [all …]
|
| /linux-6.15/drivers/md/dm-vdo/ |
| H A D | admin-state.c | 203 if (state->waiter != NULL) in vdo_finish_operation() 208 if (state->waiter != NULL) in vdo_finish_operation() 224 struct vdo_completion *waiter, in begin_operation() argument 235 } else if (state->waiter != NULL) { in begin_operation() 240 state->waiter = waiter; in begin_operation() 254 if (waiter != NULL) in begin_operation() 269 struct vdo_completion *waiter, in start_operation() argument 296 if (waiter != NULL) in check_code() 332 vdo_launch_completion(waiter); in vdo_start_draining() 425 "resume operation", waiter); in assert_vdo_resume_operation() [all …]
|
| H A D | wait-queue.c | 23 BUG_ON(waiter->next_waiter != NULL); in vdo_waitq_enqueue_waiter() 30 waiter->next_waiter = waiter; in vdo_waitq_enqueue_waiter() 33 waiter->next_waiter = waitq->last_waiter->next_waiter; in vdo_waitq_enqueue_waiter() 34 waitq->last_waiter->next_waiter = waiter; in vdo_waitq_enqueue_waiter() 38 waitq->last_waiter = waiter; in vdo_waitq_enqueue_waiter() 140 vdo_waitq_enqueue_waiter((waiter_match(waiter, match_context) ? in vdo_waitq_dequeue_matching_waiters() 141 matched_waitq : waitq), waiter); in vdo_waitq_dequeue_matching_waiters() 195 struct vdo_waiter *waiter = vdo_waitq_dequeue_waiter(waitq); in vdo_waitq_notify_next_waiter() local 197 if (waiter == NULL) in vdo_waitq_notify_next_waiter() 201 callback = waiter->callback; in vdo_waitq_notify_next_waiter() [all …]
|
| H A D | wait-queue.h | 51 typedef void (*vdo_waiter_callback_fn)(struct vdo_waiter *waiter, void *context); 58 typedef bool (*vdo_waiter_match_fn)(struct vdo_waiter *waiter, void *context); 78 static inline bool vdo_waiter_is_waiting(struct vdo_waiter *waiter) in vdo_waiter_is_waiting() argument 80 return (waiter->next_waiter != NULL); in vdo_waiter_is_waiting() 107 struct vdo_waiter *waiter);
|
| H A D | admin-state.h | 57 struct vdo_completion *waiter; member 140 struct vdo_completion *waiter); 144 struct vdo_completion *waiter, vdo_admin_initiator_fn initiator); 152 struct vdo_completion *waiter, vdo_admin_initiator_fn initiator); 162 struct vdo_completion *waiter, vdo_admin_initiator_fn initiator); 173 struct vdo_completion *waiter,
|
| H A D | dump.c | 154 struct vdo_waiter *waiter, *first = vdo_waitq_get_first_waiter(waitq); in dump_vio_waiters() local 166 for (waiter = first->next_waiter; waiter != first; waiter = waiter->next_waiter) { in dump_vio_waiters() 167 data_vio = vdo_waiter_as_data_vio(waiter); in dump_vio_waiters() 195 if (data_vio->waiter.next_waiter != NULL) in encode_vio_dump_flags()
|
| H A D | block-map.c | 88 struct vdo_waiter waiter; member 167 if (waiter == NULL) in page_completion_from_waiter() 170 completion = container_of(waiter, struct vdo_page_completion, waiter); in page_completion_from_waiter() 1499 write_page(container_of(waiter, struct tree_page, waiter), context); in write_page_callback() 1504 waiter->callback = write_page_callback; in acquire_vio() 1525 acquire_vio(&page->waiter, zone); in enqueue_page() 1534 struct tree_page *page = container_of(waiter, struct tree_page, waiter); in write_page_if_not_dirtied() 1590 struct tree_page, waiter); in finish_page_write() 1930 data_vio->waiter.callback = load_page; in load_block_map_page() 2628 struct cursor *cursor = container_of(waiter, struct cursor, waiter); in launch_cursor() [all …]
|
| /linux-6.15/drivers/tty/ |
| H A D | tty_ldsem.c | 95 tsk = waiter->task; in __ldsem_wake_readers() 121 struct ldsem_waiter *waiter; in __ldsem_wake_writer() local 124 wake_up_process(waiter->task); in __ldsem_wake_writer() 158 struct ldsem_waiter waiter; in down_read_failed() local 183 waiter.task = current; in down_read_failed() 212 if (waiter.task) { in down_read_failed() 215 list_del(&waiter.list); in down_read_failed() 217 put_task_struct(waiter.task); in down_read_failed() 232 struct ldsem_waiter waiter; in down_write_failed() local 255 waiter.task = current; in down_write_failed() [all …]
|
| /linux-6.15/lib/ |
| H A D | klist.c | 185 struct klist_waiter *waiter, *tmp; in klist_release() local 192 if (waiter->node != n) in klist_release() 195 list_del(&waiter->list); in klist_release() 196 waiter->woken = 1; in klist_release() 198 wake_up_process(waiter->process); in klist_release() 240 struct klist_waiter waiter; in klist_remove() local 242 waiter.node = n; in klist_remove() 243 waiter.process = current; in klist_remove() 244 waiter.woken = 0; in klist_remove() 246 list_add(&waiter.list, &klist_remove_waiters); in klist_remove() [all …]
|
| /linux-6.15/tools/testing/selftests/filesystems/epoll/ |
| H A D | epoll_wakeup_test.c | 23 pthread_t waiter; member 47 pthread_kill(ctx->waiter, SIGUSR1); in kill_timeout() 495 ASSERT_EQ(pthread_join(ctx.waiter, NULL), 0); in TEST() 538 ASSERT_EQ(pthread_join(ctx.waiter, NULL), 0); in TEST() 585 ASSERT_EQ(pthread_join(ctx.waiter, NULL), 0); in TEST() 634 ASSERT_EQ(pthread_join(ctx.waiter, NULL), 0); in TEST() 679 ASSERT_EQ(pthread_join(ctx.waiter, NULL), 0); in TEST() 722 ASSERT_EQ(pthread_join(ctx.waiter, NULL), 0); in TEST() 769 ASSERT_EQ(pthread_join(ctx.waiter, NULL), 0); in TEST() 818 ASSERT_EQ(pthread_join(ctx.waiter, NULL), 0); in TEST() [all …]
|
| /linux-6.15/tools/testing/selftests/futex/functional/ |
| H A D | futex_requeue_pi_signal_restart.c | 122 pthread_t waiter; in main() local 158 res = create_rt_thread(&waiter, waiterfn, NULL, SCHED_FIFO, 1); in main() 177 pthread_kill(waiter, SIGUSR1); in main() 208 pthread_kill(waiter, SIGUSR1); in main() 210 pthread_join(waiter, NULL); in main()
|
| H A D | futex_wait.c | 53 pthread_t waiter; in main() local 81 if (pthread_create(&waiter, NULL, waiterfn, (void *) &flags)) in main() 109 if (pthread_create(&waiter, NULL, waiterfn, NULL)) in main() 148 if (pthread_create(&waiter, NULL, waiterfn, NULL)) in main()
|
| H A D | futex_requeue.c | 43 pthread_t waiter[10]; in main() local 76 if (pthread_create(&waiter[0], NULL, waiterfn, NULL)) in main() 108 if (pthread_create(&waiter[i], NULL, waiterfn, NULL)) in main()
|
| /linux-6.15/Documentation/locking/ |
| H A D | futex-requeue-pi.rst | 20 implementation would wake the highest-priority waiter, and leave the 92 The requeue code cannot simply wake the waiter and leave it to 94 requeue call returning to user space and the waiter waking and 100 of the waiter and to enqueue the waiter on a contended rt_mutex. 104 FUTEX_WAIT_REQUEUE_PI is called by the waiter (pthread_cond_wait() 116 PI futex on behalf of the top waiter. If it can, this waiter is 120 task as a waiter on the underlying rt_mutex. It is possible that 122 waiter is woken to finish the acquisition of the lock.
|
| /linux-6.15/drivers/staging/vc04_services/interface/vchiq_arm/ |
| H A D | vchiq_arm.c | 356 waiter, waiter->pid); in free_bulk_waiter() 357 kfree(waiter); in free_bulk_waiter() 562 waiter = iter; in vchiq_blocking_bulk_transfer() 568 if (waiter) { in vchiq_blocking_bulk_transfer() 581 bulk->waiter = NULL; in vchiq_blocking_bulk_transfer() 586 waiter = kzalloc(sizeof(*waiter), GFP_KERNEL); in vchiq_blocking_bulk_transfer() 587 if (!waiter) in vchiq_blocking_bulk_transfer() 591 bulk_params->waiter = &waiter->bulk_waiter; in vchiq_blocking_bulk_transfer() 600 bulk->waiter = NULL; in vchiq_blocking_bulk_transfer() 603 kfree(waiter); in vchiq_blocking_bulk_transfer() [all …]
|
| H A D | vchiq_dev.c | 300 waiter = kzalloc(sizeof(*waiter), GFP_KERNEL); in vchiq_irq_queue_bulk_tx_rx() 301 if (!waiter) { in vchiq_irq_queue_bulk_tx_rx() 310 bulk_params.waiter = &waiter->bulk_waiter; in vchiq_irq_queue_bulk_tx_rx() 320 waiter = iter; in vchiq_irq_queue_bulk_tx_rx() 325 if (!waiter) { in vchiq_irq_queue_bulk_tx_rx() 332 waiter, current->pid); in vchiq_irq_queue_bulk_tx_rx() 335 &waiter->bulk_waiter); in vchiq_irq_queue_bulk_tx_rx() 347 if (!waiter) { in vchiq_irq_queue_bulk_tx_rx() 357 waiter->bulk_waiter.bulk->waiter = NULL; in vchiq_irq_queue_bulk_tx_rx() 360 kfree(waiter); in vchiq_irq_queue_bulk_tx_rx() [all …]
|
| /linux-6.15/drivers/gpu/drm/amd/amdkfd/ |
| H A D | kfd_events.c | 264 struct kfd_event_waiter *waiter; in destroy_event() local 269 WRITE_ONCE(waiter->event, NULL); in destroy_event() 626 struct kfd_event_waiter *waiter; in set_event() local 820 waiter->event = ev; in init_event_waiter() 829 waiter->activated = true; in init_event_waiter() 832 if (!waiter->activated) in init_event_waiter() 881 struct kfd_event_waiter *waiter; in copy_signaled_event_data() local 886 waiter = &event_waiters[i]; in copy_signaled_event_data() 887 event = waiter->event; in copy_signaled_event_data() 890 if (waiter->activated) { in copy_signaled_event_data() [all …]
|