/Linux-v5.4/drivers/gpu/host1x/ |
D | intr.c | 36 static bool add_waiter_to_queue(struct host1x_waitlist *waiter, in add_waiter_to_queue() argument 40 u32 thresh = waiter->thresh; in add_waiter_to_queue() 44 list_add(&waiter->list, &pos->list); in add_waiter_to_queue() 48 list_add(&waiter->list, queue); in add_waiter_to_queue() 60 struct host1x_waitlist *waiter, *next, *prev; in remove_completed_waiters() local 62 list_for_each_entry_safe(waiter, next, head, list) { in remove_completed_waiters() 63 if ((s32)(waiter->thresh - sync) > 0) in remove_completed_waiters() 66 dest = completed + waiter->action; in remove_completed_waiters() 69 if (waiter->action == HOST1X_INTR_ACTION_SUBMIT_COMPLETE && in remove_completed_waiters() 73 if (prev->data == waiter->data) { in remove_completed_waiters() [all …]
|
D | syncpt.c | 210 struct host1x_waitlist *waiter; in host1x_syncpt_wait() local 240 waiter = kzalloc(sizeof(*waiter), GFP_KERNEL); in host1x_syncpt_wait() 241 if (!waiter) { in host1x_syncpt_wait() 249 &wq, waiter, &ref); in host1x_syncpt_wait()
|
/Linux-v5.4/kernel/locking/ |
D | mutex-debug.c | 30 void debug_mutex_lock_common(struct mutex *lock, struct mutex_waiter *waiter) in debug_mutex_lock_common() argument 32 memset(waiter, MUTEX_DEBUG_INIT, sizeof(*waiter)); in debug_mutex_lock_common() 33 waiter->magic = waiter; in debug_mutex_lock_common() 34 INIT_LIST_HEAD(&waiter->list); in debug_mutex_lock_common() 37 void debug_mutex_wake_waiter(struct mutex *lock, struct mutex_waiter *waiter) in debug_mutex_wake_waiter() argument 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() 45 void debug_mutex_free_waiter(struct mutex_waiter *waiter) in debug_mutex_free_waiter() argument 47 DEBUG_LOCKS_WARN_ON(!list_empty(&waiter->list)); in debug_mutex_free_waiter() 48 memset(waiter, MUTEX_DEBUG_FREE, sizeof(*waiter)); in debug_mutex_free_waiter() [all …]
|
D | rtmutex.c | 273 rt_mutex_enqueue(struct rt_mutex *lock, struct rt_mutex_waiter *waiter) in rt_mutex_enqueue() argument 283 if (rt_mutex_waiter_less(waiter, entry)) { in rt_mutex_enqueue() 291 rb_link_node(&waiter->tree_entry, parent, link); in rt_mutex_enqueue() 292 rb_insert_color_cached(&waiter->tree_entry, &lock->waiters, leftmost); in rt_mutex_enqueue() 296 rt_mutex_dequeue(struct rt_mutex *lock, struct rt_mutex_waiter *waiter) in rt_mutex_dequeue() argument 298 if (RB_EMPTY_NODE(&waiter->tree_entry)) in rt_mutex_dequeue() 301 rb_erase_cached(&waiter->tree_entry, &lock->waiters); in rt_mutex_dequeue() 302 RB_CLEAR_NODE(&waiter->tree_entry); in rt_mutex_dequeue() 306 rt_mutex_enqueue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter) in rt_mutex_enqueue_pi() argument 316 if (rt_mutex_waiter_less(waiter, entry)) { in rt_mutex_enqueue_pi() [all …]
|
D | rtmutex-debug.c | 87 void debug_rt_mutex_print_deadlock(struct rt_mutex_waiter *waiter) in debug_rt_mutex_print_deadlock() argument 91 if (!waiter->deadlock_lock || !debug_locks) in debug_rt_mutex_print_deadlock() 95 task = pid_task(waiter->deadlock_task_pid, PIDTYPE_PID); in debug_rt_mutex_print_deadlock() 117 printk_lock(waiter->lock, 1); in debug_rt_mutex_print_deadlock() 121 printk_lock(waiter->deadlock_lock, 1); in debug_rt_mutex_print_deadlock() 158 void debug_rt_mutex_init_waiter(struct rt_mutex_waiter *waiter) in debug_rt_mutex_init_waiter() argument 160 memset(waiter, 0x11, sizeof(*waiter)); in debug_rt_mutex_init_waiter() 161 waiter->deadlock_task_pid = NULL; in debug_rt_mutex_init_waiter() 164 void debug_rt_mutex_free_waiter(struct rt_mutex_waiter *waiter) in debug_rt_mutex_free_waiter() argument 166 put_pid(waiter->deadlock_task_pid); in debug_rt_mutex_free_waiter() [all …]
|
D | mutex.c | 198 static inline bool __mutex_waiter_is_first(struct mutex *lock, struct mutex_waiter *waiter) in __mutex_waiter_is_first() argument 200 return list_first_entry(&lock->wait_list, struct mutex_waiter, list) == waiter; in __mutex_waiter_is_first() 208 __mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter, in __mutex_add_waiter() argument 211 debug_mutex_add_waiter(lock, waiter, current); in __mutex_add_waiter() 213 list_add_tail(&waiter->list, list); in __mutex_add_waiter() 214 if (__mutex_waiter_is_first(lock, waiter)) in __mutex_add_waiter() 367 __ww_mutex_die(struct mutex *lock, struct mutex_waiter *waiter, in __ww_mutex_die() argument 373 if (waiter->ww_ctx->acquired > 0 && in __ww_mutex_die() 374 __ww_ctx_stamp_after(waiter->ww_ctx, ww_ctx)) { in __ww_mutex_die() 375 debug_mutex_wake_waiter(lock, waiter); in __ww_mutex_die() [all …]
|
D | mutex.h | 13 #define mutex_remove_waiter(lock, waiter, task) \ argument 14 __list_del((waiter)->list.prev, (waiter)->list.next) 16 #define debug_mutex_wake_waiter(lock, waiter) do { } while (0) argument 17 #define debug_mutex_free_waiter(waiter) do { } while (0) argument 18 #define debug_mutex_add_waiter(lock, waiter, ti) do { } while (0) argument 23 debug_mutex_lock_common(struct mutex *lock, struct mutex_waiter *waiter) in debug_mutex_lock_common() argument
|
D | semaphore.c | 207 struct semaphore_waiter waiter; in __down_common() local 209 list_add_tail(&waiter.list, &sem->wait_list); in __down_common() 210 waiter.task = current; in __down_common() 211 waiter.up = false; in __down_common() 222 if (waiter.up) in __down_common() 227 list_del(&waiter.list); in __down_common() 231 list_del(&waiter.list); in __down_common() 257 struct semaphore_waiter *waiter = list_first_entry(&sem->wait_list, in __up() local 259 list_del(&waiter->list); in __up() 260 waiter->up = true; in __up() [all …]
|
D | rtmutex-debug.h | 13 extern void debug_rt_mutex_init_waiter(struct rt_mutex_waiter *waiter); 14 extern void debug_rt_mutex_free_waiter(struct rt_mutex_waiter *waiter); 22 struct rt_mutex_waiter *waiter, 24 extern void debug_rt_mutex_print_deadlock(struct rt_mutex_waiter *waiter); 28 static inline bool debug_rt_mutex_detect_deadlock(struct rt_mutex_waiter *waiter, in debug_rt_mutex_detect_deadlock() argument 31 return (waiter != NULL); in debug_rt_mutex_detect_deadlock()
|
D | mutex-debug.h | 18 struct mutex_waiter *waiter); 20 struct mutex_waiter *waiter); 21 extern void debug_mutex_free_waiter(struct mutex_waiter *waiter); 23 struct mutex_waiter *waiter, 25 extern void mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter,
|
D | rwsem.c | 405 struct rwsem_waiter *waiter, *tmp; in rwsem_mark_wake() local 415 waiter = rwsem_first_waiter(sem); in rwsem_mark_wake() 417 if (waiter->type == RWSEM_WAITING_FOR_WRITE) { in rwsem_mark_wake() 426 wake_q_add(wake_q, waiter->task); in rwsem_mark_wake() 456 time_after(jiffies, waiter->timeout)) { in rwsem_mark_wake() 470 owner = waiter->task; in rwsem_mark_wake() 471 if (waiter->last_rowner & RWSEM_RD_NONSPINNABLE) { in rwsem_mark_wake() 502 list_for_each_entry_safe(waiter, tmp, &sem->wait_list, list) { in rwsem_mark_wake() 503 if (waiter->type == RWSEM_WAITING_FOR_WRITE) in rwsem_mark_wake() 507 list_move_tail(&waiter->list, &wlist); in rwsem_mark_wake() [all …]
|
D | rtmutex_common.h | 138 extern void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter); 140 struct rt_mutex_waiter *waiter, 143 struct rt_mutex_waiter *waiter, 147 struct rt_mutex_waiter *waiter); 149 struct rt_mutex_waiter *waiter);
|
/Linux-v5.4/drivers/tty/ |
D | tty_ldsem.c | 76 struct ldsem_waiter *waiter, *next; in __ldsem_wake_readers() local 94 list_for_each_entry_safe(waiter, next, &sem->read_wait, list) { in __ldsem_wake_readers() 95 tsk = waiter->task; in __ldsem_wake_readers() 96 smp_store_release(&waiter->task, NULL); in __ldsem_wake_readers() 121 struct ldsem_waiter *waiter; in __ldsem_wake_writer() local 123 waiter = list_entry(sem->write_wait.next, struct ldsem_waiter, list); in __ldsem_wake_writer() 124 wake_up_process(waiter->task); in __ldsem_wake_writer() 158 struct ldsem_waiter waiter; in down_read_failed() local 180 list_add_tail(&waiter.list, &sem->read_wait); in down_read_failed() 183 waiter.task = current; in down_read_failed() [all …]
|
/Linux-v5.4/lib/ |
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-v5.4/tools/testing/selftests/futex/functional/ |
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()
|
D | futex_requeue_pi.c | 283 pthread_t waiter[THREAD_MAX], waker, blocker; in unit_test() local 320 if (create_rt_thread(&waiter[i], waiterfn, (void *)&args[i], in unit_test() 339 pthread_join(waiter[i], in unit_test()
|
/Linux-v5.4/drivers/gpu/drm/amd/amdkfd/ |
D | kfd_events.c | 240 struct kfd_event_waiter *waiter; in destroy_event() local 243 list_for_each_entry(waiter, &ev->wq.head, wait.entry) in destroy_event() 244 waiter->event = NULL; in destroy_event() 391 struct kfd_event_waiter *waiter; in set_event() local 400 list_for_each_entry(waiter, &ev->wq.head, wait.entry) in set_event() 401 waiter->activated = true; in set_event() 545 struct kfd_event_waiter *waiter, in init_event_waiter_get_status() argument 553 waiter->event = ev; in init_event_waiter_get_status() 554 waiter->activated = ev->signaled; in init_event_waiter_get_status() 560 static void init_event_waiter_add_to_waitlist(struct kfd_event_waiter *waiter) in init_event_waiter_add_to_waitlist() argument [all …]
|
/Linux-v5.4/Documentation/ |
D | futex-requeue-pi.txt | 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-v5.4/drivers/staging/vc04_services/interface/vchiq_arm/ |
D | vchiq_arm.c | 253 struct bulk_waiter_node *waiter, *next; in vchiq_shutdown() local 255 list_for_each_entry_safe(waiter, next, in vchiq_shutdown() 257 list_del(&waiter->list); in vchiq_shutdown() 260 waiter, waiter->pid); in vchiq_shutdown() 261 kfree(waiter); in vchiq_shutdown() 439 struct bulk_waiter_node *waiter = NULL; in vchiq_blocking_bulk_transfer() local 450 list_for_each_entry(waiter, &instance->bulk_waiter_list, list) { in vchiq_blocking_bulk_transfer() 451 if (waiter->pid == current->pid) { in vchiq_blocking_bulk_transfer() 452 list_del(&waiter->list); in vchiq_blocking_bulk_transfer() 458 if (waiter) { in vchiq_blocking_bulk_transfer() [all …]
|
/Linux-v5.4/fs/ |
D | locks.c | 705 static void locks_insert_global_blocked(struct file_lock *waiter) in locks_insert_global_blocked() argument 709 hash_add(blocked_hash, &waiter->fl_link, posix_owner_key(waiter)); in locks_insert_global_blocked() 712 static void locks_delete_global_blocked(struct file_lock *waiter) in locks_delete_global_blocked() argument 716 hash_del(&waiter->fl_link); in locks_delete_global_blocked() 724 static void __locks_delete_block(struct file_lock *waiter) in __locks_delete_block() argument 726 locks_delete_global_blocked(waiter); in __locks_delete_block() 727 list_del_init(&waiter->fl_blocked_member); in __locks_delete_block() 728 waiter->fl_blocker = NULL; in __locks_delete_block() 734 struct file_lock *waiter; in __locks_wake_up_blocks() local 736 waiter = list_first_entry(&blocker->fl_blocked_requests, in __locks_wake_up_blocks() [all …]
|
/Linux-v5.4/Documentation/locking/ |
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 …]
|
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-v5.4/fs/iomap/ |
D | direct-io.c | 39 struct task_struct *waiter; member 156 struct task_struct *waiter = dio->submit.waiter; in iomap_dio_bio_end_io() local 157 WRITE_ONCE(dio->submit.waiter, NULL); in iomap_dio_bio_end_io() 158 blk_wake_io_task(waiter); in iomap_dio_bio_end_io() 425 dio->submit.waiter = current; in iomap_dio_rw() 540 if (!READ_ONCE(dio->submit.waiter)) in iomap_dio_rw()
|
/Linux-v5.4/drivers/md/persistent-data/ |
D | dm-block-manager.c | 54 struct waiter { struct 120 static void __wait(struct waiter *w) in __wait() 134 static void __wake_waiter(struct waiter *w) in __wake_waiter() 150 struct waiter *w, *tmp; in __wake_many() 194 struct waiter w; in bl_down_read() 257 struct waiter w; in bl_down_write()
|
/Linux-v5.4/mm/ |
D | page_io.c | 123 struct task_struct *waiter = bio->bi_private; in end_swap_bio_read() local 140 if (waiter) { in end_swap_bio_read() 141 blk_wake_io_task(waiter); in end_swap_bio_read() 142 put_task_struct(waiter); in end_swap_bio_read()
|