sched/cputime, powerpc: Prepare accounting structure for cputime flush on tick
authorFrederic Weisbecker <fweisbec@gmail.com>
Thu, 5 Jan 2017 17:11:45 +0000 (18:11 +0100)
committerIngo Molnar <mingo@kernel.org>
Sat, 14 Jan 2017 08:54:12 +0000 (09:54 +0100)
In order to prepare for CONFIG_VIRT_CPU_ACCOUNTING_NATIVE=y to delay
cputime accounting to the tick, provide finegrained accumulators to
powerpc in order to store the cputime until flushing.

While at it, normalize the name of several fields according to common
cputime naming.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Stanislaw Gruszka <sgruszka@redhat.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Wanpeng Li <wanpeng.li@hotmail.com>
Link: http://lkml.kernel.org/r/1483636310-6557-6-git-send-email-fweisbec@gmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/powerpc/include/asm/accounting.h
arch/powerpc/kernel/asm-offsets.c
arch/powerpc/kernel/time.c
arch/powerpc/xmon/xmon.c

index c133246df4679e3780b381609d30ce2381fcaf14..3abcf98ed2e02bd37aa8a9e55ef8b26c1ea85e10 100644 (file)
 
 /* Stuff for accurate time accounting */
 struct cpu_accounting_data {
-       unsigned long user_time;        /* accumulated usermode TB ticks */
-       unsigned long system_time;      /* accumulated system TB ticks */
-       unsigned long user_time_scaled; /* accumulated usermode SPURR ticks */
+       /* Accumulated cputime values to flush on ticks*/
+       unsigned long utime;
+       unsigned long stime;
+       unsigned long utime_scaled;
+       unsigned long stime_scaled;
+       unsigned long gtime;
+       unsigned long hardirq_time;
+       unsigned long softirq_time;
+       unsigned long steal_time;
+       unsigned long idle_time;
+       /* Internal counters */
        unsigned long starttime;        /* TB value snapshot */
        unsigned long starttime_user;   /* TB value on exit to usermode */
        unsigned long startspurr;       /* SPURR value snapshot */
index 0601e6a7297c64ea4b2129011d32ae42a662ac07..e505319574caf24676cef3f18f3d31e0d7dc5c7e 100644 (file)
@@ -252,9 +252,9 @@ int main(void)
        DEFINE(ACCOUNT_STARTTIME_USER,
               offsetof(struct paca_struct, accounting.starttime_user));
        DEFINE(ACCOUNT_USER_TIME,
-              offsetof(struct paca_struct, accounting.user_time));
+              offsetof(struct paca_struct, accounting.utime));
        DEFINE(ACCOUNT_SYSTEM_TIME,
-              offsetof(struct paca_struct, accounting.system_time));
+              offsetof(struct paca_struct, accounting.stime));
        DEFINE(PACA_TRAP_SAVE, offsetof(struct paca_struct, trap_save));
        DEFINE(PACA_NAPSTATELOST, offsetof(struct paca_struct, nap_state_lost));
        DEFINE(PACA_SPRG_VDSO, offsetof(struct paca_struct, sprg_vdso));
@@ -265,9 +265,9 @@ int main(void)
        DEFINE(ACCOUNT_STARTTIME_USER,
               offsetof(struct thread_info, accounting.starttime_user));
        DEFINE(ACCOUNT_USER_TIME,
-              offsetof(struct thread_info, accounting.user_time));
+              offsetof(struct thread_info, accounting.utime));
        DEFINE(ACCOUNT_SYSTEM_TIME,
-              offsetof(struct thread_info, accounting.system_time));
+              offsetof(struct thread_info, accounting.stime));
 #endif
 #endif /* CONFIG_PPC64 */
 
index ce2165089318c141b283fbcc3b041eb0cce6cc7a..17a2cd1c6a75a465dbeaeddd7516d9604b5e1c73 100644 (file)
@@ -271,8 +271,8 @@ void accumulate_stolen_time(void)
 
        sst = scan_dispatch_log(acct->starttime_user);
        ust = scan_dispatch_log(acct->starttime);
-       acct->system_time -= sst;
-       acct->user_time -= ust;
+       acct->stime -= sst;
+       acct->utime -= ust;
        local_paca->stolen_time += ust + sst;
 
        local_paca->soft_enabled = save_soft_enabled;
@@ -281,10 +281,11 @@ void accumulate_stolen_time(void)
 static inline u64 calculate_stolen_time(u64 stop_tb)
 {
        u64 stolen = 0;
+       struct cpu_accounting_data *acct = &local_paca->accounting;
 
        if (get_paca()->dtl_ridx != be64_to_cpu(get_lppaca()->dtl_idx)) {
                stolen = scan_dispatch_log(stop_tb);
-               get_paca()->accounting.system_time -= stolen;
+               acct->stime -= stolen;
        }
 
        stolen += get_paca()->stolen_time;
@@ -316,17 +317,17 @@ static unsigned long vtime_delta(struct task_struct *tsk,
 
        now = mftb();
        nowscaled = read_spurr(now);
-       acct->system_time += now - acct->starttime;
+       acct->stime += now - acct->starttime;
        acct->starttime = now;
        deltascaled = nowscaled - acct->startspurr;
        acct->startspurr = nowscaled;
 
        *stolen = calculate_stolen_time(now);
 
-       delta = acct->system_time;
-       acct->system_time = 0;
-       udelta = acct->user_time - acct->utime_sspurr;
-       acct->utime_sspurr = acct->user_time;
+       delta = acct->stime;
+       acct->stime = 0;
+       udelta = acct->utime - acct->utime_sspurr;
+       acct->utime_sspurr = acct->utime;
 
        /*
         * Because we don't read the SPURR on every kernel entry/exit,
@@ -348,7 +349,7 @@ static unsigned long vtime_delta(struct task_struct *tsk,
                        *sys_scaled = deltascaled;
                }
        }
-       acct->user_time_scaled += user_scaled;
+       acct->utime_scaled += user_scaled;
 
        return delta;
 }
@@ -387,10 +388,10 @@ void vtime_account_user(struct task_struct *tsk)
        cputime_t utime, utimescaled;
        struct cpu_accounting_data *acct = get_accounting(tsk);
 
-       utime = acct->user_time;
-       utimescaled = acct->user_time_scaled;
-       acct->user_time = 0;
-       acct->user_time_scaled = 0;
+       utime = acct->utime;
+       utimescaled = acct->utime_scaled;
+       acct->utime = 0;
+       acct->utime_scaled = 0;
        acct->utime_sspurr = 0;
        account_user_time(tsk, utime);
        tsk->utimescaled += utimescaled;
@@ -408,8 +409,8 @@ void arch_vtime_task_switch(struct task_struct *prev)
 
        acct->starttime = get_accounting(prev)->starttime;
        acct->startspurr = get_accounting(prev)->startspurr;
-       acct->system_time = 0;
-       acct->user_time = 0;
+       acct->stime = 0;
+       acct->utime = 0;
 }
 #endif /* CONFIG_PPC32 */
 
index 9c0e17cf6886cdea0ad539f1c53ecbd7a66c502b..9f3b170d9e0bba8b039e92146991cd7235b0e841 100644 (file)
@@ -2287,9 +2287,9 @@ static void dump_one_paca(int cpu)
        DUMP(p, subcore_sibling_mask, "x");
 #endif
 
-       DUMP(p, accounting.user_time, "llx");
-       DUMP(p, accounting.system_time, "llx");
-       DUMP(p, accounting.user_time_scaled, "llx");
+       DUMP(p, accounting.utime, "llx");
+       DUMP(p, accounting.stime, "llx");
+       DUMP(p, accounting.utime_scaled, "llx");
        DUMP(p, accounting.starttime, "llx");
        DUMP(p, accounting.starttime_user, "llx");
        DUMP(p, accounting.startspurr, "llx");