From mboxrd@z Thu Jan 1 00:00:00 1970 From: Greg KH Date: Tue, 23 Dec 2003 00:26:09 +0000 Subject: [PATCH] add sysfs mem device support [2/4] Message-Id: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: linux-hotplug@vger.kernel.org This adds /sys/class/mem which enables all mem char devices to show up properly in udev. Has been posted to linux-kernel every so often since last July, and acked by a number of other kernel developers. diff -Nru a/drivers/char/mem.c b/drivers/char/mem.c --- a/drivers/char/mem.c Mon Dec 22 16:02:08 2003 +++ b/drivers/char/mem.c Mon Dec 22 16:02:08 2003 @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -657,7 +658,7 @@ .open = memory_open, /* just a selector for the real open */ }; -static const struct { +static const struct mem_dev { unsigned int minor; char *name; umode_t mode; @@ -676,6 +677,23 @@ {11,"kmsg", S_IRUGO | S_IWUSR, &kmsg_fops}, }; +static void release_mem_dev(struct class_device *class_dev) +{ + kfree(class_dev); +} + +static struct class mem_class = { + .name = "mem", + .release = &release_mem_dev, +}; + +static ssize_t show_dev(struct class_device *class_dev, char *buf) +{ + struct mem_dev *mem_dev = class_get_devdata(class_dev); + return print_dev_t(buf, MKDEV(MEM_MAJOR, mem_dev->minor)); +} +static CLASS_DEVICE_ATTR(dev, S_IRUGO, show_dev, NULL); + static int __init chr_dev_init(void) { int i; @@ -683,7 +701,20 @@ if (register_chrdev(MEM_MAJOR,"mem",&memory_fops)) printk("unable to get major %d for memory devs\n", MEM_MAJOR); + class_register(&mem_class); for (i = 0; i < ARRAY_SIZE(devlist); i++) { + struct class_device *class_dev; + + class_dev = kmalloc(sizeof(*class_dev), GFP_KERNEL); + if (class_dev) { + memset(class_dev, 0x00, sizeof(*class_dev)); + class_dev->class = &mem_class; + strncpy(class_dev->class_id, devlist[i].name, BUS_ID_SIZE); + class_set_devdata(class_dev, (void *)&devlist[i]); + if (!class_device_register(class_dev)); + class_device_create_file(class_dev, &class_device_attr_dev); + } + devfs_mk_cdev(MKDEV(MEM_MAJOR, devlist[i].minor), S_IFCHR | devlist[i].mode, devlist[i].name); } ------------------------------------------------------- This SF.net email is sponsored by: IBM Linux Tutorials. Become an expert in LINUX or just sharpen your skills. Sign up for IBM's Free Linux Tutorials. Learn everything from the bash shell to sys admin. Click now! http://ads.osdn.com/?ad_id78&alloc_id371&op=click _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel