1 | // SPDX-License-Identifier: GPL-2.0 |
2 | #include <linux/init.h> |
3 | #include <linux/kernel_stat.h> |
4 | #include <linux/proc_fs.h> |
5 | #include <linux/seq_file.h> |
6 | #include "internal.h" |
7 | |
8 | /* |
9 | * /proc/softirqs ... display the number of softirqs |
10 | */ |
11 | static int show_softirqs(struct seq_file *p, void *v) |
12 | { |
13 | int i, j; |
14 | |
15 | seq_puts(m: p, s: " " ); |
16 | for_each_possible_cpu(i) |
17 | seq_printf(m: p, fmt: "CPU%-8d" , i); |
18 | seq_putc(m: p, c: '\n'); |
19 | |
20 | for (i = 0; i < NR_SOFTIRQS; i++) { |
21 | seq_printf(m: p, fmt: "%12s:" , softirq_to_name[i]); |
22 | for_each_possible_cpu(j) |
23 | seq_printf(m: p, fmt: " %10u" , kstat_softirqs_cpu(irq: i, cpu: j)); |
24 | seq_putc(m: p, c: '\n'); |
25 | } |
26 | return 0; |
27 | } |
28 | |
29 | static int __init proc_softirqs_init(void) |
30 | { |
31 | struct proc_dir_entry *pde; |
32 | |
33 | pde = proc_create_single("softirqs" , 0, NULL, show_softirqs); |
34 | pde_make_permanent(pde); |
35 | return 0; |
36 | } |
37 | fs_initcall(proc_softirqs_init); |
38 | |