linux/include/linux/vtime.h
<<
>>
Prefs
   1#ifndef _LINUX_KERNEL_VTIME_H
   2#define _LINUX_KERNEL_VTIME_H
   3
   4#include <linux/context_tracking_state.h>
   5#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
   6#include <asm/vtime.h>
   7#endif
   8
   9
  10struct task_struct;
  11
  12/*
  13 * vtime_accounting_enabled() definitions/declarations
  14 */
  15#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
  16static inline bool vtime_accounting_enabled(void) { return true; }
  17#endif /* CONFIG_VIRT_CPU_ACCOUNTING_NATIVE */
  18
  19#ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
  20static inline bool vtime_accounting_enabled(void)
  21{
  22        if (context_tracking_is_enabled()) {
  23                if (context_tracking_cpu_is_enabled())
  24                        return true;
  25        }
  26
  27        return false;
  28}
  29#endif /* CONFIG_VIRT_CPU_ACCOUNTING_GEN */
  30
  31#ifndef CONFIG_VIRT_CPU_ACCOUNTING
  32static inline bool vtime_accounting_enabled(void) { return false; }
  33#endif /* !CONFIG_VIRT_CPU_ACCOUNTING */
  34
  35
  36/*
  37 * Common vtime APIs
  38 */
  39#ifdef CONFIG_VIRT_CPU_ACCOUNTING
  40
  41#ifdef __ARCH_HAS_VTIME_TASK_SWITCH
  42extern void vtime_task_switch(struct task_struct *prev);
  43#else
  44extern void vtime_common_task_switch(struct task_struct *prev);
  45static inline void vtime_task_switch(struct task_struct *prev)
  46{
  47        if (vtime_accounting_enabled())
  48                vtime_common_task_switch(prev);
  49}
  50#endif /* __ARCH_HAS_VTIME_TASK_SWITCH */
  51
  52extern void vtime_account_system(struct task_struct *tsk);
  53extern void vtime_account_idle(struct task_struct *tsk);
  54extern void vtime_account_user(struct task_struct *tsk);
  55
  56#ifdef __ARCH_HAS_VTIME_ACCOUNT
  57extern void vtime_account_irq_enter(struct task_struct *tsk);
  58#else
  59extern void vtime_common_account_irq_enter(struct task_struct *tsk);
  60static inline void vtime_account_irq_enter(struct task_struct *tsk)
  61{
  62        if (vtime_accounting_enabled())
  63                vtime_common_account_irq_enter(tsk);
  64}
  65#endif /* __ARCH_HAS_VTIME_ACCOUNT */
  66
  67#else /* !CONFIG_VIRT_CPU_ACCOUNTING */
  68
  69static inline void vtime_task_switch(struct task_struct *prev) { }
  70static inline void vtime_account_system(struct task_struct *tsk) { }
  71static inline void vtime_account_user(struct task_struct *tsk) { }
  72static inline void vtime_account_irq_enter(struct task_struct *tsk) { }
  73#endif /* !CONFIG_VIRT_CPU_ACCOUNTING */
  74
  75#ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
  76extern void arch_vtime_task_switch(struct task_struct *tsk);
  77extern void vtime_gen_account_irq_exit(struct task_struct *tsk);
  78
  79static inline void vtime_account_irq_exit(struct task_struct *tsk)
  80{
  81        if (vtime_accounting_enabled())
  82                vtime_gen_account_irq_exit(tsk);
  83}
  84
  85extern void vtime_user_enter(struct task_struct *tsk);
  86
  87static inline void vtime_user_exit(struct task_struct *tsk)
  88{
  89        vtime_account_user(tsk);
  90}
  91extern void vtime_guest_enter(struct task_struct *tsk);
  92extern void vtime_guest_exit(struct task_struct *tsk);
  93extern void vtime_init_idle(struct task_struct *tsk, int cpu);
  94#else /* !CONFIG_VIRT_CPU_ACCOUNTING_GEN  */
  95static inline void vtime_account_irq_exit(struct task_struct *tsk)
  96{
  97        /* On hard|softirq exit we always account to hard|softirq cputime */
  98        vtime_account_system(tsk);
  99}
 100static inline void vtime_user_enter(struct task_struct *tsk) { }
 101static inline void vtime_user_exit(struct task_struct *tsk) { }
 102static inline void vtime_guest_enter(struct task_struct *tsk) { }
 103static inline void vtime_guest_exit(struct task_struct *tsk) { }
 104static inline void vtime_init_idle(struct task_struct *tsk, int cpu) { }
 105#endif
 106
 107#ifdef CONFIG_IRQ_TIME_ACCOUNTING
 108extern void irqtime_account_irq(struct task_struct *tsk);
 109#else
 110static inline void irqtime_account_irq(struct task_struct *tsk) { }
 111#endif
 112
 113static inline void account_irq_enter_time(struct task_struct *tsk)
 114{
 115        vtime_account_irq_enter(tsk);
 116        irqtime_account_irq(tsk);
 117}
 118
 119static inline void account_irq_exit_time(struct task_struct *tsk)
 120{
 121        vtime_account_irq_exit(tsk);
 122        irqtime_account_irq(tsk);
 123}
 124
 125#endif /* _LINUX_KERNEL_VTIME_H */
 126