Home
last modified time | relevance | path

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

123

/linux/kernel/locking/
H A Dmutex-debug.c31 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 Drtmutex.c379 waiter->pi_tree.prio = waiter->tree.prio; in waiter_clone_prio()
380 waiter->pi_tree.deadline = waiter->tree.deadline; in waiter_clone_prio()
438 if (rt_prio(waiter->tree.prio) || dl_prio(waiter->tree.prio)) in rt_mutex_steal()
593 return waiter != NULL; in rt_mutex_cond_detect_deadlock()
745 if (!waiter) in rt_mutex_adjust_prio_chain()
832 lock = waiter->lock; in rt_mutex_adjust_prio_chain()
1119 if (waiter) { in try_to_take_rt_mutex()
1126 if (waiter == top_waiter || rt_mutex_steal(waiter, top_waiter)) { in try_to_take_rt_mutex()
1229 waiter->task = task; in task_blocks_on_rt_mutex()
1230 waiter->lock = lock; in task_blocks_on_rt_mutex()
[all …]
H A Drtmutex_common.h85 struct rt_mutex_waiter *waiter,
88 struct rt_mutex_waiter *waiter,
94 struct rt_mutex_waiter *waiter);
121 struct rt_mutex_waiter *waiter) in rt_mutex_waiter_is_top_waiter() argument
202 memset(waiter, 0x11, sizeof(*waiter)); in debug_rt_mutex_init_waiter()
208 memset(waiter, 0x22, sizeof(*waiter)); in debug_rt_mutex_free_waiter()
213 debug_rt_mutex_init_waiter(waiter); in rt_mutex_init_waiter()
215 RB_CLEAR_NODE(&waiter->tree.entry); in rt_mutex_init_waiter()
216 waiter->wake_state = TASK_NORMAL; in rt_mutex_init_waiter()
217 waiter->task = NULL; in rt_mutex_init_waiter()
[all …]
H A Dmutex.h25 struct mutex_waiter *waiter);
27 struct mutex_waiter *waiter);
28 extern void debug_mutex_free_waiter(struct mutex_waiter *waiter);
30 struct mutex_waiter *waiter,
32 extern void debug_mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter,
38 # define debug_mutex_lock_common(lock, waiter) do { } while (0) argument
39 # define debug_mutex_wake_waiter(lock, waiter) do { } while (0) argument
40 # define debug_mutex_free_waiter(waiter) do { } while (0) argument
41 # define debug_mutex_add_waiter(lock, waiter, ti) do { } while (0) argument
42 # define debug_mutex_remove_waiter(lock, waiter, ti) do { } while (0) argument
H A Dmutex.c218 list_del(&waiter->list); in __mutex_remove_waiter()
305 struct mutex_waiter *waiter) in ww_mutex_spin_on_owner() argument
339 if (waiter && !__mutex_waiter_is_first(lock, waiter)) in ww_mutex_spin_on_owner()
444 if (!waiter) { in mutex_optimistic_spin()
488 if (!waiter) in mutex_optimistic_spin()
495 if (!waiter) in mutex_optimistic_spin()
578 struct mutex_waiter waiter; in __mutex_lock_common() local
634 waiter.task = current; in __mutex_lock_common()
636 waiter.ww_ctx = ww_ctx; in __mutex_lock_common()
941 struct mutex_waiter *waiter = in __mutex_unlock_slowpath() local
[all …]
H A Drwsem.c389 list_del(&waiter->list); in rwsem_del_waiter()
482 owner = waiter->task; in rwsem_mark_wake()
552 tsk = waiter->task; in rwsem_mark_wake()
663 list_del(&waiter->list); in rwsem_try_write_lock()
1000 struct rwsem_waiter waiter; in rwsem_down_read_slowpath() local
1035 waiter.task = current; in rwsem_down_read_slowpath()
1038 waiter.handoff_set = false; in rwsem_down_read_slowpath()
1080 if (waiter.task) in rwsem_down_read_slowpath()
1109 struct rwsem_waiter waiter; in rwsem_down_write_slowpath() local
1122 waiter.task = current; in rwsem_down_write_slowpath()
[all …]
H A Dsemaphore.c212 struct semaphore_waiter waiter; in ___down_common() local
214 list_add_tail(&waiter.list, &sem->wait_list); in ___down_common()
215 waiter.task = current; in ___down_common()
216 waiter.up = false; in ___down_common()
227 if (waiter.up) in ___down_common()
232 list_del(&waiter.list); in ___down_common()
236 list_del(&waiter.list); in ___down_common()
274 struct semaphore_waiter *waiter = list_first_entry(&sem->wait_list, in __up() local
276 list_del(&waiter->list); in __up()
277 waiter->up = true; in __up()
[all …]
H A Drtmutex_api.c293 struct rt_mutex_waiter *waiter, in __rt_mutex_start_proxy_lock() argument
340 struct rt_mutex_waiter *waiter, in rt_mutex_start_proxy_lock() argument
348 remove_waiter(lock, waiter); in rt_mutex_start_proxy_lock()
373 struct rt_mutex_waiter *waiter) in rt_mutex_wait_proxy_lock() argument
412 struct rt_mutex_waiter *waiter) in rt_mutex_cleanup_proxy_lock() argument
428 try_to_take_rt_mutex(lock, current, waiter); in rt_mutex_cleanup_proxy_lock()
434 remove_waiter(lock, waiter); in rt_mutex_cleanup_proxy_lock()
455 struct rt_mutex_waiter *waiter; in rt_mutex_adjust_pi() local
461 waiter = task->pi_blocked_on; in rt_mutex_adjust_pi()
462 if (!waiter || rt_waiter_node_equal(&waiter->tree, task_to_waiter_node(task))) { in rt_mutex_adjust_pi()
[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()
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_up_process(waiter->task); in __ww_mutex_die()
441 __ww_mutex_check_kill(struct MUTEX *lock, struct MUTEX_WAITER *waiter, in __ww_mutex_check_kill() argument
465 for (cur = __ww_waiter_prev(lock, waiter); cur; in __ww_mutex_check_kill()
489 __ww_mutex_add_waiter(struct MUTEX_WAITER *waiter, in __ww_mutex_add_waiter() argument
497 __ww_waiter_add(lock, waiter, NULL); in __ww_mutex_add_waiter()
[all …]
/linux/drivers/md/dm-vdo/
H A Dadmin-state.c203 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 Dwait-queue.c23 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 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 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 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 Dblock-map.c88 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()
1501 write_page(container_of(waiter, struct tree_page, waiter), context); in write_page_callback()
1506 waiter->callback = write_page_callback; in acquire_vio()
1527 acquire_vio(&page->waiter, zone); in enqueue_page()
1536 struct tree_page *page = container_of(waiter, struct tree_page, waiter); in write_page_if_not_dirtied()
1592 struct tree_page, waiter); in finish_page_write()
1933 data_vio->waiter.callback = load_page; in load_block_map_page()
2631 struct cursor *cursor = container_of(waiter, struct cursor, waiter); in launch_cursor()
[all …]
/linux/drivers/tty/
H A Dtty_ldsem.c95 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/lib/
H A Dklist.c185 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/tools/testing/selftests/filesystems/epoll/
H A Depoll_wakeup_test.c23 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/tools/testing/selftests/futex/functional/
H A Dfutex_requeue_pi_signal_restart.c122 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 Dfutex_wait.c53 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 Dfutex_requeue.c43 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/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.
/linux/drivers/gpu/drm/amd/amdkfd/
H A Dkfd_events.c263 struct kfd_event_waiter *waiter; in destroy_event() local
268 WRITE_ONCE(waiter->event, NULL); in destroy_event()
625 struct kfd_event_waiter *waiter; in set_event() local
808 waiter->event = ev; in init_event_waiter()
817 waiter->activated = true; in init_event_waiter()
820 if (!waiter->activated) in init_event_waiter()
869 struct kfd_event_waiter *waiter; in copy_signaled_event_data() local
874 waiter = &event_waiters[i]; in copy_signaled_event_data()
875 event = waiter->event; in copy_signaled_event_data()
878 if (waiter->activated) { in copy_signaled_event_data()
[all …]
/linux/drivers/staging/vc04_services/interface/vchiq_arm/
H A Dvchiq_dev.c300 waiter = kzalloc(sizeof(*waiter), GFP_KERNEL); in vchiq_irq_queue_bulk_tx_rx()
301 if (!waiter) { in vchiq_irq_queue_bulk_tx_rx()
313 waiter = iter; in vchiq_irq_queue_bulk_tx_rx()
318 if (!waiter) { in vchiq_irq_queue_bulk_tx_rx()
325 waiter, current->pid); in vchiq_irq_queue_bulk_tx_rx()
334 if (!waiter) { in vchiq_irq_queue_bulk_tx_rx()
340 !waiter->bulk_waiter.bulk) { in vchiq_irq_queue_bulk_tx_rx()
341 if (waiter->bulk_waiter.bulk) { in vchiq_irq_queue_bulk_tx_rx()
347 kfree(waiter); in vchiq_irq_queue_bulk_tx_rx()
352 waiter->pid = current->pid; in vchiq_irq_queue_bulk_tx_rx()
[all …]
/linux/fs/
H A Dlocks.c679 hash_add(blocked_hash, &waiter->flc_link, posix_owner_key(waiter)); in locks_insert_global_blocked()
686 hash_del(&waiter->flc_link); in locks_delete_global_blocked()
703 struct file_lock_core *waiter; in __locks_wake_up_blocks() local
709 fl = file_lock(waiter); in __locks_wake_up_blocks()
710 __locks_unlink_block(waiter); in __locks_wake_up_blocks()
756 if (waiter->flc_blocker) in __locks_delete_block()
758 __locks_wake_up_blocks(waiter); in __locks_delete_block()
759 __locks_unlink_block(waiter); in __locks_delete_block()
807 if (conflict(flc, waiter)) { in __locks_insert_block()
811 waiter->flc_blocker = blocker; in __locks_insert_block()
[all …]

123