| /linux/drivers/md/dm-vdo/ |
| H A D | admin-state.c | 206 if (state->waiter != NULL) in vdo_finish_operation() 207 vdo_set_completion_result(state->waiter, result); in vdo_finish_operation() 211 if (state->waiter != NULL) in vdo_finish_operation() 212 vdo_launch_completion(vdo_forget(state->waiter)); in vdo_finish_operation() 229 struct vdo_completion *waiter, in begin_operation() argument 240 } else if (state->waiter != NULL) { in begin_operation() 245 state->waiter = waiter; in begin_operation() 259 if (waiter != NULL) in begin_operation() 260 vdo_continue_completion(waiter, result); in begin_operation() 276 struct vdo_completion *waiter, in start_operation() argument [all …]
|
| H A D | wait-queue.c | 21 void vdo_waitq_enqueue_waiter(struct vdo_wait_queue *waitq, struct vdo_waiter *waiter) in vdo_waitq_enqueue_waiter() argument 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() 138 struct vdo_waiter *waiter = vdo_waitq_dequeue_waiter(&iteration_waitq); in vdo_waitq_dequeue_matching_waiters() local 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 [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 | 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 | 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 | block-map.c | 88 struct vdo_waiter waiter; member 163 static inline struct vdo_page_completion *page_completion_from_waiter(struct vdo_waiter *waiter) in page_completion_from_waiter() argument 167 if (waiter == NULL) in page_completion_from_waiter() 170 completion = container_of(waiter, struct vdo_page_completion, waiter); in page_completion_from_waiter() 515 static void complete_waiter_with_error(struct vdo_waiter *waiter, void *result_ptr) in complete_waiter_with_error() argument 519 vdo_fail_completion(&page_completion_from_waiter(waiter)->completion, *result); in complete_waiter_with_error() 529 static void complete_waiter_with_page(struct vdo_waiter *waiter, void *page_info) in complete_waiter_with_page() argument 531 complete_with_page(page_info, page_completion_from_waiter(waiter)); in complete_waiter_with_page() 893 static bool completion_needs_page(struct vdo_waiter *waiter, void *context) in completion_needs_page() argument 897 return (page_completion_from_waiter(waiter)->pbn == *pbn); in completion_needs_page() [all …]
|
| H A D | slab-depot.c | 126 static void release_journal_locks(struct vdo_waiter *waiter, void *context); 361 static void update_slab_summary_entry(struct vdo_slab *slab, struct vdo_waiter *waiter, in update_slab_summary_entry() argument 374 waiter->callback(waiter, &result); in update_slab_summary_entry() 381 waiter->callback(waiter, &result); in update_slab_summary_entry() 392 vdo_waitq_enqueue_waiter(&block->next_update_waiters, waiter); in update_slab_summary_entry() 450 static void flush_for_reaping(struct vdo_waiter *waiter, void *context) in flush_for_reaping() argument 453 container_of(waiter, struct slab_journal, flush_waiter); in flush_for_reaping() 559 static void release_journal_locks(struct vdo_waiter *waiter, void *context) in release_journal_locks() argument 563 container_of(waiter, struct slab_journal, slab_summary_waiter); in release_journal_locks() 744 static void write_slab_journal_block(struct vdo_waiter *waiter, void *context) in write_slab_journal_block() argument [all …]
|
| H A D | recovery-journal.c | 269 static void continue_waiter(struct vdo_waiter *waiter, void *context) in continue_waiter() argument 271 continue_data_vio_with_error(vdo_waiter_as_data_vio(waiter), *((int *) context)); in continue_waiter() 1088 static void assign_entry(struct vdo_waiter *waiter, void *context) in assign_entry() argument 1090 struct data_vio *data_vio = vdo_waiter_as_data_vio(waiter); in assign_entry() 1106 vdo_waitq_enqueue_waiter(&block->entry_waiters, &data_vio->waiter); in assign_entry() 1177 static void continue_committed_waiter(struct vdo_waiter *waiter, void *context) in continue_committed_waiter() argument 1179 struct data_vio *data_vio = vdo_waiter_as_data_vio(waiter); in continue_committed_waiter() 1365 vdo_waitq_enqueue_waiter(&block->commit_waiters, &data_vio->waiter); in add_queued_recovery_entries() 1376 static void write_block(struct vdo_waiter *waiter, void __always_unused *context) in write_block() argument 1379 container_of(waiter, struct recovery_journal_block, write_waiter); in write_block() [all …]
|
| /linux/kernel/locking/ |
| H A D | rwsem.c | 369 rwsem_add_waiter(struct rw_semaphore *sem, struct rwsem_waiter *waiter) in rwsem_add_waiter() argument 372 list_add_tail(&waiter->list, &sem->wait_list); in rwsem_add_waiter() 385 rwsem_del_waiter(struct rw_semaphore *sem, struct rwsem_waiter *waiter) in rwsem_del_waiter() argument 388 list_del(&waiter->list); in rwsem_del_waiter() 414 struct rwsem_waiter *waiter, *tmp; in rwsem_mark_wake() local 424 waiter = rwsem_first_waiter(sem); in rwsem_mark_wake() 426 if (waiter->type == RWSEM_WAITING_FOR_WRITE) { in rwsem_mark_wake() 435 wake_q_add(wake_q, waiter->task); in rwsem_mark_wake() 464 if (time_after(jiffies, waiter->timeout)) { in rwsem_mark_wake() 469 waiter->handoff_set = true; in rwsem_mark_wake() [all …]
|
| H A D | semaphore.c | 255 struct semaphore_waiter waiter; in ___down_common() local 257 list_add_tail(&waiter.list, &sem->wait_list); in ___down_common() 258 waiter.task = current; in ___down_common() 259 waiter.up = false; in ___down_common() 270 if (waiter.up) { in ___down_common() 277 list_del(&waiter.list); in ___down_common() 281 list_del(&waiter.list); in ___down_common() 324 struct semaphore_waiter *waiter = list_first_entry(&sem->wait_list, in __up() local 326 list_del(&waiter->list); in __up() 327 waiter->up = true; in __up() [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() 130 __ww_waiter_add(struct rt_mutex *lock, struct rt_mutex_waiter *waiter, struct rt_mutex_waiter *pos) in __ww_waiter_add() argument 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() 292 __clear_task_blocked_on(waiter->task, lock); in __ww_mutex_die() 293 wake_q_add(wake_q, waiter->task); in __ww_mutex_die() 465 __ww_mutex_check_kill(struct MUTEX *lock, struct MUTEX_WAITER *waiter, in __ww_mutex_check_kill() argument 489 for (cur = __ww_waiter_prev(lock, waiter); cur; in __ww_mutex_check_kill() [all …]
|
| /linux/lib/ |
| H A D | klist.c | 185 struct klist_waiter *waiter, *tmp; in klist_release() local 191 list_for_each_entry_safe(waiter, tmp, &klist_remove_waiters, list) { in klist_release() 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() [all …]
|
| /linux/tools/testing/selftests/futex/functional/ |
| H A D | futex_wait.c | 43 pthread_t waiter; in TEST() local 50 if (pthread_create(&waiter, NULL, waiterfn, (void *) &flags)) in TEST() 68 pthread_t waiter; in TEST() local 86 if (pthread_create(&waiter, NULL, waiterfn, NULL)) in TEST() 106 pthread_t waiter; in TEST() local 127 if (pthread_create(&waiter, NULL, waiterfn, NULL)) in TEST()
|
| H A D | futex_requeue_pi_signal_restart.c | 102 pthread_t waiter; in TEST() local 113 res = create_rt_thread(&waiter, waiterfn, NULL, SCHED_FIFO, 1); in TEST() 129 pthread_kill(waiter, SIGUSR1); in TEST() 158 pthread_kill(waiter, SIGUSR1); in TEST() 160 pthread_join(waiter, NULL); in TEST()
|
| H A D | futex_requeue.c | 36 pthread_t waiter[10]; in TEST() local 44 if (pthread_create(&waiter[0], NULL, waiterfn, NULL)) in TEST() 71 pthread_t waiter[10]; in TEST() local 81 if (pthread_create(&waiter[i], NULL, waiterfn, NULL)) in TEST()
|
| H A D | futex_waitv.c | 53 pthread_t waiter; in TEST() local 64 if (pthread_create(&waiter, NULL, waiterfn, NULL)) in TEST() 81 pthread_t waiter; in TEST() local 104 if (pthread_create(&waiter, NULL, waiterfn, NULL)) in TEST()
|
| /linux/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() 489 ASSERT_EQ(pthread_create(&ctx.waiter, NULL, waiter_entry1a, &ctx), 0); in TEST() 495 ASSERT_EQ(pthread_join(ctx.waiter, NULL), 0); in TEST() 532 ASSERT_EQ(pthread_create(&ctx.waiter, NULL, waiter_entry1a, &ctx), 0); in TEST() 538 ASSERT_EQ(pthread_join(ctx.waiter, NULL), 0); in TEST() 579 ASSERT_EQ(pthread_create(&ctx.waiter, NULL, waiter_entry2a, &ctx), 0); in TEST() 585 ASSERT_EQ(pthread_join(ctx.waiter, NULL), 0); in TEST() 628 ASSERT_EQ(pthread_create(&ctx.waiter, NULL, waiter_entry1a, &ctx), 0); in TEST() 634 ASSERT_EQ(pthread_join(ctx.waiter, NULL), 0); in TEST() [all …]
|
| /linux/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.
|
| H A D | rt-mutex-design.rst | 100 waiter 101 - A waiter is a struct that is stored on the stack of a blocked 102 process. Since the scope of the waiter is within the code for 104 the waiter on the process's stack (local variable). This 110 waiter is sometimes used in reference to the task that is waiting 111 on a mutex. This is the same as waiter->task. 116 top waiter 119 top pi waiter 360 pi waiter to its own normal/deadline priority and take the higher one. 377 by the task, so we only need to compare the priority of that top pi waiter [all …]
|
| H A D | rt-mutex.rst | 20 priority waiter until the rt-mutex is released. If the temporarily 32 The enqueueing of the waiters into the rtmutex waiter tree is done in 34 rtmutex, only the top priority waiter is enqueued into the owner's 36 the top priority waiter of a task changes (for example it timed out or 56 NULL 1 lock is free and has waiters and the top waiter
|
| /linux/drivers/platform/raspberrypi/vchiq-interface/ |
| H A D | vchiq_arm.c | 385 struct bulk_waiter_node *waiter, *next; in free_bulk_waiter() local 387 list_for_each_entry_safe(waiter, next, in free_bulk_waiter() 389 list_del(&waiter->list); in free_bulk_waiter() 392 waiter, waiter->pid); in free_bulk_waiter() 393 kfree(waiter); in free_bulk_waiter() 584 struct bulk_waiter_node *waiter = NULL, *iter; in vchiq_blocking_bulk_transfer() local 597 waiter = iter; in vchiq_blocking_bulk_transfer() 603 if (waiter) { in vchiq_blocking_bulk_transfer() 604 struct vchiq_bulk *bulk = waiter->bulk_waiter.bulk; in vchiq_blocking_bulk_transfer() 616 bulk->waiter = NULL; in vchiq_blocking_bulk_transfer() [all …]
|
| H A D | vchiq_dev.c | 291 struct bulk_waiter_node *waiter = NULL, *iter; in vchiq_irq_queue_bulk_tx_rx() local 301 waiter = kzalloc(sizeof(*waiter), GFP_KERNEL); in vchiq_irq_queue_bulk_tx_rx() 302 if (!waiter) { in vchiq_irq_queue_bulk_tx_rx() 311 bulk_params.waiter = &waiter->bulk_waiter; in vchiq_irq_queue_bulk_tx_rx() 321 waiter = iter; in vchiq_irq_queue_bulk_tx_rx() 326 if (!waiter) { in vchiq_irq_queue_bulk_tx_rx() 333 waiter, current->pid); in vchiq_irq_queue_bulk_tx_rx() 336 &waiter->bulk_waiter); in vchiq_irq_queue_bulk_tx_rx() 348 if (!waiter) { in vchiq_irq_queue_bulk_tx_rx() 354 !waiter->bulk_waiter.bulk) { in vchiq_irq_queue_bulk_tx_rx() [all …]
|
| /linux/fs/ |
| H A D | locks.c | 675 static void locks_insert_global_blocked(struct file_lock_core *waiter) in locks_insert_global_blocked() argument 679 hash_add(blocked_hash, &waiter->flc_link, posix_owner_key(waiter)); in locks_insert_global_blocked() 682 static void locks_delete_global_blocked(struct file_lock_core *waiter) in locks_delete_global_blocked() argument 686 hash_del(&waiter->flc_link); in locks_delete_global_blocked() 694 static void __locks_unlink_block(struct file_lock_core *waiter) in __locks_unlink_block() argument 696 locks_delete_global_blocked(waiter); in __locks_unlink_block() 697 list_del_init(&waiter->flc_blocked_member); in __locks_unlink_block() 703 struct file_lock_core *waiter; in __locks_wake_up_blocks() local 706 waiter = list_first_entry(&blocker->flc_blocked_requests, in __locks_wake_up_blocks() 709 fl = file_lock(waiter); in __locks_wake_up_blocks() [all …]
|
| /linux/drivers/md/persistent-data/ |
| H A D | dm-block-manager.c | 55 struct waiter { struct 122 static void __wait(struct waiter *w) in __wait() 136 static void __wake_waiter(struct waiter *w) in __wake_waiter() 152 struct waiter *w, *tmp; in __wake_many() 196 struct waiter w; in bl_down_read() 259 struct waiter w; in bl_down_write()
|
| /linux/fs/iomap/ |
| H A D | direct-io.c | 41 struct task_struct *waiter; member 165 struct task_struct *waiter = dio->submit.waiter; in iomap_dio_done() local 167 WRITE_ONCE(dio->submit.waiter, NULL); in iomap_dio_done() 168 blk_wake_io_task(waiter); in iomap_dio_done() 661 dio->submit.waiter = current; in __iomap_dio_rw() 822 if (!READ_ONCE(dio->submit.waiter)) in __iomap_dio_rw()
|