]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - include/linux/kernel_stat.h
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jesse/openvswitch
[mirror_ubuntu-bionic-kernel.git] / include / linux / kernel_stat.h
CommitLineData
1da177e4
LT
1#ifndef _LINUX_KERNEL_STAT_H
2#define _LINUX_KERNEL_STAT_H
3
1da177e4
LT
4#include <linux/smp.h>
5#include <linux/threads.h>
6#include <linux/percpu.h>
28ef3584 7#include <linux/cpumask.h>
aa0ce5bb 8#include <linux/interrupt.h>
3292beb3 9#include <linux/sched.h>
6859a840 10#include <asm/irq.h>
1da177e4
LT
11#include <asm/cputime.h>
12
13/*
14 * 'kernel_stat.h' contains the definitions needed for doing
15 * some kernel statistics (CPU usage, context switches ...),
16 * used by rstatd/perfmeter
17 */
18
3292beb3
GC
19enum cpu_usage_stat {
20 CPUTIME_USER,
21 CPUTIME_NICE,
22 CPUTIME_SYSTEM,
23 CPUTIME_SOFTIRQ,
24 CPUTIME_IRQ,
25 CPUTIME_IDLE,
26 CPUTIME_IOWAIT,
27 CPUTIME_STEAL,
28 CPUTIME_GUEST,
29 CPUTIME_GUEST_NICE,
30 NR_STATS,
31};
32
33struct kernel_cpustat {
34 u64 cpustat[NR_STATS];
1da177e4
LT
35};
36
37struct kernel_stat {
d7e51e66 38#ifndef CONFIG_GENERIC_HARDIRQS
0b8f1efa
YL
39 unsigned int irqs[NR_IRQS];
40#endif
f2c66cd8 41 unsigned long irqs_sum;
aa0ce5bb 42 unsigned int softirqs[NR_SOFTIRQS];
1da177e4
LT
43};
44
45DECLARE_PER_CPU(struct kernel_stat, kstat);
3292beb3 46DECLARE_PER_CPU(struct kernel_cpustat, kernel_cpustat);
1da177e4 47
1da177e4 48/* Must have preemption disabled for this to be meaningful. */
3292beb3
GC
49#define kstat_this_cpu (&__get_cpu_var(kstat))
50#define kcpustat_this_cpu (&__get_cpu_var(kernel_cpustat))
51#define kstat_cpu(cpu) per_cpu(kstat, cpu)
52#define kcpustat_cpu(cpu) per_cpu(kernel_cpustat, cpu)
1da177e4
LT
53
54extern unsigned long long nr_context_switches(void);
55
d7e51e66 56#ifndef CONFIG_GENERIC_HARDIRQS
0b8f1efa 57
d6c88a50 58struct irq_desc;
8c464a4b 59
d6c88a50
TG
60static inline void kstat_incr_irqs_this_cpu(unsigned int irq,
61 struct irq_desc *desc)
62{
6c9ae009
ED
63 __this_cpu_inc(kstat.irqs[irq]);
64 __this_cpu_inc(kstat.irqs_sum);
d6c88a50 65}
8c464a4b 66
7f95ec9e
YL
67static inline unsigned int kstat_irqs_cpu(unsigned int irq, int cpu)
68{
69 return kstat_cpu(cpu).irqs[irq];
70}
0b8f1efa 71#else
d52a61c0 72#include <linux/irq.h>
0b8f1efa 73extern unsigned int kstat_irqs_cpu(unsigned int irq, int cpu);
6c9ae009
ED
74
75#define kstat_incr_irqs_this_cpu(irqno, DESC) \
76do { \
77 __this_cpu_inc(*(DESC)->kstat_irqs); \
78 __this_cpu_inc(kstat.irqs_sum); \
79} while (0)
d52a61c0 80
0b8f1efa 81#endif
7f95ec9e 82
aa0ce5bb
KK
83static inline void kstat_incr_softirqs_this_cpu(unsigned int irq)
84{
6c9ae009 85 __this_cpu_inc(kstat.softirqs[irq]);
aa0ce5bb
KK
86}
87
88static inline unsigned int kstat_softirqs_cpu(unsigned int irq, int cpu)
89{
90 return kstat_cpu(cpu).softirqs[irq];
91}
92
1da177e4
LT
93/*
94 * Number of interrupts per specific IRQ source, since bootup
95 */
478735e3 96#ifndef CONFIG_GENERIC_HARDIRQS
7f95ec9e 97static inline unsigned int kstat_irqs(unsigned int irq)
1da177e4 98{
7f95ec9e
YL
99 unsigned int sum = 0;
100 int cpu;
1da177e4 101
0a945022 102 for_each_possible_cpu(cpu)
7f95ec9e 103 sum += kstat_irqs_cpu(irq, cpu);
1da177e4
LT
104
105 return sum;
106}
478735e3
KH
107#else
108extern unsigned int kstat_irqs(unsigned int irq);
109#endif
1da177e4 110
f2c66cd8
KH
111/*
112 * Number of interrupts per cpu, since bootup
113 */
114static inline unsigned int kstat_cpu_irqs_sum(unsigned int cpu)
115{
116 return kstat_cpu(cpu).irqs_sum;
117}
aa9c4c0f
IM
118
119/*
120 * Lock/unlock the current runqueue - to extract task statistics:
121 */
bb34d92f 122extern unsigned long long task_delta_exec(struct task_struct *);
aa9c4c0f 123
457533a7
MS
124extern void account_user_time(struct task_struct *, cputime_t, cputime_t);
125extern void account_system_time(struct task_struct *, int, cputime_t, cputime_t);
79741dd3
MS
126extern void account_steal_time(cputime_t);
127extern void account_idle_time(cputime_t);
128
129extern void account_process_tick(struct task_struct *, int user);
130extern void account_steal_ticks(unsigned long ticks);
131extern void account_idle_ticks(unsigned long ticks);
1da177e4
LT
132
133#endif /* _LINUX_KERNEL_STAT_H */