Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-2.0 2 : : #include <linux/fs.h> 3 : : #include <linux/init.h> 4 : : #include <linux/proc_fs.h> 5 : : #include <linux/seq_file.h> 6 : : 7 : 413696 : static int devinfo_show(struct seq_file *f, void *v) 8 : : { 9 : 413696 : int i = *(loff_t *) v; 10 : : 11 [ + + ]: 413696 : if (i < CHRDEV_MAJOR_MAX) { 12 [ + + ]: 206848 : if (i == 0) 13 : 404 : seq_puts(f, "Character devices:\n"); 14 : 206848 : chrdev_show(f, i); 15 : : } 16 : : #ifdef CONFIG_BLOCK 17 : : else { 18 : 206848 : i -= CHRDEV_MAJOR_MAX; 19 [ + + ]: 206848 : if (i == 0) 20 : 404 : seq_puts(f, "\nBlock devices:\n"); 21 : 206848 : blkdev_show(f, i); 22 : : } 23 : : #endif 24 : 413696 : return 0; 25 : : } 26 : : 27 : 808 : static void *devinfo_start(struct seq_file *f, loff_t *pos) 28 : : { 29 [ + + ]: 808 : if (*pos < (BLKDEV_MAJOR_MAX + CHRDEV_MAJOR_MAX)) 30 : 404 : return pos; 31 : : return NULL; 32 : : } 33 : : 34 : 413696 : static void *devinfo_next(struct seq_file *f, void *v, loff_t *pos) 35 : : { 36 : 413696 : (*pos)++; 37 [ + + ]: 413696 : if (*pos >= (BLKDEV_MAJOR_MAX + CHRDEV_MAJOR_MAX)) 38 : : return NULL; 39 : 413292 : return pos; 40 : : } 41 : : 42 : 808 : static void devinfo_stop(struct seq_file *f, void *v) 43 : : { 44 : : /* Nothing to do */ 45 : 808 : } 46 : : 47 : : static const struct seq_operations devinfo_ops = { 48 : : .start = devinfo_start, 49 : : .next = devinfo_next, 50 : : .stop = devinfo_stop, 51 : : .show = devinfo_show 52 : : }; 53 : : 54 : 404 : static int __init proc_devices_init(void) 55 : : { 56 : 404 : proc_create_seq("devices", 0, NULL, &devinfo_ops); 57 : 404 : return 0; 58 : : } 59 : : fs_initcall(proc_devices_init);