Re: [PATCH 06/23] sched,psci: Convert to sched_set_fifo*()

From: Qais Yousef
Date: Mon Apr 27 2020 - 12:35:48 EST


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@xxxxxxxxxx
> Cc: sudeep.holla@xxxxxxx
> Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
> Reviewed-by: Ingo Molnar <mingo@xxxxxxxxxx>
> ---
> 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);
>
>