Home | History | Annotate | Download | only in linux
      1 #ifndef _LINUX_KERNEL_STAT_H
      2 #define _LINUX_KERNEL_STAT_H
      3 
      4 #include <asm/irq.h>
      5 #include <linux/smp.h>
      6 #include <linux/threads.h>
      7 #include <linux/percpu.h>
      8 #include <linux/cpumask.h>
      9 #include <asm/cputime.h>
     10 
     11 /*
     12  * 'kernel_stat.h' contains the definitions needed for doing
     13  * some kernel statistics (CPU usage, context switches ...),
     14  * used by rstatd/perfmeter
     15  */
     16 
     17 struct cpu_usage_stat {
     18 	cputime64_t user;
     19 	cputime64_t nice;
     20 	cputime64_t system;
     21 	cputime64_t softirq;
     22 	cputime64_t irq;
     23 	cputime64_t idle;
     24 	cputime64_t iowait;
     25 	cputime64_t steal;
     26 };
     27 
     28 struct kernel_stat {
     29 	struct cpu_usage_stat	cpustat;
     30 	unsigned int irqs[NR_IRQS];
     31 };
     32 
     33 DECLARE_PER_CPU(struct kernel_stat, kstat);
     34 
     35 #define kstat_cpu(cpu)	per_cpu(kstat, cpu)
     36 /* Must have preemption disabled for this to be meaningful. */
     37 #define kstat_this_cpu	__get_cpu_var(kstat)
     38 
     39 extern unsigned long long nr_context_switches(void);
     40 
     41 /*
     42  * Number of interrupts per specific IRQ source, since bootup
     43  */
     44 static inline int kstat_irqs(int irq)
     45 {
     46 	int cpu, sum = 0;
     47 
     48 	for_each_possible_cpu(cpu)
     49 		sum += kstat_cpu(cpu).irqs[irq];
     50 
     51 	return sum;
     52 }
     53 
     54 extern void account_user_time(struct task_struct *, cputime_t);
     55 extern void account_system_time(struct task_struct *, int, cputime_t);
     56 extern void account_steal_time(struct task_struct *, cputime_t);
     57 
     58 #endif /* _LINUX_KERNEL_STAT_H */
     59