Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git] / drivers / char / ipmi / ipmi_devintf.c
index 68d7c61..e1c9537 100644 (file)
@@ -31,6 +31,7 @@
  *  675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/errno.h>
@@ -39,6 +40,7 @@
 #include <linux/poll.h>
 #include <linux/spinlock.h>
 #include <linux/slab.h>
+#include <linux/devfs_fs_kernel.h>
 #include <linux/ipmi.h>
 #include <linux/mutex.h>
 #include <linux/init.h>
@@ -765,7 +767,7 @@ static long compat_ipmi_ioctl(struct file *filep, unsigned int cmd,
 }
 #endif
 
-static const struct file_operations ipmi_fops = {
+static struct file_operations ipmi_fops = {
        .owner          = THIS_MODULE,
        .ioctl          = ipmi_ioctl,
 #ifdef CONFIG_COMPAT
@@ -802,6 +804,9 @@ static void ipmi_new_smi(int if_num, struct device *device)
        dev_t dev = MKDEV(ipmi_major, if_num);
        struct ipmi_reg_list *entry;
 
+       devfs_mk_cdev(dev, S_IFCHR | S_IRUSR | S_IWUSR,
+                     "ipmidev/%d", if_num);
+
        entry = kmalloc(sizeof(*entry), GFP_KERNEL);
        if (!entry) {
                printk(KERN_ERR "ipmi_devintf: Unable to create the"
@@ -831,6 +836,7 @@ static void ipmi_smi_gone(int if_num)
        }
        class_device_destroy(ipmi_class, dev);
        mutex_unlock(&reg_list_mutex);
+       devfs_remove("ipmidev/%d", if_num);
 }
 
 static struct ipmi_smi_watcher smi_watcher =
@@ -866,6 +872,8 @@ static __init int init_ipmi_devintf(void)
                ipmi_major = rv;
        }
 
+       devfs_mk_dir(DEVICE_NAME);
+
        rv = ipmi_smi_watcher_register(&smi_watcher);
        if (rv) {
                unregister_chrdev(ipmi_major, DEVICE_NAME);
@@ -890,6 +898,7 @@ static __exit void cleanup_ipmi(void)
        mutex_unlock(&reg_list_mutex);
        class_destroy(ipmi_class);
        ipmi_smi_watcher_unregister(&smi_watcher);
+       devfs_remove(DEVICE_NAME);
        unregister_chrdev(ipmi_major, DEVICE_NAME);
 }
 module_exit(cleanup_ipmi);