cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

devices.c (1181B)


      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#include <linux/blkdev.h>
      7
      8static int devinfo_show(struct seq_file *f, void *v)
      9{
     10	int i = *(loff_t *) v;
     11
     12	if (i < CHRDEV_MAJOR_MAX) {
     13		if (i == 0)
     14			seq_puts(f, "Character devices:\n");
     15		chrdev_show(f, i);
     16	}
     17#ifdef CONFIG_BLOCK
     18	else {
     19		i -= CHRDEV_MAJOR_MAX;
     20		if (i == 0)
     21			seq_puts(f, "\nBlock devices:\n");
     22		blkdev_show(f, i);
     23	}
     24#endif
     25	return 0;
     26}
     27
     28static void *devinfo_start(struct seq_file *f, loff_t *pos)
     29{
     30	if (*pos < (BLKDEV_MAJOR_MAX + CHRDEV_MAJOR_MAX))
     31		return pos;
     32	return NULL;
     33}
     34
     35static void *devinfo_next(struct seq_file *f, void *v, loff_t *pos)
     36{
     37	(*pos)++;
     38	if (*pos >= (BLKDEV_MAJOR_MAX + CHRDEV_MAJOR_MAX))
     39		return NULL;
     40	return pos;
     41}
     42
     43static void devinfo_stop(struct seq_file *f, void *v)
     44{
     45	/* Nothing to do */
     46}
     47
     48static const struct seq_operations devinfo_ops = {
     49	.start = devinfo_start,
     50	.next  = devinfo_next,
     51	.stop  = devinfo_stop,
     52	.show  = devinfo_show
     53};
     54
     55static int __init proc_devices_init(void)
     56{
     57	proc_create_seq("devices", 0, NULL, &devinfo_ops);
     58	return 0;
     59}
     60fs_initcall(proc_devices_init);