<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">
From: Greg KH &lt;greg@kroah.com&gt;

Add sysfs misc class support, and fix bug where misc_init() was being
called to late in the boot process.



 25-akpm/drivers/char/misc.c        |   17 +++++++++++++++--
 25-akpm/include/linux/miscdevice.h |    3 +++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff -puN drivers/char/misc.c~sysfs-add-misc-class drivers/char/misc.c
--- 25/drivers/char/misc.c~sysfs-add-misc-class	Tue Dec 23 13:43:53 2003
+++ 25-akpm/drivers/char/misc.c	Tue Dec 23 13:43:53 2003
@@ -47,7 +47,7 @@
 #include &lt;linux/devfs_fs_kernel.h&gt;
 #include &lt;linux/stat.h&gt;
 #include &lt;linux/init.h&gt;
-
+#include &lt;linux/device.h&gt;
 #include &lt;linux/tty.h&gt;
 #include &lt;linux/kmod.h&gt;
 
@@ -180,6 +180,15 @@ fail:
 	return err;
 }
 
+/*
+ * TODO for 2.7:
+ *  - add a struct class_device to struct miscdevice and make all usages of
+ *    them dynamic.
+ */
+static struct class misc_class = {
+	.name	= "misc",
+};
+
 static struct file_operations misc_fops = {
 	.owner		= THIS_MODULE,
 	.open		= misc_open,
@@ -234,6 +243,8 @@ int misc_register(struct miscdevice * mi
 				"misc/%s", misc-&gt;name);
 	}
 
+	simple_add_class_device(&amp;misc_class, MKDEV(MISC_MAJOR, misc-&gt;minor),
+				misc-&gt;dev, misc-&gt;name);
 	devfs_mk_cdev(MKDEV(MISC_MAJOR, misc-&gt;minor),
 			S_IFCHR|S_IRUSR|S_IWUSR|S_IRGRP, misc-&gt;devfs_name);
 
@@ -265,6 +276,7 @@ int misc_deregister(struct miscdevice * 
 
 	down(&amp;misc_sem);
 	list_del(&amp;misc-&gt;list);
+	simple_remove_class_device(MKDEV(MISC_MAJOR, misc-&gt;minor));
 	devfs_remove(misc-&gt;devfs_name);
 	if (i &lt; DYNAMIC_MINORS &amp;&amp; i&gt;0) {
 		misc_minors[i&gt;&gt;3] &amp;= ~(1 &lt;&lt; (misc-&gt;minor &amp; 7));
@@ -285,6 +297,7 @@ static int __init misc_init(void)
 	if (ent)
 		ent-&gt;proc_fops = &amp;misc_proc_fops;
 #endif
+	class_register(&amp;misc_class);
 #ifdef CONFIG_MVME16x
 	rtc_MK48T08_init();
 #endif
@@ -319,4 +332,4 @@ static int __init misc_init(void)
 	}
 	return 0;
 }
-module_init(misc_init);
+subsys_initcall(misc_init);
diff -puN include/linux/miscdevice.h~sysfs-add-misc-class include/linux/miscdevice.h
--- 25/include/linux/miscdevice.h~sysfs-add-misc-class	Tue Dec 23 13:43:53 2003
+++ 25-akpm/include/linux/miscdevice.h	Tue Dec 23 13:43:53 2003
@@ -36,12 +36,15 @@
 
 #define TUN_MINOR	     200
 
+struct device;
+
 struct miscdevice 
 {
 	int minor;
 	const char *name;
 	struct file_operations *fops;
 	struct list_head list;
+	struct device *dev;
 	char devfs_name[64];
 };
 

_
</pre></body></html>