Add sysfs support for the IPMI device interface
PATCH 1/1 Add sysfs support for the IPMI device interface
Linus,
Could you please add this patch to the main tree? I can't send it to Andrew because he has a rework of this in his tree that has not made it into yours yet, and I'd like to have this in before 2.6.12 is released.
-Corey
Add support for sysfs to the IPMI device interface.
drivers/char/ipmi/ipmi_devintf.c +0 -0
@@ -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,24 @@
" interface. Other values will set the major device number" " to that value.");
+static struct class_simple *ipmi_class;
+
static void ipmi_new_smi(int if_num)
{
+ char name[10]; + dev_t dev = MKDEV(ipmi_major, if_num);
+
devfs_mk_cdev(MKDEV(ipmi_major, if_num),
S_IFCHR | S_IRUSR | S_IWUSR,
"ipmidev/%d", if_num);
+
+ snprintf(name, sizeof(name), "ipmi%d", if_num);
+ class_simple_device_add(ipmi_class, dev, NULL, name);
}
static void ipmi_smi_gone(int if_num)
{
+ class_simple_device_remove(MKDEV(ipmi_major, if_num));
devfs_remove("ipmidev/%d", if_num);
}@@ -548,8 +558,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 +580,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 +591,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);Quoted 10 lines · Corey Minyard
Linus,
Could you please add this patch to the main tree? I can't send it to Andrew because he has a rework of this in his tree that has not made it into yours yet, and I'd like to have this in before 2.6.12 is released.
-Corey
Add support for sysfs to the IPMI device interface.
Your patch has had it's tabs eaten and can't be applied :(
thanks,
greg k-h
Hello!
On Thu, May 19, 2005 at 06:26:04PM -0500, Corey Minyard wrote:
...
Quoted 1 line
Add support for sysfs to the IPMI device interface.
...
Quoted 1 line
Signed-off-by Corey Minyard <[email protected]>
...
Quoted 1 line
Index:
linux-2.6.11-mm1/drivers/char/ipmi/ipmi_devintf.c
...
Quoted 3 lines
static void
ipmi_new_smi(int if_num)
{
+ char name[10];
...
Review
Quoted 6 lines
devfs_mk_cdev(MKDEV(ipmi_major,
if_num),
S_IFCHR|S_IRUSR|S_IWUSR,
"ipmidev/%d",if_num);(quoted diff) +3
-0+ + snprintf(name, sizeof(name), "ipmi%d", if_num); + class_simple_device_add(ipmi_class, dev, NULL, name);
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.
Add support for sysfs to the IPMI device interface.
drivers/char/ipmi/ipmi_devintf.c +18 -2
@@ -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
Signature · 3 lines
/ / (_)__ __ ____ __ Philipp Hahn / /__/ / _ \/ // /\ \/ / /____/_/_//_/\_,_/ /_/\_\ [email protected]
Quoted 11 lines · Philipp Matthias Hahn
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 tolinux/device.h:250,class_simple_device_add()has aprintf()like argument, so you don't need tosnprintf()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
Quoted 78 lines
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
===================================================================drivers/char/ipmi/ipmi_devintf.c +18
-2@@ -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
I get the following compile problem with this change in linus' git repo....
CC [M] drivers/char/ipmi/ipmi_devintf.odrivers/char/ipmi/ipmi_devintf.c: In function 'ipmi_new_smi':drivers/char/ipmi/ipmi_devintf.c:532: warning: passing argument 1 of 'class_simple_device_add' from incompatible pointer type drivers/char/ipmi/ipmi_devintf.c: In function 'ipmi_smi_gone':drivers/char/ipmi/ipmi_devintf.c:537: warning: passing argument 1 of 'class_simple_device_remove' makes integer from pointer without a cast drivers/char/ipmi/ipmi_devintf.c:537: error: too many arguments to function 'class_simple_device_remove' drivers/char/ipmi/ipmi_devintf.c: In function 'init_ipmi_devintf':drivers/char/ipmi/ipmi_devintf.c:558: warning: assignment from incompatible pointer type drivers/char/ipmi/ipmi_devintf.c:566: warning: passing argument 1 of 'class_simple_destroy' from incompatible pointer type drivers/char/ipmi/ipmi_devintf.c:580: warning: passing argument 1 of 'class_simple_destroy' from incompatible pointer type drivers/char/ipmi/ipmi_devintf.c: In function 'cleanup_ipmi':drivers/char/ipmi/ipmi_devintf.c:591: warning: passing argument 1 of 'class_simple_destroy' from incompatible pointer type make[3]: *** [drivers/char/ipmi/ipmi_devintf.o] Error 1 make[2]: *** [drivers/char/ipmi] Error 2
make[1]: *** [drivers/char] Error 2
make: *** [drivers] Error 2
Following patch makes it compile...
signed-off AsterixTheGaul <[email protected]>
Compile fix ipmi_devintf.c for problem introduced by the commit change 37e0915b701281182cea9fc90e894d10addf134a
---
commit 1f974bf04b1f2a01e189e01970cb744343ad1bb7
tree c7b157f4d23340a6d773b8d1385c0efb21d4b650
parent b5c44c2147a447f77e07fecdb087ae288e1f4e40
author AsterixTheGaul <[email protected]> Sat, 21 May 2005 20:16:39 +0530committer AsterixTheGaul <[email protected]> Sat, 21 May 2005 20:16:39 +0530
char/ipmi/ipmi_devintf.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
Index: drivers/char/ipmi/ipmi_devintf.c
===================================================================
--- ec1d95eb1e03e320fc5eb5cfb40379f2f4a7267d/drivers/char/ipmi/ipmi_devintf.c
(mode:100644)
+++ c7b157f4d23340a6d773b8d1385c0efb21d4b650/drivers/char/ipmi/ipmi_devintf.c
(mode:100644)
@@ -520,7 +520,7 @@
" interface. Other values will set the major device number" " to that value.");
-static struct class *ipmi_class;
+static struct class_simple *ipmi_class;
Quoted 103 lines · Corey Minyard
Quoted 11 lines · Philipp Matthias Hahn
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 tolinux/device.h:250,class_simple_device_add()has aprintf()like argument, so you don't need tosnprintf()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
Quoted 74 lines
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
===================================================================drivers/char/ipmi/ipmi_devintf.c +18
-2@@ -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 );Quoted 4 lines
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/
Sorry dint copy the full mkpatch output. Here is the full output....
Signed-off by AsterixTheGaul <[email protected]>
Compile fix ipmi_devintf.c for problem introduced by the commit change 37e0915b701281182cea9fc90e894d10addf134a
---
commit 1f974bf04b1f2a01e189e01970cb744343ad1bb7
tree c7b157f4d23340a6d773b8d1385c0efb21d4b650
parent b5c44c2147a447f77e07fecdb087ae288e1f4e40
author AsterixTheGaul <[email protected]> Sat, 21 May 2005 20:16:39 +0530 committer AsterixTheGaul <[email protected]> Sat, 21 May 2005 20:16:39 +0530
char/ipmi/ipmi_devintf.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
Index: drivers/char/ipmi/ipmi_devintf.c
===================================================================
--- ec1d95eb1e03e320fc5eb5cfb40379f2f4a7267d/drivers/char/ipmi/ipmi_devintf.c
(mode:100644)
+++ c7b157f4d23340a6d773b8d1385c0efb21d4b650/drivers/char/ipmi/ipmi_devintf.c
(mode:100644)
@@ -520,7 +520,7 @@
" interface. Other values will set the major device number" " to that value.");
-static struct class *ipmi_class;
+static struct class_simple *ipmi_class;
static void ipmi_new_smi(int if_num)
{
@@ -534,7 +534,7 @@
static void ipmi_smi_gone(int if_num)
{
- class_simple_device_remove(ipmi_class, MKDEV(ipmi_major, if_num));
+ class_simple_device_remove(MKDEV(ipmi_major, if_num));
devfs_remove("ipmidev/%d", if_num);}