diff options
Diffstat (limited to 'include/linux/vtime.h')
| -rw-r--r-- | include/linux/vtime.h | 59 | 
1 files changed, 40 insertions, 19 deletions
diff --git a/include/linux/vtime.h b/include/linux/vtime.h index ae30ab58431..71a5782d8c5 100644 --- a/include/linux/vtime.h +++ b/include/linux/vtime.h @@ -6,15 +6,46 @@ struct task_struct;  #ifdef CONFIG_VIRT_CPU_ACCOUNTING  extern void vtime_task_switch(struct task_struct *prev);  extern void vtime_account_system(struct task_struct *tsk); -extern void vtime_account_system_irqsafe(struct task_struct *tsk);  extern void vtime_account_idle(struct task_struct *tsk);  extern void vtime_account_user(struct task_struct *tsk); -extern void vtime_account(struct task_struct *tsk); -#else +extern void vtime_account_irq_enter(struct task_struct *tsk); + +#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE +static inline bool vtime_accounting_enabled(void) { return true; } +#endif + +#else /* !CONFIG_VIRT_CPU_ACCOUNTING */ +  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_irqsafe(struct task_struct *tsk) { } -static inline void vtime_account(struct task_struct *tsk) { } +static inline void vtime_account_user(struct task_struct *tsk) { } +static inline void vtime_account_irq_enter(struct task_struct *tsk) { } +static inline bool vtime_accounting_enabled(void) { return false; } +#endif + +#ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN +extern void arch_vtime_task_switch(struct task_struct *tsk); +extern void vtime_account_irq_exit(struct task_struct *tsk); +extern bool vtime_accounting_enabled(void); +extern void vtime_user_enter(struct task_struct *tsk); +static inline void vtime_user_exit(struct task_struct *tsk) +{ +	vtime_account_user(tsk); +} +extern void vtime_guest_enter(struct task_struct *tsk); +extern void vtime_guest_exit(struct task_struct *tsk); +extern void vtime_init_idle(struct task_struct *tsk); +#else +static inline void vtime_account_irq_exit(struct task_struct *tsk) +{ +	/* On hard|softirq exit we always account to hard|softirq cputime */ +	vtime_account_system(tsk); +} +static inline void vtime_user_enter(struct task_struct *tsk) { } +static inline void vtime_user_exit(struct task_struct *tsk) { } +static inline void vtime_guest_enter(struct task_struct *tsk) { } +static inline void vtime_guest_exit(struct task_struct *tsk) { } +static inline void vtime_init_idle(struct task_struct *tsk) { }  #endif  #ifdef CONFIG_IRQ_TIME_ACCOUNTING @@ -23,25 +54,15 @@ extern void irqtime_account_irq(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) +static inline void account_irq_enter_time(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); +	vtime_account_irq_enter(tsk);  	irqtime_account_irq(tsk);  } -static inline void vtime_account_irq_exit(struct task_struct *tsk) +static inline void account_irq_exit_time(struct task_struct *tsk)  { -	/* On hard|softirq exit we always account to hard|softirq cputime */ -	vtime_account_system(tsk); +	vtime_account_irq_exit(tsk);  	irqtime_account_irq(tsk);  }  |