at v4.16-rc3 54 lines 1.1 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2#include <linux/fs.h> 3#include <linux/init.h> 4#include <linux/interrupt.h> 5#include <linux/irqnr.h> 6#include <linux/proc_fs.h> 7#include <linux/seq_file.h> 8 9/* 10 * /proc/interrupts 11 */ 12static void *int_seq_start(struct seq_file *f, loff_t *pos) 13{ 14 return (*pos <= nr_irqs) ? pos : NULL; 15} 16 17static void *int_seq_next(struct seq_file *f, void *v, loff_t *pos) 18{ 19 (*pos)++; 20 if (*pos > nr_irqs) 21 return NULL; 22 return pos; 23} 24 25static void int_seq_stop(struct seq_file *f, void *v) 26{ 27 /* Nothing to do */ 28} 29 30static const struct seq_operations int_seq_ops = { 31 .start = int_seq_start, 32 .next = int_seq_next, 33 .stop = int_seq_stop, 34 .show = show_interrupts 35}; 36 37static int interrupts_open(struct inode *inode, struct file *filp) 38{ 39 return seq_open(filp, &int_seq_ops); 40} 41 42static const struct file_operations proc_interrupts_operations = { 43 .open = interrupts_open, 44 .read = seq_read, 45 .llseek = seq_lseek, 46 .release = seq_release, 47}; 48 49static int __init proc_interrupts_init(void) 50{ 51 proc_create("interrupts", 0, NULL, &proc_interrupts_operations); 52 return 0; 53} 54fs_initcall(proc_interrupts_init);