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]
Date:   Wed, 20 Nov 2019 16:00:17 +0100
From:   Frederic Weisbecker <frederic@...nel.org>
To:     Ingo Molnar <mingo@...nel.org>
Cc:     Peter Zijlstra <peterz@...radead.org>,
        LKML <linux-kernel@...r.kernel.org>,
        Jacek Anaszewski <jacek.anaszewski@...il.com>,
        Wanpeng Li <wanpengli@...cent.com>,
        "Rafael J . Wysocki" <rjw@...ysocki.net>,
        Benjamin Herrenschmidt <benh@...nel.crashing.org>,
        Rik van Riel <riel@...riel.com>,
        Thomas Gleixner <tglx@...utronix.de>,
        Yauheni Kaliuta <yauheni.kaliuta@...hat.com>,
        Viresh Kumar <viresh.kumar@...aro.org>,
        Pavel Machek <pavel@....cz>
Subject: Re: [PATCH 2/6] sched/vtime: Bring all-in-one kcpustat accessor for
 vtime fields

On Wed, Nov 20, 2019 at 01:04:49PM +0100, Ingo Molnar wrote:
> > +static int vtime_state_check(struct vtime *vtime, int cpu)
> > +{
> > +	/*
> > +	 * We raced against context switch, fetch the
> > +	 * kcpustat task again.
> > +	 */
> 
> s/against context switch
>  /against a context switch

Ok.

> 
> > +void kcpustat_cputime(struct kernel_cpustat *kcpustat, int cpu,
> > +		      u64 *user, u64 *nice, u64 *system,
> > +		      u64 *guest, u64 *guest_nice)
> > +{
> > +	u64 *cpustat = kcpustat->cpustat;
> > +	struct rq *rq;
> > +	int err;
> > +
> > +	if (!vtime_accounting_enabled_cpu(cpu)) {
> > +		kcpustat_cputime_raw(cpustat, user, nice,
> > +				     system, guest, guest_nice);
> > +		return;
> > +	}
> > +
> > +	rq = cpu_rq(cpu);
> > +
> > +	for (;;) {
> > +		struct task_struct *curr;
> > +
> > +		rcu_read_lock();
> > +		curr = rcu_dereference(rq->curr);
> > +		if (WARN_ON_ONCE(!curr)) {
> > +			rcu_read_unlock();
> > +			kcpustat_cputime_raw(cpustat, user, nice,
> > +					     system, guest, guest_nice);
> > +			return;
> > +		}
> > +
> > +		err = kcpustat_cputime_vtime(cpustat, curr, cpu, user,
> > +					     nice, system, guest, guest_nice);
> > +		rcu_read_unlock();
> > +
> > +		if (!err)
> > +			return;
> > +
> > +		cpu_relax();
> > +	}
> > +}
> > +EXPORT_SYMBOL_GPL(kcpustat_cputime);
> 
> I'm wondering whether it's worth introducing a helper structure for this 
> train of parameters: user, nice, system, guest, guest_nice?
> 
> We also have similar constructs in other places:
> 
> +               u64 cpu_user, cpu_nice, cpu_sys, cpu_guest, cpu_guest_nice;
> 
> But more broadly, what do we gain by passing along a quartet of pointers, 
> while we could also just use a 'struct kernel_cpustat' and store the 
> values there naturally?
> 
> Yes, it's larger, because it also has 5 other fields - but we lose much 
> of the space savings due to always passing along the 4 pointers already.
> 
> So I really think the parameter passing should be organized better here.

Yeah I've been thinking about that too but I was worried about the stack use.
It's probably not a big worry eventually. I'll do that for the next series.

> This probably affects similar cpustat functions as well.

Only this one fortunately :-)

Thanks.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ