diff options
| author | Frederic Weisbecker <fweisbec@gmail.com> | 2012-10-06 05:23:22 +0200 | 
|---|---|---|
| committer | Frederic Weisbecker <fweisbec@gmail.com> | 2012-10-29 21:31:32 +0100 | 
| commit | 3e1df4f506836e6bea1ab61cf88c75c8b1840643 (patch) | |
| tree | 58be18cf3dce7a407c84ab2532e92bdb8b7ee067 /include/linux/vtime.h | |
| parent | fa5058f3b63153e0147ef65bcdb3a4ee63581346 (diff) | |
| download | olio-linux-3.10-3e1df4f506836e6bea1ab61cf88c75c8b1840643.tar.xz olio-linux-3.10-3e1df4f506836e6bea1ab61cf88c75c8b1840643.zip  | |
cputime: Separate irqtime accounting from generic vtime
vtime_account() doesn't have the same role in
CONFIG_VIRT_CPU_ACCOUNTING and CONFIG_IRQ_TIME_ACCOUNTING.
In the first case it handles time accounting in any context. In
the second case it only handles irq time accounting.
So when vtime_account() is called from outside vtime_account_irq_*()
this call is pointless to CONFIG_IRQ_TIME_ACCOUNTING.
To fix the confusion, change vtime_account() to irqtime_account_irq()
in CONFIG_IRQ_TIME_ACCOUNTING. This way we ensure future account_vtime()
calls won't waste useless cycles in the irqtime APIs.
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
Diffstat (limited to 'include/linux/vtime.h')
| -rw-r--r-- | include/linux/vtime.h | 18 | 
1 files changed, 8 insertions, 10 deletions
diff --git a/include/linux/vtime.h b/include/linux/vtime.h index c35c02223da..0c2a2d30302 100644 --- a/include/linux/vtime.h +++ b/include/linux/vtime.h @@ -8,17 +8,18 @@ extern void vtime_task_switch(struct task_struct *prev);  extern void __vtime_account_system(struct task_struct *tsk);  extern void vtime_account_system(struct task_struct *tsk);  extern void __vtime_account_idle(struct task_struct *tsk); +extern void vtime_account(struct task_struct *tsk);  #else  static inline void vtime_task_switch(struct task_struct *prev) { } +static inline void __vtime_account_system(struct task_struct *tsk) { }  static inline void vtime_account_system(struct task_struct *tsk) { } +static inline void vtime_account(struct task_struct *tsk) { }  #endif -#if !defined(CONFIG_VIRT_CPU_ACCOUNTING) && !defined(CONFIG_IRQ_TIME_ACCOUNTING) -static inline void vtime_account(struct task_struct *tsk) -{ -} +#ifdef CONFIG_IRQ_TIME_ACCOUNTING +extern void irqtime_account_irq(struct task_struct *tsk);  #else -extern void vtime_account(struct task_struct *tsk); +static inline void irqtime_account_irq(struct task_struct *tsk) { }  #endif  static inline void vtime_account_irq_enter(struct task_struct *tsk) @@ -33,17 +34,14 @@ static inline void vtime_account_irq_enter(struct task_struct *tsk)  	 * the idle time is flushed on hardirq time already.  	 */  	vtime_account(tsk); +	irqtime_account_irq(tsk);  }  static inline void vtime_account_irq_exit(struct task_struct *tsk)  { -#ifdef CONFIG_VIRT_CPU_ACCOUNTING  	/* On hard|softirq exit we always account to hard|softirq cputime */  	__vtime_account_system(tsk); -#endif -#ifdef CONFIG_IRQ_TIME_ACCOUNTING -	vtime_account(tsk); -#endif +	irqtime_account_irq(tsk);  }  #endif /* _LINUX_KERNEL_VTIME_H */  |