sched/cputime, powerpc: Prepare accounting structure for cputime flush on tick
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>
This commit is contained in:
committed by
Ingo Molnar
parent
1213699ab4
commit
8c8b73c481
@@ -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 */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user