diff options
author | Arve Hjønnevåg <arve@android.com> | 2023-06-02 21:23:46 +0000 |
---|---|---|
committer | Peter Zijlstra <peterz@infradead.org> | 2023-06-16 17:08:01 +0200 |
commit | ef73d6a4ef0b35524125c3cfc6deafc26a0c966a (patch) | |
tree | c7c854cb2d8ed6157dc87733d955a36947e17fd8 /kernel/kthread.c | |
parent | 0cce0fde499a92c726cd2e24f7763644f7c9f971 (diff) |
sched/wait: Fix a kthread_park race with wait_woken()
kthread_park and wait_woken have a similar race that
kthread_stop and wait_woken used to have before it was fixed in
commit cb6538e740d7 ("sched/wait: Fix a kthread race with
wait_woken()"). Extend that fix to also cover kthread_park.
[jstultz: Made changes suggested by Peter to optimize
memory loads]
Signed-off-by: Arve Hjønnevåg <arve@android.com>
Signed-off-by: John Stultz <jstultz@google.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Valentin Schneider <vschneid@redhat.com>
Link: https://lore.kernel.org/r/20230602212350.535358-1-jstultz@google.com
Diffstat (limited to 'kernel/kthread.c')
-rw-r--r-- | kernel/kthread.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/kthread.c b/kernel/kthread.c index 490792b1066e..07a057086d26 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -182,6 +182,16 @@ bool kthread_should_park(void) } EXPORT_SYMBOL_GPL(kthread_should_park); +bool kthread_should_stop_or_park(void) +{ + struct kthread *kthread = __to_kthread(current); + + if (!kthread) + return false; + + return kthread->flags & (BIT(KTHREAD_SHOULD_STOP) | BIT(KTHREAD_SHOULD_PARK)); +} + /** * kthread_freezable_should_stop - should this freezable kthread return now? * @was_frozen: optional out parameter, indicates whether %current was frozen |