Re: [PATCH] Add sysfs support for the IPMI device interface

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Philipp Matthias Hahn wrote:



What happend to Dimitry Torokovs comment in
http://marc.theaimsgroup.com/?l=linux-kernel&m=111232712029756&w=2
and your reply in
http://marc.theaimsgroup.com/?l=linux-kernel&m=111232954415119&w=2
According to linux/device.h:250, class_simple_device_add() has a
printf() like argument, so you don't need to snprintf() the name on your
own.
Thank you. My stupid mailer ate the tabs, and you fixed that, too. This looks good to go in.

-Corey

Add support for sysfs to the IPMI device interface.

Signed-off-by: Corey Minyard <[email protected]>
Signed-off-by: Philipp Hahn <[email protected]>

Index: linux-2.6.12-rc1/drivers/char/ipmi/ipmi_devintf.c
===================================================================
--- linux-2.6.12-rc1.orig/drivers/char/ipmi/ipmi_devintf.c
+++ linux-2.6.12-rc1/drivers/char/ipmi/ipmi_devintf.c
@@ -44,6 +44,7 @@
#include <linux/ipmi.h>
#include <asm/semaphore.h>
#include <linux/init.h>
+#include <linux/device.h>

#define IPMI_DEVINTF_VERSION "v33"

@@ -519,15 +520,21 @@
		 " interface.  Other values will set the major device number"
		 " to that value.");

+static struct class *ipmi_class;
+
static void ipmi_new_smi(int if_num)
{
-	devfs_mk_cdev(MKDEV(ipmi_major, if_num),
-		      S_IFCHR | S_IRUSR | S_IWUSR,
+	dev_t dev = MKDEV(ipmi_major, if_num);
+
+	devfs_mk_cdev(dev, S_IFCHR | S_IRUSR | S_IWUSR,
		      "ipmidev/%d", if_num);
+
+	class_simple_device_add(ipmi_class, dev, NULL, "ipmi%d", if_num);
}

static void ipmi_smi_gone(int if_num)
{
+	class_simple_device_remove(ipmi_class, MKDEV(ipmi_major, if_num));
	devfs_remove("ipmidev/%d", if_num);
}

@@ -548,8 +555,15 @@
	printk(KERN_INFO "ipmi device interface version "
	       IPMI_DEVINTF_VERSION "\n");

+	ipmi_class = class_simple_create(THIS_MODULE, "ipmi");
+	if (IS_ERR(ipmi_class)) {
+		printk(KERN_ERR "ipmi: can't register device class\n");
+		return PTR_ERR(ipmi_class);
+	}
+
	rv = register_chrdev(ipmi_major, DEVICE_NAME, &ipmi_fops);
	if (rv < 0) {
+		class_simple_destroy(ipmi_class);
		printk(KERN_ERR "ipmi: can't get major %d\n", ipmi_major);
		return rv;
	}
@@ -563,6 +577,7 @@
	rv = ipmi_smi_watcher_register(&smi_watcher);
	if (rv) {
		unregister_chrdev(ipmi_major, DEVICE_NAME);
+		class_simple_destroy(ipmi_class);
		printk(KERN_WARNING "ipmi: can't register smi watcher\n");
		return rv;
	}
@@ -573,6 +588,7 @@

static __exit void cleanup_ipmi(void)
{
+	class_simple_destroy(ipmi_class);
	ipmi_smi_watcher_unregister(&smi_watcher);
	devfs_remove(DEVICE_NAME);
	unregister_chrdev(ipmi_major, DEVICE_NAME);

BYtE
Philipp

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux