diff options
Diffstat (limited to 'kernel/kthread.c')
| -rw-r--r-- | kernel/kthread.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/kernel/kthread.c b/kernel/kthread.c index b6d216a92639..1c36deaae2f1 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c | |||
| @@ -59,6 +59,31 @@ int kthread_should_stop(void) | |||
| 59 | EXPORT_SYMBOL(kthread_should_stop); | 59 | EXPORT_SYMBOL(kthread_should_stop); |
| 60 | 60 | ||
| 61 | /** | 61 | /** |
| 62 | * kthread_freezable_should_stop - should this freezable kthread return now? | ||
| 63 | * @was_frozen: optional out parameter, indicates whether %current was frozen | ||
| 64 | * | ||
| 65 | * kthread_should_stop() for freezable kthreads, which will enter | ||
| 66 | * refrigerator if necessary. This function is safe from kthread_stop() / | ||
| 67 | * freezer deadlock and freezable kthreads should use this function instead | ||
| 68 | * of calling try_to_freeze() directly. | ||
| 69 | */ | ||
| 70 | bool kthread_freezable_should_stop(bool *was_frozen) | ||
| 71 | { | ||
| 72 | bool frozen = false; | ||
| 73 | |||
| 74 | might_sleep(); | ||
| 75 | |||
| 76 | if (unlikely(freezing(current))) | ||
| 77 | frozen = __refrigerator(true); | ||
| 78 | |||
| 79 | if (was_frozen) | ||
| 80 | *was_frozen = frozen; | ||
| 81 | |||
| 82 | return kthread_should_stop(); | ||
| 83 | } | ||
| 84 | EXPORT_SYMBOL_GPL(kthread_freezable_should_stop); | ||
| 85 | |||
| 86 | /** | ||
| 62 | * kthread_data - return data value specified on kthread creation | 87 | * kthread_data - return data value specified on kthread creation |
| 63 | * @task: kthread task in question | 88 | * @task: kthread task in question |
| 64 | * | 89 | * |
