Home
last modified time | relevance | path

Searched refs:waiter (Results 1 – 25 of 58) sorted by relevance

123

/linux/drivers/md/dm-vdo/
H A Dadmin-state.c206 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 Dwait-queue.c21 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 Dwait-queue.h51 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 Ddump.c154 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 Dadmin-state.h57 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 Dblock-map.c88 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 Dslab-depot.c126 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 Drecovery-journal.c269 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 Drwsem.c369 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 Dsemaphore.c255 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 Dww_mutex.h53 __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 Dklist.c185 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 Dfutex_wait.c43 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 Dfutex_requeue_pi_signal_restart.c102 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 Dfutex_requeue.c36 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 Dfutex_waitv.c53 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 Depoll_wakeup_test.c23 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 Dfutex-requeue-pi.rst20 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 Drt-mutex-design.rst100 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 Drt-mutex.rst20 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 Dvchiq_arm.c385 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 Dvchiq_dev.c291 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 Dlocks.c675 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 Ddm-block-manager.c55 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 Ddirect-io.c41 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()

123