2005-05-19 23:30:08

by Corey Minyard

[permalink] [raw]
Subject: [PATCH] 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.

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

Index: linux-2.6.11-mm1/drivers/char/ipmi/ipmi_devintf.c
===================================================================
--- linux-2.6.11-mm1.orig/drivers/char/ipmi/ipmi_devintf.c
+++ linux-2.6.11-mm1/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,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);


2005-05-20 05:09:16

by Greg KH

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

On Thu, May 19, 2005 at 06:26:04PM -0500, Corey Minyard wrote:
> 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

2005-05-20 06:56:59

by Philipp Matthias Hahn

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

Hello!

On Thu, May 19, 2005 at 06:26:04PM -0500, Corey Minyard wrote:
...
> Add support for sysfs to the IPMI device interface.
...
> Signed-off-by: Corey Minyard <[email protected]>
...
> Index: linux-2.6.11-mm1/drivers/char/ipmi/ipmi_devintf.c
...
> static void ipmi_new_smi(int if_num)
> {
> + char name[10];
...
> 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);

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.

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
--
/ / (_)__ __ ____ __ Philipp Hahn
/ /__/ / _ \/ // /\ \/ /
/____/_/_//_/\_,_/ /_/\_\ [email protected]

2005-05-20 13:00:50

by Corey Minyard

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

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
>
>

2005-05-22 03:20:43

by AsterixTheGaul

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

I get the following compile problem with this change in linus' git repo....

CC [M] drivers/char/ipmi/ipmi_devintf.o
drivers/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;





On 5/20/05, Corey Minyard <[email protected]> wrote:
> 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/
>

2005-05-22 03:23:17

by AsterixTheGaul

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

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);
}

2005-05-22 06:57:26

by Dave Jones

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

On Fri, May 20, 2005 at 08:11:42AM -0700, Linux Kernel wrote:
> tree e327b635e017dfcfd989b203c16ebd55e1d2526b
> parent 45fed46f5b98aaf439e9ef125992ec853cd98499
> author Corey Minyard <[email protected]> Fri, 20 May 2005 08:56:23 +0200
> committer Linus Torvalds <[email protected]> Fri, 20 May 2005 21:58:04 -0700
>
> [PATCH] Add sysfs support for the IPMI device interface
>
> Add support for sysfs to the IPMI device interface.
>
> Clean-ups based on Dimitry Torokovs comment by Philipp Hahn.
>

This doesn't compile..

drivers/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


Dave