From e79f31f668aa74ab10c591e7b36a98f4bd1aae11 Mon Sep 17 00:00:00 2001 From: Yi Tao Date: Fri, 8 Jan 2021 10:53:08 +0800 Subject: [PATCH 2533/2944] alinux: cpuacct: extract init and free to #31531504 To use cache for cpuacct, it is necessary to provide init and free function. so extract init from css_alloc and free from css_free Signed-off-by: Yi Tao Suggested-by: Shanpei Chen Acked-by: Michael Wang --- kernel/sched/cpuacct.c | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/kernel/sched/cpuacct.c b/kernel/sched/cpuacct.c index 13783c1..d079a4f 100644 --- a/kernel/sched/cpuacct.c +++ b/kernel/sched/cpuacct.c @@ -295,12 +295,34 @@ void cpuacct_update_latency(struct sched_entity *se, u64 delta) } #endif +static void cpuacct_free(void **ptr) +{ + struct cpuacct *ca = *ptr; + + free_percpu(ca->cpustat); + free_percpu(ca->cpuusage); +#ifdef CONFIG_SCHED_SLI + free_percpu(ca->alistats); + free_percpu(ca->lat_stat_cpu); +#endif + kfree(ca); +} + +static void cpuacct_init(struct cpuacct *ca) +{ + int i; + + for_each_possible_cpu(i) { + prev_cputime_init(&per_cpu_ptr(ca->cpuusage, i)->prev_cputime1); + prev_cputime_init(&per_cpu_ptr(ca->cpuusage, i)->prev_cputime2); + } +} + /* Create a new CPU accounting group */ static struct cgroup_subsys_state * cpuacct_css_alloc(struct cgroup_subsys_state *parent_css) { struct cpuacct *ca; - int i; if (!parent_css) return &root_cpuacct.css; @@ -327,10 +349,7 @@ void cpuacct_update_latency(struct sched_entity *se, u64 delta) goto out_free_alistats; #endif - for_each_possible_cpu(i) { - prev_cputime_init(&per_cpu_ptr(ca->cpuusage, i)->prev_cputime1); - prev_cputime_init(&per_cpu_ptr(ca->cpuusage, i)->prev_cputime2); - } + cpuacct_init(ca); return &ca->css; @@ -353,13 +372,7 @@ static void cpuacct_css_free(struct cgroup_subsys_state *css) { struct cpuacct *ca = css_ca(css); - free_percpu(ca->cpustat); - free_percpu(ca->cpuusage); -#ifdef CONFIG_SCHED_SLI - free_percpu(ca->alistats); - free_percpu(ca->lat_stat_cpu); -#endif - kfree(ca); + cpuacct_free((void **)&ca); } static u64 cpuacct_cpuusage_read(struct cpuacct *ca, int cpu, -- 1.8.3.1