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