diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 1ec9d1f..505e08f 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -3144,8 +3144,10 @@ static void __sched __schedule(void) * If a worker went to sleep, notify and ask workqueue * whether it wants to wake up a task to maintain * concurrency. + * Only call wake up if prev isn't blocked on a sleeping + * spin lock. */ - if (prev->flags & PF_WQ_WORKER) { + if (prev->flags & PF_WQ_WORKER && !prev->saved_state) { struct task_struct *to_wakeup; to_wakeup = wq_worker_sleeping(prev, cpu); diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 99f943b..ea93e56 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -776,7 +776,7 @@ static void timekeeping_resume(void) __timekeeping_inject_sleeptime(tk, &ts); } /* re-base the last cycle value */ - tk->clock->cycle_last = tk->clock->read(tk->clock); + tk->cycle_last = tk->clock->cycle_last = tk->clock->read(tk->clock); tk->ntp_error = 0; timekeeping_suspended = 0; timekeeping_update(tk, false, true); diff --git a/localversion-rt b/localversion-rt index 0454789..700c857 100644 --- a/localversion-rt +++ b/localversion-rt @@ -1 +1 @@ --rt7 +-rt8