root/include/linux/kernel_stat.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. kstat_incr_softirqs_this_cpu
  2. kstat_softirqs_cpu
  3. kstat_cpu_irqs_sum
  4. account_process_tick

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _LINUX_KERNEL_STAT_H
   3 #define _LINUX_KERNEL_STAT_H
   4 
   5 #include <linux/smp.h>
   6 #include <linux/threads.h>
   7 #include <linux/percpu.h>
   8 #include <linux/cpumask.h>
   9 #include <linux/interrupt.h>
  10 #include <linux/sched.h>
  11 #include <linux/vtime.h>
  12 #include <asm/irq.h>
  13 
  14 /*
  15  * 'kernel_stat.h' contains the definitions needed for doing
  16  * some kernel statistics (CPU usage, context switches ...),
  17  * used by rstatd/perfmeter
  18  */
  19 
  20 enum cpu_usage_stat {
  21         CPUTIME_USER,
  22         CPUTIME_NICE,
  23         CPUTIME_SYSTEM,
  24         CPUTIME_SOFTIRQ,
  25         CPUTIME_IRQ,
  26         CPUTIME_IDLE,
  27         CPUTIME_IOWAIT,
  28         CPUTIME_STEAL,
  29         CPUTIME_GUEST,
  30         CPUTIME_GUEST_NICE,
  31         NR_STATS,
  32 };
  33 
  34 struct kernel_cpustat {
  35         u64 cpustat[NR_STATS];
  36 };
  37 
  38 struct kernel_stat {
  39         unsigned long irqs_sum;
  40         unsigned int softirqs[NR_SOFTIRQS];
  41 };
  42 
  43 DECLARE_PER_CPU(struct kernel_stat, kstat);
  44 DECLARE_PER_CPU(struct kernel_cpustat, kernel_cpustat);
  45 
  46 /* Must have preemption disabled for this to be meaningful. */
  47 #define kstat_this_cpu this_cpu_ptr(&kstat)
  48 #define kcpustat_this_cpu this_cpu_ptr(&kernel_cpustat)
  49 #define kstat_cpu(cpu) per_cpu(kstat, cpu)
  50 #define kcpustat_cpu(cpu) per_cpu(kernel_cpustat, cpu)
  51 
  52 extern unsigned long long nr_context_switches(void);
  53 
  54 extern unsigned int kstat_irqs_cpu(unsigned int irq, int cpu);
  55 extern void kstat_incr_irq_this_cpu(unsigned int irq);
  56 
  57 static inline void kstat_incr_softirqs_this_cpu(unsigned int irq)
  58 {
  59         __this_cpu_inc(kstat.softirqs[irq]);
  60 }
  61 
  62 static inline unsigned int kstat_softirqs_cpu(unsigned int irq, int cpu)
  63 {
  64        return kstat_cpu(cpu).softirqs[irq];
  65 }
  66 
  67 /*
  68  * Number of interrupts per specific IRQ source, since bootup
  69  */
  70 extern unsigned int kstat_irqs(unsigned int irq);
  71 extern unsigned int kstat_irqs_usr(unsigned int irq);
  72 
  73 /*
  74  * Number of interrupts per cpu, since bootup
  75  */
  76 static inline unsigned int kstat_cpu_irqs_sum(unsigned int cpu)
  77 {
  78         return kstat_cpu(cpu).irqs_sum;
  79 }
  80 
  81 extern void account_user_time(struct task_struct *, u64);
  82 extern void account_guest_time(struct task_struct *, u64);
  83 extern void account_system_time(struct task_struct *, int, u64);
  84 extern void account_system_index_time(struct task_struct *, u64,
  85                                       enum cpu_usage_stat);
  86 extern void account_steal_time(u64);
  87 extern void account_idle_time(u64);
  88 
  89 #ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
  90 static inline void account_process_tick(struct task_struct *tsk, int user)
  91 {
  92         vtime_flush(tsk);
  93 }
  94 #else
  95 extern void account_process_tick(struct task_struct *, int user);
  96 #endif
  97 
  98 extern void account_idle_ticks(unsigned long ticks);
  99 
 100 #endif /* _LINUX_KERNEL_STAT_H */

/* [<][>][^][v][top][bottom][index][help] */