diff options
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/kernel/process.c | 1 | ||||
-rw-r--r-- | arch/powerpc/kernel/time.c | 13 |
2 files changed, 11 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 51b201ddf9a1..fb7049c054c0 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/mqueue.h> | 33 | #include <linux/mqueue.h> |
34 | #include <linux/hardirq.h> | 34 | #include <linux/hardirq.h> |
35 | #include <linux/utsname.h> | 35 | #include <linux/utsname.h> |
36 | #include <linux/kernel_stat.h> | ||
36 | 37 | ||
37 | #include <asm/pgtable.h> | 38 | #include <asm/pgtable.h> |
38 | #include <asm/uaccess.h> | 39 | #include <asm/uaccess.h> |
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 92650ccad2e1..3be355c1cfa7 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
@@ -256,7 +256,10 @@ void account_system_vtime(struct task_struct *tsk) | |||
256 | delta += sys_time; | 256 | delta += sys_time; |
257 | get_paca()->system_time = 0; | 257 | get_paca()->system_time = 0; |
258 | } | 258 | } |
259 | account_system_time(tsk, 0, delta, deltascaled); | 259 | if (in_irq() || idle_task(smp_processor_id()) != tsk) |
260 | account_system_time(tsk, 0, delta, deltascaled); | ||
261 | else | ||
262 | account_idle_time(delta); | ||
260 | per_cpu(cputime_last_delta, smp_processor_id()) = delta; | 263 | per_cpu(cputime_last_delta, smp_processor_id()) = delta; |
261 | per_cpu(cputime_scaled_last_delta, smp_processor_id()) = deltascaled; | 264 | per_cpu(cputime_scaled_last_delta, smp_processor_id()) = deltascaled; |
262 | local_irq_restore(flags); | 265 | local_irq_restore(flags); |
@@ -335,8 +338,12 @@ void calculate_steal_time(void) | |||
335 | tb = mftb(); | 338 | tb = mftb(); |
336 | purr = mfspr(SPRN_PURR); | 339 | purr = mfspr(SPRN_PURR); |
337 | stolen = (tb - pme->tb) - (purr - pme->purr); | 340 | stolen = (tb - pme->tb) - (purr - pme->purr); |
338 | if (stolen > 0) | 341 | if (stolen > 0) { |
339 | account_steal_time(current, stolen); | 342 | if (idle_task(smp_processor_id()) != current) |
343 | account_steal_time(stolen); | ||
344 | else | ||
345 | account_idle_time(stolen); | ||
346 | } | ||
340 | pme->tb = tb; | 347 | pme->tb = tb; |
341 | pme->purr = purr; | 348 | pme->purr = purr; |
342 | } | 349 | } |