[POWERPC] Fix hardware IRQ time accounting problem.
authorTony Breeds <tony@bakeyournoodle.com>
Tue, 4 Dec 2007 05:51:44 +0000 (16:51 +1100)
committerPaul Mackerras <paulus@samba.org>
Thu, 6 Dec 2007 05:08:59 +0000 (16:08 +1100)
The commit fa13a5a1f25f671d084d8884be96fc48d9b68275 (sched: restore
deterministic CPU accounting on powerpc), unconditionally calls
update_process_tick() in system context.  In the deterministic
accounting case this is the correct thing to do.  However, in the
non-deterministic accounting case we need to not do this, since doing
this results in the time accounted as hardware irq time being
artificially elevated.

Also this collapses 2 consecutive '#ifdef CONFIG_VIRT_CPU_ACCOUNTING'
checks in time.h into one for neatness.

Signed-off-by: Tony Breeds <tony@bakeyournoodle.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/kernel/process.c
include/asm-powerpc/time.h

index 41e13f4cc6e3da1e34ac662d4f558f5fa668fccd..b9d88374f14f07abe21e51367110e6c82129ba99 100644 (file)
@@ -350,7 +350,7 @@ struct task_struct *__switch_to(struct task_struct *prev,
        local_irq_save(flags);
 
        account_system_vtime(current);
-       account_process_tick(current, 0);
+       account_process_vtime(current);
        calculate_steal_time();
 
        last = _switch(old_thread, new_thread);
index 780f82642756cd4dc3e319687f944432cf297f15..ce5de6e0e6907915f0982da71afbcc8d9d6590dd 100644 (file)
@@ -237,18 +237,14 @@ struct cpu_usage {
 
 DECLARE_PER_CPU(struct cpu_usage, cpu_usage_array);
 
-#ifdef CONFIG_VIRT_CPU_ACCOUNTING
-extern void account_process_vtime(struct task_struct *tsk);
-#else
-#define account_process_vtime(tsk)             do { } while (0)
-#endif
-
 #if defined(CONFIG_VIRT_CPU_ACCOUNTING)
 extern void calculate_steal_time(void);
 extern void snapshot_timebases(void);
+#define account_process_vtime(tsk)             account_process_tick(tsk, 0)
 #else
 #define calculate_steal_time()                 do { } while (0)
 #define snapshot_timebases()                   do { } while (0)
+#define account_process_vtime(tsk)             do { } while (0)
 #endif
 
 extern void secondary_cpu_time_init(void);