File: /Users/paulross/dev/linux/linux-3.13/include/linux/vtime.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       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: 
      10: struct task_struct;
      11: 
      12: /*
      13:  * vtime_accounting_enabled() definitions/declarations
      14:  */
      15: #ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
      16: static inline bool vtime_accounting_enabled(void) { return true; }
      17: #endif /* CONFIG_VIRT_CPU_ACCOUNTING_NATIVE */
      18: 
      19: #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
      20: static inline bool vtime_accounting_enabled(void)
      21: {
      22:     if (static_key_false(&context_tracking_enabled)) {
      23:         if (context_tracking_active())
      24:             return true;
      25:     }
      26: 
      27:     return false;
      28: }
      29: #endif /* CONFIG_VIRT_CPU_ACCOUNTING_GEN */
      30: 
      31: #ifndef CONFIG_VIRT_CPU_ACCOUNTING
      32: static 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
      42: extern void vtime_task_switch(struct task_struct *prev);
      43: #else
      44: extern void vtime_common_task_switch(struct task_struct *prev);
      45: static 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: 
      52: extern void vtime_account_system(struct task_struct *tsk);
      53: extern void vtime_account_idle(struct task_struct *tsk);
      54: extern void vtime_account_user(struct task_struct *tsk);
      55: 
      56: #ifdef __ARCH_HAS_VTIME_ACCOUNT
      57: extern void vtime_account_irq_enter(struct task_struct *tsk);
      58: #else
      59: extern void vtime_common_account_irq_enter(struct task_struct *tsk);
      60: static 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: 
      69: static inline void vtime_task_switch(struct task_struct *prev) { }
      70: static inline void vtime_account_system(struct task_struct *tsk) { }
      71: static inline void vtime_account_user(struct task_struct *tsk) { }
      72: static inline void vtime_account_irq_enter(struct task_struct *tsk) { }
      73: #endif /* !CONFIG_VIRT_CPU_ACCOUNTING */
      74: 
      75: #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
      76: extern void arch_vtime_task_switch(struct task_struct *tsk);
      77: extern void vtime_gen_account_irq_exit(struct task_struct *tsk);
      78: 
      79: static 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: 
      85: extern void vtime_user_enter(struct task_struct *tsk);
      86: 
      87: static inline void vtime_user_exit(struct task_struct *tsk)
      88: {
      89:     vtime_account_user(tsk);
      90: }
      91: extern void vtime_guest_enter(struct task_struct *tsk);
      92: extern void vtime_guest_exit(struct task_struct *tsk);
      93: extern void vtime_init_idle(struct task_struct *tsk, int cpu);
      94: #else /* !CONFIG_VIRT_CPU_ACCOUNTING_GEN  */
      95: static 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: }
     100: static inline void vtime_user_enter(struct task_struct *tsk) { }
     101: static inline void vtime_user_exit(struct task_struct *tsk) { }
     102: static inline void vtime_guest_enter(struct task_struct *tsk) { }
     103: static inline void vtime_guest_exit(struct task_struct *tsk) { }
     104: static inline void vtime_init_idle(struct task_struct *tsk, int cpu) { }
     105: #endif
     106: 
     107: #ifdef CONFIG_IRQ_TIME_ACCOUNTING
     108: extern void irqtime_account_irq(struct task_struct *tsk);
     109: #else
     110: static inline void irqtime_account_irq(struct task_struct *tsk) { }
     111: #endif
     112: 
     113: static inline void account_irq_enter_time(struct task_struct *tsk)
     114: {
     115:     vtime_account_irq_enter(tsk);
     116:     irqtime_account_irq(tsk);
     117: }
     118: 
     119: static 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: