ACK: [SRU][Xenial][PATCH] sched/cpuacct: Simplify the cpuacct code

Kleber Souza kleber.souza at canonical.com
Thu Jun 7 19:34:17 UTC 2018


On 06/06/18 19:58, Gavin Guo wrote:
> From: Zhao Lei <zhaolei at cn.fujitsu.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1775326
> 
>  - Use for() instead of while() loop in some functions
>    to make the code simpler.
> 
>  - Use this_cpu_ptr() instead of per_cpu_ptr() to make the code
>    cleaner and a bit faster.
> 
> Suggested-by: Peter Zijlstra <peterz at infradead.org>
> Signed-off-by: Zhao Lei <zhaolei at cn.fujitsu.com>
> Signed-off-by: Peter Zijlstra (Intel) <peterz at infradead.org>
> Cc: Linus Torvalds <torvalds at linux-foundation.org>
> Cc: Tejun Heo <htejun at gmail.com>
> Cc: Thomas Gleixner <tglx at linutronix.de>
> Link: http://lkml.kernel.org/r/d8a7ef9592f55224630cb26dea239f05b6398a4e.1458187654.git.zhaolei@cn.fujitsu.com
> Signed-off-by: Ingo Molnar <mingo at kernel.org>
> (cherry picked from commit 73e6aafd9ea81498d31361f01db84a0118da2d1c)
> Signed-off-by: Gavin Guo <gavin.guo at canonical.com>

Acked-by: Kleber Sacilotto de Souza <kleber.souza at canonical.com>

> ---
>  kernel/sched/cpuacct.c | 28 +++++-----------------------
>  kernel/sched/cpuacct.h |  4 ++--
>  2 files changed, 7 insertions(+), 25 deletions(-)
> 
> diff --git a/kernel/sched/cpuacct.c b/kernel/sched/cpuacct.c
> index dd7cbb55bbf2..e14cfd0e8f20 100644
> --- a/kernel/sched/cpuacct.c
> +++ b/kernel/sched/cpuacct.c
> @@ -235,23 +235,10 @@ static struct cftype files[] = {
>  void cpuacct_charge(struct task_struct *tsk, u64 cputime)
>  {
>  	struct cpuacct *ca;
> -	int cpu;
> -
> -	cpu = task_cpu(tsk);
>  
>  	rcu_read_lock();
> -
> -	ca = task_ca(tsk);
> -
> -	while (true) {
> -		u64 *cpuusage = per_cpu_ptr(ca->cpuusage, cpu);
> -		*cpuusage += cputime;
> -
> -		ca = parent_ca(ca);
> -		if (!ca)
> -			break;
> -	}
> -
> +	for (ca = task_ca(tsk); ca; ca = parent_ca(ca))
> +		*this_cpu_ptr(ca->cpuusage) += cputime;
>  	rcu_read_unlock();
>  }
>  
> @@ -260,18 +247,13 @@ void cpuacct_charge(struct task_struct *tsk, u64 cputime)
>   *
>   * Note: it's the caller that updates the account of the root cgroup.
>   */
> -void cpuacct_account_field(struct task_struct *p, int index, u64 val)
> +void cpuacct_account_field(struct task_struct *tsk, int index, u64 val)
>  {
> -	struct kernel_cpustat *kcpustat;
>  	struct cpuacct *ca;
>  
>  	rcu_read_lock();
> -	ca = task_ca(p);
> -	while (ca != &root_cpuacct) {
> -		kcpustat = this_cpu_ptr(ca->cpustat);
> -		kcpustat->cpustat[index] += val;
> -		ca = parent_ca(ca);
> -	}
> +	for (ca = task_ca(tsk); ca != &root_cpuacct; ca = parent_ca(ca))
> +		this_cpu_ptr(ca->cpustat)->cpustat[index] += val;
>  	rcu_read_unlock();
>  }
>  
> diff --git a/kernel/sched/cpuacct.h b/kernel/sched/cpuacct.h
> index ed605624a5e7..ba72807c73d4 100644
> --- a/kernel/sched/cpuacct.h
> +++ b/kernel/sched/cpuacct.h
> @@ -1,7 +1,7 @@
>  #ifdef CONFIG_CGROUP_CPUACCT
>  
>  extern void cpuacct_charge(struct task_struct *tsk, u64 cputime);
> -extern void cpuacct_account_field(struct task_struct *p, int index, u64 val);
> +extern void cpuacct_account_field(struct task_struct *tsk, int index, u64 val);
>  
>  #else
>  
> @@ -10,7 +10,7 @@ static inline void cpuacct_charge(struct task_struct *tsk, u64 cputime)
>  }
>  
>  static inline void
> -cpuacct_account_field(struct task_struct *p, int index, u64 val)
> +cpuacct_account_field(struct task_struct *tsk, int index, u64 val)
>  {
>  }
>  
> 




More information about the kernel-team mailing list