hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/kernel/sched/completion.c
....@@ -29,12 +29,12 @@
2929 {
3030 unsigned long flags;
3131
32
- spin_lock_irqsave(&x->wait.lock, flags);
32
+ raw_spin_lock_irqsave(&x->wait.lock, flags);
3333
3434 if (x->done != UINT_MAX)
3535 x->done++;
36
- __wake_up_locked(&x->wait, TASK_NORMAL, 1);
37
- spin_unlock_irqrestore(&x->wait.lock, flags);
36
+ swake_up_locked(&x->wait);
37
+ raw_spin_unlock_irqrestore(&x->wait.lock, flags);
3838 }
3939 EXPORT_SYMBOL(complete);
4040
....@@ -58,10 +58,12 @@
5858 {
5959 unsigned long flags;
6060
61
- spin_lock_irqsave(&x->wait.lock, flags);
61
+ lockdep_assert_RT_in_threaded_ctx();
62
+
63
+ raw_spin_lock_irqsave(&x->wait.lock, flags);
6264 x->done = UINT_MAX;
63
- __wake_up_locked(&x->wait, TASK_NORMAL, 0);
64
- spin_unlock_irqrestore(&x->wait.lock, flags);
65
+ swake_up_all_locked(&x->wait);
66
+ raw_spin_unlock_irqrestore(&x->wait.lock, flags);
6567 }
6668 EXPORT_SYMBOL(complete_all);
6769
....@@ -70,20 +72,20 @@
7072 long (*action)(long), long timeout, int state)
7173 {
7274 if (!x->done) {
73
- DECLARE_WAITQUEUE(wait, current);
75
+ DECLARE_SWAITQUEUE(wait);
7476
75
- __add_wait_queue_entry_tail_exclusive(&x->wait, &wait);
7677 do {
7778 if (signal_pending_state(state, current)) {
7879 timeout = -ERESTARTSYS;
7980 break;
8081 }
82
+ __prepare_to_swait(&x->wait, &wait);
8183 __set_current_state(state);
82
- spin_unlock_irq(&x->wait.lock);
84
+ raw_spin_unlock_irq(&x->wait.lock);
8385 timeout = action(timeout);
84
- spin_lock_irq(&x->wait.lock);
86
+ raw_spin_lock_irq(&x->wait.lock);
8587 } while (!x->done && timeout);
86
- __remove_wait_queue(&x->wait, &wait);
88
+ __finish_swait(&x->wait, &wait);
8789 if (!x->done)
8890 return timeout;
8991 }
....@@ -100,9 +102,9 @@
100102
101103 complete_acquire(x);
102104
103
- spin_lock_irq(&x->wait.lock);
105
+ raw_spin_lock_irq(&x->wait.lock);
104106 timeout = do_wait_for_common(x, action, timeout, state);
105
- spin_unlock_irq(&x->wait.lock);
107
+ raw_spin_unlock_irq(&x->wait.lock);
106108
107109 complete_release(x);
108110
....@@ -291,12 +293,12 @@
291293 if (!READ_ONCE(x->done))
292294 return false;
293295
294
- spin_lock_irqsave(&x->wait.lock, flags);
296
+ raw_spin_lock_irqsave(&x->wait.lock, flags);
295297 if (!x->done)
296298 ret = false;
297299 else if (x->done != UINT_MAX)
298300 x->done--;
299
- spin_unlock_irqrestore(&x->wait.lock, flags);
301
+ raw_spin_unlock_irqrestore(&x->wait.lock, flags);
300302 return ret;
301303 }
302304 EXPORT_SYMBOL(try_wait_for_completion);
....@@ -322,8 +324,8 @@
322324 * otherwise we can end up freeing the completion before complete()
323325 * is done referencing it.
324326 */
325
- spin_lock_irqsave(&x->wait.lock, flags);
326
- spin_unlock_irqrestore(&x->wait.lock, flags);
327
+ raw_spin_lock_irqsave(&x->wait.lock, flags);
328
+ raw_spin_unlock_irqrestore(&x->wait.lock, flags);
327329 return true;
328330 }
329331 EXPORT_SYMBOL(completion_done);