diff options
| author | 2020-04-21 09:36:03 -0700 | |
|---|---|---|
| committer | 2020-04-21 09:36:03 -0700 | |
| commit | 175ae3ad59ab3459652bd2ae3bbc1785aeba1bf3 (patch) | |
| tree | c7fd682de61e3c2a6cc3ba0e8881b99fafdf969c /kernel/kthread.c | |
| parent | ARM: dts: OMAP3: disable RNG on N950/N9 (diff) | |
| parent | ARM: dts: dra7: Fix bus_dma_limit for PCIe (diff) | |
Merge branch 'fixes-v5.7' into fixes
Diffstat (limited to 'kernel/kthread.c')
| -rw-r--r-- | kernel/kthread.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/kernel/kthread.c b/kernel/kthread.c index b262f47046ca..bfbfa481be3a 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -199,8 +199,15 @@ static void __kthread_parkme(struct kthread *self) if (!test_bit(KTHREAD_SHOULD_PARK, &self->flags)) break; + /* + * Thread is going to call schedule(), do not preempt it, + * or the caller of kthread_park() may spend more time in + * wait_task_inactive(). + */ + preempt_disable(); complete(&self->parked); - schedule(); + schedule_preempt_disabled(); + preempt_enable(); } __set_current_state(TASK_RUNNING); } @@ -245,8 +252,14 @@ static int kthread(void *_create) /* OK, tell user we're spawned, wait for stop or wakeup */ __set_current_state(TASK_UNINTERRUPTIBLE); create->result = current; + /* + * Thread is going to call schedule(), do not preempt it, + * or the creator may spend more time in wait_task_inactive(). + */ + preempt_disable(); complete(done); - schedule(); + schedule_preempt_disabled(); + preempt_enable(); ret = -EINTR; if (!test_bit(KTHREAD_SHOULD_STOP, &self->flags)) { |
