forked from mirrors/linux
		
	Driver Core: misc: add nodename support for misc devices.
This adds support for misc devices to report their requested nodename to userspace. It also updates a number of misc drivers to provide the needed subdirectory and device name to be used for them. Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Jan Blunck <jblunck@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
		
							parent
							
								
									6fcf53accc
								
							
						
					
					
						commit
						d405640539
					
				
					 6 changed files with 17 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -236,6 +236,7 @@ static const struct file_operations microcode_fops = {
 | 
			
		|||
static struct miscdevice microcode_dev = {
 | 
			
		||||
	.minor			= MICROCODE_MINOR,
 | 
			
		||||
	.name			= "microcode",
 | 
			
		||||
	.devnode		= "cpu/microcode",
 | 
			
		||||
	.fops			= µcode_fops,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -153,6 +153,7 @@ static const struct file_operations rng_chrdev_ops = {
 | 
			
		|||
static struct miscdevice rng_miscdev = {
 | 
			
		||||
	.minor		= RNG_MISCDEV_MINOR,
 | 
			
		||||
	.name		= RNG_MODULE_NAME,
 | 
			
		||||
	.devnode	= "hwrng",
 | 
			
		||||
	.fops		= &rng_chrdev_ops,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -168,7 +168,6 @@ static const struct file_operations misc_fops = {
 | 
			
		|||
	.open		= misc_open,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *	misc_register	-	register a miscellaneous device
 | 
			
		||||
 *	@misc: device structure
 | 
			
		||||
| 
						 | 
				
			
			@ -217,8 +216,8 @@ int misc_register(struct miscdevice * misc)
 | 
			
		|||
		misc_minors[misc->minor >> 3] |= 1 << (misc->minor & 7);
 | 
			
		||||
	dev = MKDEV(MISC_MAJOR, misc->minor);
 | 
			
		||||
 | 
			
		||||
	misc->this_device = device_create(misc_class, misc->parent, dev, NULL,
 | 
			
		||||
					  "%s", misc->name);
 | 
			
		||||
	misc->this_device = device_create(misc_class, misc->parent, dev,
 | 
			
		||||
					  misc, "%s", misc->name);
 | 
			
		||||
	if (IS_ERR(misc->this_device)) {
 | 
			
		||||
		err = PTR_ERR(misc->this_device);
 | 
			
		||||
		goto out;
 | 
			
		||||
| 
						 | 
				
			
			@ -264,6 +263,15 @@ int misc_deregister(struct miscdevice *misc)
 | 
			
		|||
EXPORT_SYMBOL(misc_register);
 | 
			
		||||
EXPORT_SYMBOL(misc_deregister);
 | 
			
		||||
 | 
			
		||||
static char *misc_nodename(struct device *dev)
 | 
			
		||||
{
 | 
			
		||||
	struct miscdevice *c = dev_get_drvdata(dev);
 | 
			
		||||
 | 
			
		||||
	if (c->devnode)
 | 
			
		||||
		return kstrdup(c->devnode, GFP_KERNEL);
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int __init misc_init(void)
 | 
			
		||||
{
 | 
			
		||||
	int err;
 | 
			
		||||
| 
						 | 
				
			
			@ -279,6 +287,7 @@ static int __init misc_init(void)
 | 
			
		|||
	err = -EIO;
 | 
			
		||||
	if (register_chrdev(MISC_MAJOR,"misc",&misc_fops))
 | 
			
		||||
		goto fail_printk;
 | 
			
		||||
	misc_class->nodename = misc_nodename;
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
fail_printk:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1513,6 +1513,7 @@ static const struct file_operations _ctl_fops = {
 | 
			
		|||
static struct miscdevice _dm_misc = {
 | 
			
		||||
	.minor 		= MISC_DYNAMIC_MINOR,
 | 
			
		||||
	.name  		= DM_NAME,
 | 
			
		||||
	.devnode	= "mapper/control",
 | 
			
		||||
	.fops  		= &_ctl_fops
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1366,6 +1366,7 @@ static const struct file_operations tun_fops = {
 | 
			
		|||
static struct miscdevice tun_miscdev = {
 | 
			
		||||
	.minor = TUN_MINOR,
 | 
			
		||||
	.name = "tun",
 | 
			
		||||
	.devnode = "net/tun",
 | 
			
		||||
	.fops = &tun_fops,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,6 +41,7 @@ struct miscdevice  {
 | 
			
		|||
	struct list_head list;
 | 
			
		||||
	struct device *parent;
 | 
			
		||||
	struct device *this_device;
 | 
			
		||||
	const char *devnode;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern int misc_register(struct miscdevice * misc);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue