vtime.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #ifndef _LINUX_KERNEL_VTIME_H
  2. #define _LINUX_KERNEL_VTIME_H
  3. struct task_struct;
  4. #ifdef CONFIG_VIRT_CPU_ACCOUNTING
  5. extern void vtime_task_switch(struct task_struct *prev);
  6. extern void vtime_account_system(struct task_struct *tsk);
  7. extern void vtime_account_idle(struct task_struct *tsk);
  8. extern void vtime_account_user(struct task_struct *tsk);
  9. extern void vtime_account_irq_enter(struct task_struct *tsk);
  10. #ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
  11. static inline bool vtime_accounting_enabled(void) { return true; }
  12. #endif
  13. #else /* !CONFIG_VIRT_CPU_ACCOUNTING */
  14. static inline void vtime_task_switch(struct task_struct *prev) { }
  15. static inline void vtime_account_system(struct task_struct *tsk) { }
  16. static inline void vtime_account_user(struct task_struct *tsk) { }
  17. static inline void vtime_account_irq_enter(struct task_struct *tsk) { }
  18. static inline bool vtime_accounting_enabled(void) { return false; }
  19. #endif
  20. #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
  21. extern void arch_vtime_task_switch(struct task_struct *tsk);
  22. extern void vtime_account_irq_exit(struct task_struct *tsk);
  23. extern bool vtime_accounting_enabled(void);
  24. extern void vtime_user_enter(struct task_struct *tsk);
  25. static inline void vtime_user_exit(struct task_struct *tsk)
  26. {
  27. vtime_account_user(tsk);
  28. }
  29. extern void vtime_guest_enter(struct task_struct *tsk);
  30. extern void vtime_guest_exit(struct task_struct *tsk);
  31. extern void vtime_init_idle(struct task_struct *tsk);
  32. #else
  33. static inline void vtime_account_irq_exit(struct task_struct *tsk)
  34. {
  35. /* On hard|softirq exit we always account to hard|softirq cputime */
  36. vtime_account_system(tsk);
  37. }
  38. static inline void vtime_user_enter(struct task_struct *tsk) { }
  39. static inline void vtime_user_exit(struct task_struct *tsk) { }
  40. static inline void vtime_guest_enter(struct task_struct *tsk) { }
  41. static inline void vtime_guest_exit(struct task_struct *tsk) { }
  42. static inline void vtime_init_idle(struct task_struct *tsk) { }
  43. #endif
  44. #ifdef CONFIG_IRQ_TIME_ACCOUNTING
  45. extern void irqtime_account_irq(struct task_struct *tsk);
  46. #else
  47. static inline void irqtime_account_irq(struct task_struct *tsk) { }
  48. #endif
  49. static inline void account_irq_enter_time(struct task_struct *tsk)
  50. {
  51. vtime_account_irq_enter(tsk);
  52. irqtime_account_irq(tsk);
  53. }
  54. static inline void account_irq_exit_time(struct task_struct *tsk)
  55. {
  56. vtime_account_irq_exit(tsk);
  57. irqtime_account_irq(tsk);
  58. }
  59. #endif /* _LINUX_KERNEL_VTIME_H */