lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<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

Powered by Openwall GNU/*/Linux Powered by OpenVZ