|
@@ -177,12 +177,13 @@ void *kthread_probe_data(struct task_struct *task)
|
|
|
|
|
|
static void __kthread_parkme(struct kthread *self)
|
|
static void __kthread_parkme(struct kthread *self)
|
|
{
|
|
{
|
|
- __set_current_state(TASK_PARKED);
|
|
|
|
- while (test_bit(KTHREAD_SHOULD_PARK, &self->flags)) {
|
|
|
|
|
|
+ for (;;) {
|
|
|
|
+ set_current_state(TASK_PARKED);
|
|
|
|
+ if (!test_bit(KTHREAD_SHOULD_PARK, &self->flags))
|
|
|
|
+ break;
|
|
if (!test_and_set_bit(KTHREAD_IS_PARKED, &self->flags))
|
|
if (!test_and_set_bit(KTHREAD_IS_PARKED, &self->flags))
|
|
complete(&self->parked);
|
|
complete(&self->parked);
|
|
schedule();
|
|
schedule();
|
|
- __set_current_state(TASK_PARKED);
|
|
|
|
}
|
|
}
|
|
clear_bit(KTHREAD_IS_PARKED, &self->flags);
|
|
clear_bit(KTHREAD_IS_PARKED, &self->flags);
|
|
__set_current_state(TASK_RUNNING);
|
|
__set_current_state(TASK_RUNNING);
|