Lines Matching +full:wait +full:- +full:state

1 // SPDX-License-Identifier: GPL-2.0
3 * <linux/swait.h> (simple wait queues ) implementation:
10 raw_spin_lock_init(&q->lock); in __init_swait_queue_head()
11 lockdep_set_class_and_name(&q->lock, key, name); in __init_swait_queue_head()
12 INIT_LIST_HEAD(&q->task_list); in __init_swait_queue_head()
26 if (list_empty(&q->task_list)) in swake_up_locked()
29 curr = list_first_entry(&q->task_list, typeof(*curr), task_list); in swake_up_locked()
30 wake_up_process(curr->task); in swake_up_locked()
31 list_del_init(&curr->task_list); in swake_up_locked()
44 while (!list_empty(&q->task_list)) in swake_up_all_locked()
52 raw_spin_lock_irqsave(&q->lock, flags); in swake_up_one()
54 raw_spin_unlock_irqrestore(&q->lock, flags); in swake_up_one()
67 raw_spin_lock_irq(&q->lock); in swake_up_all()
68 list_splice_init(&q->task_list, &tmp); in swake_up_all()
72 wake_up_state(curr->task, TASK_NORMAL); in swake_up_all()
73 list_del_init(&curr->task_list); in swake_up_all()
78 raw_spin_unlock_irq(&q->lock); in swake_up_all()
79 raw_spin_lock_irq(&q->lock); in swake_up_all()
81 raw_spin_unlock_irq(&q->lock); in swake_up_all()
85 void __prepare_to_swait(struct swait_queue_head *q, struct swait_queue *wait) in __prepare_to_swait() argument
87 wait->task = current; in __prepare_to_swait()
88 if (list_empty(&wait->task_list)) in __prepare_to_swait()
89 list_add_tail(&wait->task_list, &q->task_list); in __prepare_to_swait()
92 void prepare_to_swait_exclusive(struct swait_queue_head *q, struct swait_queue *wait, int state) in prepare_to_swait_exclusive() argument
96 raw_spin_lock_irqsave(&q->lock, flags); in prepare_to_swait_exclusive()
97 __prepare_to_swait(q, wait); in prepare_to_swait_exclusive()
98 set_current_state(state); in prepare_to_swait_exclusive()
99 raw_spin_unlock_irqrestore(&q->lock, flags); in prepare_to_swait_exclusive()
103 long prepare_to_swait_event(struct swait_queue_head *q, struct swait_queue *wait, int state) in prepare_to_swait_event() argument
108 raw_spin_lock_irqsave(&q->lock, flags); in prepare_to_swait_event()
109 if (signal_pending_state(state, current)) { in prepare_to_swait_event()
114 list_del_init(&wait->task_list); in prepare_to_swait_event()
115 ret = -ERESTARTSYS; in prepare_to_swait_event()
117 __prepare_to_swait(q, wait); in prepare_to_swait_event()
118 set_current_state(state); in prepare_to_swait_event()
120 raw_spin_unlock_irqrestore(&q->lock, flags); in prepare_to_swait_event()
126 void __finish_swait(struct swait_queue_head *q, struct swait_queue *wait) in __finish_swait() argument
129 if (!list_empty(&wait->task_list)) in __finish_swait()
130 list_del_init(&wait->task_list); in __finish_swait()
133 void finish_swait(struct swait_queue_head *q, struct swait_queue *wait) in finish_swait() argument
139 if (!list_empty_careful(&wait->task_list)) { in finish_swait()
140 raw_spin_lock_irqsave(&q->lock, flags); in finish_swait()
141 list_del_init(&wait->task_list); in finish_swait()
142 raw_spin_unlock_irqrestore(&q->lock, flags); in finish_swait()