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 for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 26 Feb 2020 09:14:25 +0530
From:   Pavan Kondeti <pkondeti@...eaurora.org>
To:     Parth Shah <parth@...ux.ibm.com>
Cc:     linux-kernel@...r.kernel.org, peterz@...radead.org,
        mingo@...hat.com, vincent.guittot@...aro.org,
        dietmar.eggemann@....com, qais.yousef@....com,
        chris.hyser@...cle.com, patrick.bellasi@...bug.net,
        valentin.schneider@....com, David.Laight@...LAB.COM,
        pjt@...gle.com, pavel@....cz, tj@...nel.org,
        dhaval.giani@...cle.com, qperret@...gle.com,
        tim.c.chen@...ux.intel.com
Subject: Re: [PATCH v4 3/4] sched: Allow sched_{get,set}attr to change
 latency_nice of the task

On Tue, Feb 25, 2020 at 08:33:53PM +0530, Parth Shah wrote:
> 
> 
> On 2/25/20 12:24 PM, Pavan Kondeti wrote:
> > On Mon, Feb 24, 2020 at 02:29:17PM +0530, Parth Shah wrote:
> > 
> > [...]
> > 
> >> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> >> index 65b6c00d6dac..e1dc536d4ca3 100644
> >> --- a/kernel/sched/core.c
> >> +++ b/kernel/sched/core.c
> >> @@ -4723,6 +4723,8 @@ static void __setscheduler_params(struct task_struct *p,
> >>  	p->rt_priority = attr->sched_priority;
> >>  	p->normal_prio = normal_prio(p);
> >>  	set_load_weight(p, true);
> >> +
> >> +	p->latency_nice = attr->sched_latency_nice;
> >>  }
> > 
> > We don't want this when SCHED_FLAG_LATENCY_NICE is not set in
> > attr->flags.
> > 
> > The user may pass SCHED_FLAG_KEEP_PARAMS | SCHED_FLAG_LATENCY_NICE to
> > change only latency nice value. So we have to update latency_nice
> > outside __setscheduler_params(), I think.
> 
> 
> AFAICT, passing SCHED_FLAG_KEEP_PARAMS with any other flag will prevent us
> from changing the latency_nice value because of the below code flow:
> 
> __sched_setscheduler()
> 	__setscheduler()
> 		if (attr->sched_flags & SCHED_FLAG_KEEP_PARAMS) return;
> 		__setscheduler_params()
> 

I thought the user space could set SCHED_FLAG_KEEP_ALL | SCHED_FLAG_LATENCY_NICE
and be able to modify the nice value alone. This does not work since we skip
setting the latency nice value when SCHED_FLAG_KEEP_PARAMS is set. So to
change the nice value alone, we first have to do getattr() and modify the nice
value and pass it to setattr(). It is not a big deal. so I will leave it here.

> whereas, one thing we still can do is add if condition when setting the
> value, i.e.,
> 
> @@ -4724,7 +4724,8 @@ static void __setscheduler_params(struct task_struct *p,
>         p->normal_prio = normal_prio(p);
>         set_load_weight(p, true);
> 
> -       p->latency_nice = attr->sched_latency_nice;
> +       if (attr->sched_flags & SCHED_FLAG_LATENCY_NICE)
> +               p->latency_nice = attr->sched_latency_nice;
>  }
> 

Yes, without this, we accidently override latency value when other attributes
are modified.

Thanks,
Pavan

-- 
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.

Powered by blists - more mailing lists