diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-12-31 09:11:37 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-12-31 09:11:46 -0500 |
commit | 457533a7d3402d1d91fbc125c8bd1bd16dcd3cd4 (patch) | |
tree | cbe69310a66176dea2a9e7bd201db95efe4a2890 /kernel/time/tick-sched.c | |
parent | 6a94cb73064c952255336cc57731904174b2c58f (diff) |
[PATCH] fix scaled & unscaled cputime accounting
The utimescaled / stimescaled fields in the task structure and the
global cpustat should be set on all architectures. On s390 the calls
to account_user_time_scaled and account_system_time_scaled never have
been added. In addition system time that is accounted as guest time
to the user time of a process is accounted to the scaled system time
instead of the scaled user time.
To fix the bugs and to prevent future forgetfulness this patch merges
account_system_time_scaled into account_system_time and
account_user_time_scaled into account_user_time.
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Jeremy Fitzhardinge <jeremy@xensource.com>
Cc: Chris Wright <chrisw@sous-sol.org>
Cc: Michael Neuling <mikey@neuling.org>
Acked-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'kernel/time/tick-sched.c')
-rw-r--r-- | kernel/time/tick-sched.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index 8f3fc2582d38..1f2fce2479fe 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c | |||
@@ -420,6 +420,7 @@ void tick_nohz_restart_sched_tick(void) | |||
420 | int cpu = smp_processor_id(); | 420 | int cpu = smp_processor_id(); |
421 | struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu); | 421 | struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu); |
422 | unsigned long ticks; | 422 | unsigned long ticks; |
423 | cputime_t cputime; | ||
423 | ktime_t now; | 424 | ktime_t now; |
424 | 425 | ||
425 | local_irq_disable(); | 426 | local_irq_disable(); |
@@ -452,8 +453,8 @@ void tick_nohz_restart_sched_tick(void) | |||
452 | */ | 453 | */ |
453 | if (ticks && ticks < LONG_MAX) { | 454 | if (ticks && ticks < LONG_MAX) { |
454 | add_preempt_count(HARDIRQ_OFFSET); | 455 | add_preempt_count(HARDIRQ_OFFSET); |
455 | account_system_time(current, HARDIRQ_OFFSET, | 456 | cputime = jiffies_to_cputime(ticks); |
456 | jiffies_to_cputime(ticks)); | 457 | account_system_time(current, HARDIRQ_OFFSET, cputime, cputime); |
457 | sub_preempt_count(HARDIRQ_OFFSET); | 458 | sub_preempt_count(HARDIRQ_OFFSET); |
458 | } | 459 | } |
459 | 460 | ||