diff options
Diffstat (limited to 'include/linux/vtime.h')
| -rw-r--r-- | include/linux/vtime.h | 25 | 
1 files changed, 25 insertions, 0 deletions
diff --git a/include/linux/vtime.h b/include/linux/vtime.h index b9fc4f9ab47..c35c02223da 100644 --- a/include/linux/vtime.h +++ b/include/linux/vtime.h @@ -21,4 +21,29 @@ static inline void vtime_account(struct task_struct *tsk)  extern void vtime_account(struct task_struct *tsk);  #endif +static inline void vtime_account_irq_enter(struct task_struct *tsk) +{ +	/* +	 * Hardirq can interrupt idle task anytime. So we need vtime_account() +	 * that performs the idle check in CONFIG_VIRT_CPU_ACCOUNTING. +	 * Softirq can also interrupt idle task directly if it calls +	 * local_bh_enable(). Such case probably don't exist but we never know. +	 * Ksoftirqd is not concerned because idle time is flushed on context +	 * switch. Softirqs in the end of hardirqs are also not a problem because +	 * the idle time is flushed on hardirq time already. +	 */ +	vtime_account(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 +} +  #endif /* _LINUX_KERNEL_VTIME_H */  |