[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200427163540.45wrw5kaakxzrokj@e107158-lin>
Date: Mon, 27 Apr 2020 17:35:41 +0100
From: Qais Yousef <qais.yousef@....com>
To: Peter Zijlstra <peterz@...radead.org>
Cc: mingo@...nel.org, linux-kernel@...r.kernel.org, tglx@...utronix.de,
rostedt@...dmis.org, juri.lelli@...hat.com,
vincent.guittot@...aro.org, dietmar.eggemann@....com,
bsegall@...gle.com, mgorman@...e.de, daniel.lezcano@...aro.org,
sudeep.holla@....com
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@...aro.org
> Cc: sudeep.holla@....com
> Signed-off-by: Peter Zijlstra (Intel) <peterz@...radead.org>
> Reviewed-by: Ingo Molnar <mingo@...nel.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);
>
>
Powered by blists - more mailing lists