hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/kernel/sched/swait.c
....@@ -32,6 +32,25 @@
3232 }
3333 EXPORT_SYMBOL(swake_up_locked);
3434
35
+void swake_up_all_locked(struct swait_queue_head *q)
36
+{
37
+ struct swait_queue *curr;
38
+ int wakes = 0;
39
+
40
+ while (!list_empty(&q->task_list)) {
41
+
42
+ curr = list_first_entry(&q->task_list, typeof(*curr),
43
+ task_list);
44
+ wake_up_process(curr->task);
45
+ list_del_init(&curr->task_list);
46
+ wakes++;
47
+ }
48
+ if (pm_in_action)
49
+ return;
50
+ WARN(wakes > 2, "complete_all() with %d waiters\n", wakes);
51
+}
52
+EXPORT_SYMBOL(swake_up_all_locked);
53
+
3554 void swake_up_one(struct swait_queue_head *q)
3655 {
3756 unsigned long flags;
....@@ -51,6 +70,7 @@
5170 struct swait_queue *curr;
5271 LIST_HEAD(tmp);
5372
73
+ WARN_ON(irqs_disabled());
5474 raw_spin_lock_irq(&q->lock);
5575 list_splice_init(&q->task_list, &tmp);
5676 while (!list_empty(&tmp)) {
....@@ -69,7 +89,7 @@
6989 }
7090 EXPORT_SYMBOL(swake_up_all);
7191
72
-static void __prepare_to_swait(struct swait_queue_head *q, struct swait_queue *wait)
92
+void __prepare_to_swait(struct swait_queue_head *q, struct swait_queue *wait)
7393 {
7494 wait->task = current;
7595 if (list_empty(&wait->task_list))