18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci#include <linux/init.h>
38c2ecf20Sopenharmony_ci#include <linux/kernel_stat.h>
48c2ecf20Sopenharmony_ci#include <linux/proc_fs.h>
58c2ecf20Sopenharmony_ci#include <linux/seq_file.h>
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci/*
88c2ecf20Sopenharmony_ci * /proc/softirqs  ... display the number of softirqs
98c2ecf20Sopenharmony_ci */
108c2ecf20Sopenharmony_cistatic int show_softirqs(struct seq_file *p, void *v)
118c2ecf20Sopenharmony_ci{
128c2ecf20Sopenharmony_ci	int i, j;
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci	seq_puts(p, "                    ");
158c2ecf20Sopenharmony_ci	for_each_possible_cpu(i)
168c2ecf20Sopenharmony_ci		seq_printf(p, "CPU%-8d", i);
178c2ecf20Sopenharmony_ci	seq_putc(p, '\n');
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci	for (i = 0; i < NR_SOFTIRQS; i++) {
208c2ecf20Sopenharmony_ci		seq_printf(p, "%12s:", softirq_to_name[i]);
218c2ecf20Sopenharmony_ci		for_each_possible_cpu(j)
228c2ecf20Sopenharmony_ci			seq_printf(p, " %10u", kstat_softirqs_cpu(i, j));
238c2ecf20Sopenharmony_ci		seq_putc(p, '\n');
248c2ecf20Sopenharmony_ci	}
258c2ecf20Sopenharmony_ci	return 0;
268c2ecf20Sopenharmony_ci}
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_cistatic int __init proc_softirqs_init(void)
298c2ecf20Sopenharmony_ci{
308c2ecf20Sopenharmony_ci	proc_create_single("softirqs", 0, NULL, show_softirqs);
318c2ecf20Sopenharmony_ci	return 0;
328c2ecf20Sopenharmony_ci}
338c2ecf20Sopenharmony_cifs_initcall(proc_softirqs_init);
34