[PATCH] Fix hardware IRQ time accounting problem.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

The commit fa13a5a1f25f671d084d8884be96fc48d9b68275, 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, and results in the time accounted as
hardware irq time being artificially elevated.

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

Signed-off-by: Tony Breeds <tony@xxxxxxxxxxxxxxxxxx>
The problem was seen and reported by Johannes Berg  and Frederik Himpe.
Paul, I think this is good for 2.6.24.

 arch/powerpc/kernel/process.c |    2 +-
 include/asm-powerpc/time.h    |   12 ++++--------
 2 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 41e13f4..b9d8837 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -350,7 +350,7 @@ struct task_struct *__switch_to(struct task_struct *prev,
-	account_process_tick(current, 0);
+	account_process_vtime(current);
 	last = _switch(old_thread, new_thread);
diff --git a/include/asm-powerpc/time.h b/include/asm-powerpc/time.h
index 780f826..8a2c8db 100644
--- a/include/asm-powerpc/time.h
+++ b/include/asm-powerpc/time.h
@@ -237,18 +237,14 @@ struct cpu_usage {
 DECLARE_PER_CPU(struct cpu_usage, cpu_usage_array);
-extern void account_process_vtime(struct task_struct *tsk);
-#define account_process_vtime(tsk)		do { } while (0)
 extern void calculate_steal_time(void);
 extern void snapshot_timebases(void);
+#define account_process_vtime(tsk)	account_process_tick(current, 0);
-#define calculate_steal_time()			do { } while (0)
-#define snapshot_timebases()			do { } while (0)
+#define calculate_steal_time()		do { } while (0)
+#define snapshot_timebases()		do { } while (0)
+#define account_process_vtime(tsk)	do { } while (0)
 extern void secondary_cpu_time_init(void);

Yours Tony ||
  Jan 28 - Feb 02 2008 The Australian Linux Technical Conference!

SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell.  From the desktop to the data center, Linux is going
mainstream.  Let it simplify your IT future.
To unsubscribe, use the last form field at:

[Home]     [Video for Linux]     [Photo]     [Yosemite Forum]     [Yosemite Photos]    [Video Projectors]     [PDAs]     [Hacking TiVo]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Devices]     [Big List of Linux Books]     [Free Dating]

  Powered by Linux