Messages in this thread | | | Date | Mon, 27 Apr 2020 17:35:41 +0100 | From | Qais Yousef <> | Subject | Re: [PATCH 06/23] sched,psci: Convert to sched_set_fifo*() |
| |
On 04/22/20 13:27, Peter Zijlstra wrote: > Because SCHED_FIFO is a broken scheduler model (see previous patches) > take away the priority field, the kernel can't possibly make an > informed decision. > > Effectively changes prio from 99 to 50. > > XXX this thing is horrific, it basically open-codes a stop-machine and > idle. > > Cc: daniel.lezcano@linaro.org > Cc: sudeep.holla@arm.com > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> > Reviewed-by: Ingo Molnar <mingo@kernel.org> > --- > drivers/firmware/psci/psci_checker.c | 11 ++--------- > 1 file changed, 2 insertions(+), 9 deletions(-) > > --- a/drivers/firmware/psci/psci_checker.c > +++ b/drivers/firmware/psci/psci_checker.c > @@ -272,7 +272,6 @@ static int suspend_test_thread(void *arg > { > int cpu = (long)arg; > int i, nb_suspend = 0, nb_shallow_sleep = 0, nb_err = 0; > - struct sched_param sched_priority = { .sched_priority = MAX_RT_PRIO-1 }; > struct cpuidle_device *dev; > struct cpuidle_driver *drv; > /* No need for an actual callback, we just want to wake up the CPU. */ > @@ -282,9 +281,8 @@ static int suspend_test_thread(void *arg > wait_for_completion(&suspend_threads_started); > > /* Set maximum priority to preempt all other threads on this CPU. */ > - if (sched_setscheduler_nocheck(current, SCHED_FIFO, &sched_priority)) > - pr_warn("Failed to set suspend thread scheduler on CPU %d\n", > - cpu); > + if (sched_set_fifo(current)) > + pr_warn("Failed to set suspend thread scheduler on CPU %d\n", cpu); > > dev = this_cpu_read(cpuidle_devices); > drv = cpuidle_get_cpu_driver(dev); > @@ -349,11 +347,6 @@ static int suspend_test_thread(void *arg > if (atomic_dec_return_relaxed(&nb_active_threads) == 0) > complete(&suspend_threads_done); > > - /* Give up on RT scheduling and wait for termination. */ > - sched_priority.sched_priority = 0; > - if (sched_setscheduler_nocheck(current, SCHED_NORMAL, &sched_priority)) > - pr_warn("Failed to set suspend thread scheduler on CPU %d\n", > - cpu);
No need for sched_set_normal() here before the busy loop?
Thanks
-- Qais Yousef
> for (;;) { > /* Needs to be set first to avoid missing a wakeup. */ > set_current_state(TASK_INTERRUPTIBLE); > >
| |