Jan Safranek | 7 May 10:18
Picon
Favicon

Was there new release?

Hi,

I noticed there is OpenIPMI-2.0.19.tar.gz on OpenIPMI's sf.net page, but
I haven't seen any announcement. Is the release ready for use? Or is it
some preliminary version for testing?

Jan

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
dbashaw | 6 Apr 04:15
Favicon

Multiple users sending messages via KCS interface

I have two IPMI users created using ipmi_create_user(..).
Each user can send messages async with respect to each other.
I have also seen IPMI message handler: BMC returned incorrect response 
errors some times.

When I allow only one user to use the KCS interface this does not seem 
to happen.
After reviewing ipmi_msghandler.c I am not able to figure out how a 
response to a message
from a given user can be identified with that user and not some other.

  ipmi_msghandler() sends the message to the interface handler (KCS 
state machine in this case) and is done,
free to handle the next user request since responses arrive 
asynchronously at a later time.

 From the IPMI spec I see KCS message request format described as:
     BYTE 1        BYTE 2     BYTE 3:N
    NetFn/Lun     Cmd         Data

KCS message response format:
     BYTE 1        BYTE 2     BYTE 3      BYTE 4:N
      NetFn/Lun   Cmd        Ccode         Data

Data is that which is required by the specific command being sent only.

Request and response messages both have no user identifiable information 
that I can find in the V1.5 or V2.0 spec.

I'm beginning to think that this is the reason for the "incorrect 
(Continue reading)

John Gehring | 23 Feb 00:05

Using ipmi_lan_get_config()

I'm attempting to add some code that retrieves the IPMI LAN IP address. In my small app, I ultimately get the address info, but after the call to ipmi_lan_get_config(), I also get a list of warnings:

WARN: lanparm.c(got_parm): Error fetching dest type 18, wrong selector came back, expecting 1, was 0.  Assuming it is 1.
WARN: lanparm.c(got_parm): Error fetching dest type 18, wrong selector came back, expecting 2, was 0.  Assuming it is 2.
WARN: lanparm.c(got_parm): Error fetching dest type 18, wrong selector came back, expecting 3, was 0.  Assuming it is 3.
...
WARN: lanparm.c(got_parm): Error fetching dest type 18, wrong selector came back, expecting 15, was 0.  Assuming it is 15.
EINF: lanparm.c(got_parm): Error fetching dest addr 19, wrong selector came back, expecting 5, was 0.  Assuming it is 5.
EINF: lanparm.c(got_parm): Error fetching dest addr 19, wrong selector came back, expecting 6, was 0.  Assuming it is 6.
...
EINF: lanparm.c(got_parm): Error fetching dest addr 19, wrong selector came back, expecting 14, was 0.  Assuming it is 14.
EINF: lanparm.c(got_parm): Error fetching dest addr 19, wrong selector came back, expecting 15, was 0.  Assuming it is 15.


Following are the two lines of code proceeding the warning messages listed above.

    ipmi_lanparm_alloc(mc, channel, &m_lanparm);
    ipmi_lan_get_config(m_lanparm, NGSIPMILAN::ipmi_lan_get_config_cb, this);

Is there some other setup call I need to make prior to attempting to get the config?

Thanks,

John G

------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
Openipmi-developer mailing list
Openipmi-developer <at> lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openipmi-developer
Matthew Garrett | 30 Nov 20:12
Picon
Favicon

[PATCH] ipmi: Increase KCS timeouts

We currently time out and retry KCS transactions after 1 second of waiting
for IBF or OBF. This appears to be too short for some hardware. The IPMI
spec says "All system software wait loops should include error timeouts. For
simplicity, such timeouts are not shown explicitly in the flow diagrams. A
five-second timeout or greater is recommended". Change the timeout to five
seconds to satisfy the slow hardware.

Signed-off-by: Matthew Garrett <mjg <at> redhat.com>
---
 drivers/char/ipmi/ipmi_kcs_sm.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/char/ipmi/ipmi_kcs_sm.c b/drivers/char/ipmi/ipmi_kcs_sm.c
index cf82fed..e53fc24 100644
--- a/drivers/char/ipmi/ipmi_kcs_sm.c
+++ b/drivers/char/ipmi/ipmi_kcs_sm.c
@@ -118,8 +118,8 @@ enum kcs_states {
 #define MAX_KCS_WRITE_SIZE IPMI_MAX_MSG_LENGTH

 /* Timeouts in microseconds. */
-#define IBF_RETRY_TIMEOUT 1000000
-#define OBF_RETRY_TIMEOUT 1000000
+#define IBF_RETRY_TIMEOUT 5000000
+#define OBF_RETRY_TIMEOUT 5000000
 #define MAX_ERROR_RETRIES 10
 #define ERROR0_OBF_WAIT_JIFFIES (2*HZ)

--

-- 
1.7.7.1

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure 
contains a definitive record of customers, application performance, 
security threats, fraudulent activity, and more. Splunk takes this 
data and makes sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-novd2d
alex | 12 Oct 23:21
Favicon

error messages after exiting code: "Never freed N bytes at ..., allocated at ..."

 Using the python bindings (with 2.0.19 of OpenIPMI and python 2.7.1), 
 got the code to work nicely, but when it finishes, i get the following 
 junk:

 $ ./openipmi-sample2.py lan -U username -P mypassword bmcipaddr
 INFO: test 0 ipmi_lan.c(connection_up): Connection 0 to the BMC is up
 INFO: test 0 ipmi_lan.c(connection_up): Connection to the BMC restored
 Conn up
 MC: test(0.20)
 got response: [0, 18, 1, 4, 34, 2, 223, 11, 0, 0, 0, 0, 3, 1, 0, 0]

 Never freed 176 bytes at 0x80e58d8, allocated at 0x4054913f 0x4054a16e 
 0x404e35a4 0x4049c301 0x4008aef6 0x400eeb5d
 Never freed 52 bytes at 0x80e59d0, allocated at 0x401ab2e6 0x404fcf55 
 0x405491b7 0x4054a16e 0x404e35a4 0x4049c301
 Never freed 8 bytes at 0x80e5a58, allocated at 0x401aaee9 0x401ab30a 
 0x404fcf55 0x405491b7 0x4054a16e 0x404e35a4
 Never freed 14640 bytes at 0x8113ef8, allocated at 0x405491cd 
 0x4054a16e 0x404e35a4 0x4049c301 0x4008aef6 0x400eeb5d
 ......

 If i pipe stderr to /dev/null it'll be clean, but i am wondering if 
 there's a better way to fix this ?

 I am looking at sample2.py with the following diff (so it actually 
 exits at some point instead of querying endlessly):

 --- OpenIPMI-2.0.19/swig/python/sample2.py     2011-10-12 
 11:03:25.000000000 -0400
 +++ OpenIPMI-2.0.19/swig/python/sample2.py  2011-10-12 
 17:23:54.615437000 -0400
 @@ -94,14 +65,18 @@
      pass

  nexttime = time.time()
 -while main_handler.name != "done":
 +num_poll = 1
 +while main_handler.name != "done" and num_poll <= 2:
      OpenIPMI.wait_io(1000)
      now = time.time()
      if main_handler.mc and now >= nexttime:
          nexttime += 5
 +        num_poll += 1
          main_handler.mc.to_mc(main_handler)
      pass

  OpenIPMI.shutdown_everything()
  print "done"
  sys.exit(0)

 (just pasting this diff so you see i'm using known-working code)

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct
Corey Minyard | 12 Oct 17:41
Picon
Favicon

Version 2.0.19 of OpenIPMI uploaded

It's been a long time since I uploaded a version of OpenIPMI, and there 
are some little bug fixes pending.  Most of the changes are due to 
autotools changes, though I found a couple of little bugs today playing 
with the python script I just sent out.

-corey

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct
alex | 11 Oct 23:02
Favicon

openipmi appropriateness for raw requests

 So I have some ipmitool raw commands i run remotely against a host's 
 bmc, and wanted to code them via the python bindings (so i can more 
 frequent polling and then do further processing w/o forking ipmitool 
 over and over).

 However the documentation is a bit sparse and i can't honestly see how 
 do i construct some code to do this?

 So i have to ask, is emulating raw requests something viable via 
 OpenIPMI? Is there any examples i can look at ? Even if it's just in C, 
 i figure the python bindings are pretty thinly swig'ified, but if i 
 could figure out if/how that's done, i'll tackle pythonifying it 
 afterwards.

 Thanks!
 Alex

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct
Yong Zhang | 7 Sep 10:10
Picon

[PATCH 31/62] driver/char: irq: Remove IRQF_DISABLED

This flag is a NOOP and can be removed now.

Signed-off-by: Yong Zhang <yong.zhang0 <at> gmail.com>
---
 drivers/char/hpet.c              |    2 +-
 drivers/char/ipmi/ipmi_si_intf.c |    4 ++--
 drivers/char/nwbutton.c          |    2 +-
 drivers/char/rtc.c               |    4 ++--
 drivers/char/snsc.c              |    2 +-
 drivers/char/snsc_event.c        |    2 +-
 drivers/char/tlclk.c             |    2 +-
 7 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c
index 0833896..10f3f04 100644
--- a/drivers/char/hpet.c
+++ b/drivers/char/hpet.c
@@ -500,7 +500,7 @@ static int hpet_ioctl_ieon(struct hpet_dev *devp)

 		sprintf(devp->hd_name, "hpet%d", (int)(devp - hpetp->hp_dev));
 		irq_flags = devp->hd_flags & HPET_SHARED_IRQ
-						? IRQF_SHARED : IRQF_DISABLED;
+						? IRQF_SHARED : 0;
 		if (request_irq(irq, hpet_interrupt, irq_flags,
 				devp->hd_name, (void *)devp)) {
 			printk(KERN_ERR "hpet: IRQ %d is not free\n", irq);
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
index 9397ab4..44e8da3 100644
--- a/drivers/char/ipmi/ipmi_si_intf.c
+++ b/drivers/char/ipmi/ipmi_si_intf.c
@@ -1336,7 +1336,7 @@ static int std_irq_setup(struct smi_info *info)
 	if (info->si_type == SI_BT) {
 		rv = request_irq(info->irq,
 				 si_bt_irq_handler,
-				 IRQF_SHARED | IRQF_DISABLED,
+				 IRQF_SHARED,
 				 DEVICE_NAME,
 				 info);
 		if (!rv)
@@ -1346,7 +1346,7 @@ static int std_irq_setup(struct smi_info *info)
 	} else
 		rv = request_irq(info->irq,
 				 si_irq_handler,
-				 IRQF_SHARED | IRQF_DISABLED,
+				 IRQF_SHARED,
 				 DEVICE_NAME,
 				 info);
 	if (rv) {
diff --git a/drivers/char/nwbutton.c b/drivers/char/nwbutton.c
index 04a480f..36aaf43 100644
--- a/drivers/char/nwbutton.c
+++ b/drivers/char/nwbutton.c
@@ -220,7 +220,7 @@ static int __init nwbutton_init(void)
 		return -EBUSY;
 	}

-	if (request_irq (IRQ_NETWINDER_BUTTON, button_handler, IRQF_DISABLED,
+	if (request_irq (IRQ_NETWINDER_BUTTON, button_handler, 0,
 			"nwbutton", NULL)) {
 		printk (KERN_WARNING "nwbutton: IRQ %d is not free.\n",
 				IRQ_NETWINDER_BUTTON);
diff --git a/drivers/char/rtc.c b/drivers/char/rtc.c
index dfa8b30..396ae12 100644
--- a/drivers/char/rtc.c
+++ b/drivers/char/rtc.c
@@ -227,7 +227,7 @@ static inline unsigned char rtc_is_updating(void)

 #ifdef RTC_IRQ
 /*
- *	A very tiny interrupt handler. It runs with IRQF_DISABLED set,
+ *	A very tiny interrupt handler. It runs with irqs disabled,
  *	but there is possibility of conflicting with the set_rtc_mmss()
  *	call (the rtc irq and the timer irq can easily run at the same
  *	time in two different CPUs). So we need to serialize
@@ -1040,7 +1040,7 @@ no_irq:
 		rtc_int_handler_ptr = rtc_interrupt;
 	}

-	if (request_irq(RTC_IRQ, rtc_int_handler_ptr, IRQF_DISABLED,
+	if (request_irq(RTC_IRQ, rtc_int_handler_ptr, 0,
 			"rtc", NULL)) {
 		/* Yeah right, seeing as irq 8 doesn't even hit the bus. */
 		rtc_has_irq = 0;
diff --git a/drivers/char/snsc.c b/drivers/char/snsc.c
index 5816b39..d3464ef 100644
--- a/drivers/char/snsc.c
+++ b/drivers/char/snsc.c
@@ -108,7 +108,7 @@ scdrv_open(struct inode *inode, struct file *file)
 	/* hook this subchannel up to the system controller interrupt */
 	mutex_lock(&scdrv_mutex);
 	rv = request_irq(SGI_UART_VECTOR, scdrv_interrupt,
-			 IRQF_SHARED | IRQF_DISABLED,
+			 IRQF_SHARED,
 			 SYSCTL_BASENAME, sd);
 	if (rv) {
 		ia64_sn_irtr_close(sd->sd_nasid, sd->sd_subch);
diff --git a/drivers/char/snsc_event.c b/drivers/char/snsc_event.c
index ee15694..a35978c 100644
--- a/drivers/char/snsc_event.c
+++ b/drivers/char/snsc_event.c
@@ -292,7 +292,7 @@ scdrv_event_init(struct sysctl_data_s *scd)

 	/* hook event subchannel up to the system controller interrupt */
 	rv = request_irq(SGI_UART_VECTOR, scdrv_event_interrupt,
-			 IRQF_SHARED | IRQF_DISABLED,
+			 IRQF_SHARED,
 			 "system controller events", event_sd);
 	if (rv) {
 		printk(KERN_WARNING "%s: irq request failed (%d)\n",
diff --git a/drivers/char/tlclk.c b/drivers/char/tlclk.c
index 0c964cd..771e48e 100644
--- a/drivers/char/tlclk.c
+++ b/drivers/char/tlclk.c
@@ -222,7 +222,7 @@ static int tlclk_open(struct inode *inode, struct file *filp)
 	/* This device is wired through the FPGA IO space of the ATCA blade
 	 * we can't share this IRQ */
 	result = request_irq(telclk_interrupt, &tlclk_interrupt,
-			     IRQF_DISABLED, "telco_clock", tlclk_interrupt);
+			     0, "telco_clock", tlclk_interrupt);
 	if (result == -EBUSY)
 		printk(KERN_ERR "tlclk: Interrupt can't be reserved.\n");
 	else
--

-- 
1.7.4.1

------------------------------------------------------------------------------
Doing More with Less: The Next Generation Virtual Desktop 
What are the key obstacles that have prevented many mid-market businesses
from deploying virtual desktops?   How do next-generation virtual desktops
provide companies an easier-to-deploy, easier-to-manage and more affordable
virtual desktop model.http://www.accelacomm.com/jaw/sfnl/114/51426474/
saikrishna gajula | 4 Aug 20:54
Picon

Re: Openipmi-developer Digest, Vol 58, Issue 1

Hi,

 I am new to IPMI and platform management s/w. I need information
related to porting of ipmi driver as well make use of ipmitool to talk
to new BMC over I2C.

 In breif , i am using freescale processor with I2C controller which
is connected to customized BMC/ShMC  over I2C bus 1.
 Using/inserting the modules  ipmi_msghandler.ko,  ipmi_devintf.ko,
and  ipmi_smb.ko addr=1 slave_addrs=0x61 dbg=1  from monta  vista
kernel.

After making the  mknod   /dev/ipmi0  c  252 0  ( reading from
/proc/devinfo),  using   " ipmitool   -I open -d /dev/ipmi0 " command
to send the command to BMC.

  But i am getting the below error.
Could not open device at  /dev/ipmi0 or /dev/ipmi/0

Please suggest me to communicate to BMC over I2C from from host
processor.  I tried to load i2c-stub.ko driver also by enabling algo
modules and other freaacale I2C chip drivers also.

It is looking like ipmi_open is failing in  ipmi_devintf.c  when
ipmitool tries to open the /dev/ipmi0

Thanks in advance.
krish

On Mon, Aug 1, 2011 at 1:59 PM,
<openipmi-developer-request <at> lists.sourceforge.net> wrote:
> Send Openipmi-developer mailing list submissions to
>        openipmi-developer <at> lists.sourceforge.net
>
> To subscribe or unsubscribe via the World Wide Web, visit
>        https://lists.sourceforge.net/lists/listinfo/openipmi-developer
> or, via email, send a message with subject or body 'help' to
>        openipmi-developer-request <at> lists.sourceforge.net
>
> You can reach the person managing the list at
>        openipmi-developer-owner <at> lists.sourceforge.net
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Openipmi-developer digest..."
>
>
> Today's Topics:
>
>   1. Re: OpenIPMI and RedHat 6 (Corey Minyard)
>   2. Re: OpenIPMI and RedHat 6 (Bob Sauvage)
>   3. Re: OpenIPMI and RedHat 6 (Bob Sauvage)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Fri, 29 Jul 2011 08:57:01 -0500
> From: Corey Minyard <tcminyard <at> gmail.com>
> Subject: Re: [Openipmi-developer] OpenIPMI and RedHat 6
> To: bob.sauvage <at> gmx.fr
> Cc: openipmi-developer <at> lists.sourceforge.net, tcminyard <at> gmail.com
> Message-ID: <4E32BC2D.6070704 <at> acm.org>
> Content-Type: text/plain; charset="iso-8859-1"
>
> On 07/29/2011 03:50 AM, Bob Sauvage wrote:
>> Hello Jan and Corey,
>>
>> First of all, thanks for the provided information.
>>
>> The ipmi service is started :
>>
>> *service ipmi status*
>>
>> ipmi_msghandler module loaded.
>> ipmi_si module loaded.
>> ipmi_devintf module loaded.
>> /dev/ipmi0 does not exist.
>>
>> *Modules are loaded : *
>>
>> Module                  Size  Used by
>> ipmi_devintf            7983  0
>> ipmi_si                42399  0
>> ipmi_msghandler        35958  2 ipmi_devintf,ipmi_si
>>
>> *dmidecode :*
>>
>> System Information
>>         Manufacturer: Supermicro
>>         Product Name: X8SIL
>>
>> IPMI Device Information
>>         Interface Type: KCS (Keyboard Control Style)
>>         Specification Version: 2.0
>>         I2C Slave Address: 0x00
>>         NV Storage Device: Not Present
>>         Base Address: 0x0000000000000CA2 (Memory-mapped)
>>         Register Spacing: Successive Byte Boundaries
>>
>> *Kernel log : *
>>
>> jul 29 10:39:32  kernel: ipmi message handler version 39.2
>> Jul 29 10:39:32  kernel: IPMI System Interface driver.
>> Jul 29 10:39:32  kernel: ipmi_si: Adding SMBIOS-specified kcs state
>> machine
>> Jul 29 10:39:32  kernel: ipmi_si: Trying SMBIOS-specified kcs state
>> machine at mem address 0xca2, slave address 0x0, irq 0
>> Jul 29 10:39:32  kernel: Could not set up I/O space
> This is the issue.  It looks like a bug in your DMI information.  Notice
> that it say the address is 0xca2 and it is memory mapped.  That is
> almost certainly wrong, as you would never have a memory mapped device
> at that address.  It's almost certainly I/O mapped.
>
> You can attempt to work around this by specifying "type=kcs ports=0xca2"
> when modprob-ing ipmi_si:
>
>    rmmod ipmi_si
>    modprobe ipmi_si type=kcs ports=0xca2
>
> Alternately, you can hot-add the device to the running driver using:
>
>    echo "add,kcs,i/o,0xca2" >/sys/module/ipmi_si/parameters/hotmod
>
> And of course, you can complain to your motherboard vendor.
>
> -corey
> -------------- next part --------------
> An HTML attachment was scrubbed...
>
> ------------------------------
>
> Message: 2
> Date: Mon, 01 Aug 2011 10:16:38 +0200
> From: Bob Sauvage <bob.sauvage <at> gmx.fr>
> Subject: Re: [Openipmi-developer] OpenIPMI and RedHat 6
> To: Corey Minyard <tcminyard <at> gmail.com>
> Cc: openipmi-developer <at> lists.sourceforge.net
> Message-ID: <4E3660E6.9060500 <at> gmx.fr>
> Content-Type: text/plain; charset="iso-8859-1"
>
>
> Hi Corey,
>
> Thanks again for your help.
>
> When I try to hot-add the device, I have the following error in the
> kernel log :
>
> Aug  1 10:13:13  kernel: ipmi_si: Adding hotmod-specified kcs state machine
> Aug  1 10:13:13  kernel: ipmi_si: Trying hotmod-specified kcs state
> machine at i/o address 0xca2, slave address 0x20, irq 0
> Aug  1 10:13:13  kernel: ipmi_si: Interface detection failed
>
> When I try the other solution, it does not work.
>
> Any other ideas ?
>
>
> On 07/29/2011 03:57 PM, Corey Minyard wrote:
>> On 07/29/2011 03:50 AM, Bob Sauvage wrote:
>>> Hello Jan and Corey,
>>>
>>> First of all, thanks for the provided information.
>>>
>>> The ipmi service is started :
>>>
>>> *service ipmi status*
>>>
>>> ipmi_msghandler module loaded.
>>> ipmi_si module loaded.
>>> ipmi_devintf module loaded.
>>> /dev/ipmi0 does not exist.
>>>
>>> *Modules are loaded : *
>>>
>>> Module                  Size  Used by
>>> ipmi_devintf            7983  0
>>> ipmi_si                42399  0
>>> ipmi_msghandler        35958  2 ipmi_devintf,ipmi_si
>>>
>>> *dmidecode :*
>>>
>>> System Information
>>>         Manufacturer: Supermicro
>>>         Product Name: X8SIL
>>>
>>> IPMI Device Information
>>>         Interface Type: KCS (Keyboard Control Style)
>>>         Specification Version: 2.0
>>>         I2C Slave Address: 0x00
>>>         NV Storage Device: Not Present
>>>         Base Address: 0x0000000000000CA2 (Memory-mapped)
>>>         Register Spacing: Successive Byte Boundaries
>>>
>>> *Kernel log : *
>>>
>>> jul 29 10:39:32  kernel: ipmi message handler version 39.2
>>> Jul 29 10:39:32  kernel: IPMI System Interface driver.
>>> Jul 29 10:39:32  kernel: ipmi_si: Adding SMBIOS-specified kcs state
>>> machine
>>> Jul 29 10:39:32  kernel: ipmi_si: Trying SMBIOS-specified kcs state
>>> machine at mem address 0xca2, slave address 0x0, irq 0
>>> Jul 29 10:39:32  kernel: Could not set up I/O space
>> This is the issue.  It looks like a bug in your DMI information.
>> Notice that it say the address is 0xca2 and it is memory mapped.  That
>> is almost certainly wrong, as you would never have a memory mapped
>> device at that address.  It's almost certainly I/O mapped.
>>
>> You can attempt to work around this by specifying "type=kcs
>> ports=0xca2" when modprob-ing ipmi_si:
>>
>>     rmmod ipmi_si
>>     modprobe ipmi_si type=kcs ports=0xca2
>>
>> Alternately, you can hot-add the device to the running driver using:
>>
>>     echo "add,kcs,i/o,0xca2" >/sys/module/ipmi_si/parameters/hotmod
>>
>> And of course, you can complain to your motherboard vendor.
>>
>> -corey
> -------------- next part --------------
> An HTML attachment was scrubbed...
>
> ------------------------------
>
> Message: 3
> Date: Mon, 01 Aug 2011 10:28:56 +0200
> From: Bob Sauvage <bob.sauvage <at> gmx.fr>
> Subject: Re: [Openipmi-developer] OpenIPMI and RedHat 6
> To: Corey Minyard <tcminyard <at> gmail.com>
> Cc: openipmi-developer <at> lists.sourceforge.net
> Message-ID: <4E3663C8.4070203 <at> gmx.fr>
> Content-Type: text/plain; charset="iso-8859-1"
>
>
> I found this information in OpenIPMI website :
>
> The SI driver allows up to 4 KCS or SMIC interfaces to be configured
> in the system.  By default, scan the ACPI tables for interfaces, and
> if it doesn't find any the driver will attempt to register one KCS
> interface at the spec-specified I/O port 0xca2 without interrupts.
>
>
> What does it mean ? Why did it not find any interface ?
>
> On 08/01/2011 10:16 AM, Bob Sauvage wrote:
>>
>> Hi Corey,
>>
>> Thanks again for your help.
>>
>> When I try to hot-add the device, I have the following error in the
>> kernel log :
>>
>> Aug  1 10:13:13  kernel: ipmi_si: Adding hotmod-specified kcs state
>> machine
>> Aug  1 10:13:13  kernel: ipmi_si: Trying hotmod-specified kcs state
>> machine at i/o address 0xca2, slave address 0x20, irq 0
>> Aug  1 10:13:13  kernel: ipmi_si: Interface detection failed
>>
>> When I try the other solution, it does not work.
>>
>> Any other ideas ?
>>
>>
>> On 07/29/2011 03:57 PM, Corey Minyard wrote:
>>> On 07/29/2011 03:50 AM, Bob Sauvage wrote:
>>>> Hello Jan and Corey,
>>>>
>>>> First of all, thanks for the provided information.
>>>>
>>>> The ipmi service is started :
>>>>
>>>> *service ipmi status*
>>>>
>>>> ipmi_msghandler module loaded.
>>>> ipmi_si module loaded.
>>>> ipmi_devintf module loaded.
>>>> /dev/ipmi0 does not exist.
>>>>
>>>> *Modules are loaded : *
>>>>
>>>> Module                  Size  Used by
>>>> ipmi_devintf            7983  0
>>>> ipmi_si                42399  0
>>>> ipmi_msghandler        35958  2 ipmi_devintf,ipmi_si
>>>>
>>>> *dmidecode :*
>>>>
>>>> System Information
>>>>         Manufacturer: Supermicro
>>>>         Product Name: X8SIL
>>>>
>>>> IPMI Device Information
>>>>         Interface Type: KCS (Keyboard Control Style)
>>>>         Specification Version: 2.0
>>>>         I2C Slave Address: 0x00
>>>>         NV Storage Device: Not Present
>>>>         Base Address: 0x0000000000000CA2 (Memory-mapped)
>>>>         Register Spacing: Successive Byte Boundaries
>>>>
>>>> *Kernel log : *
>>>>
>>>> jul 29 10:39:32  kernel: ipmi message handler version 39.2
>>>> Jul 29 10:39:32  kernel: IPMI System Interface driver.
>>>> Jul 29 10:39:32  kernel: ipmi_si: Adding SMBIOS-specified kcs state
>>>> machine
>>>> Jul 29 10:39:32  kernel: ipmi_si: Trying SMBIOS-specified kcs state
>>>> machine at mem address 0xca2, slave address 0x0, irq 0
>>>> Jul 29 10:39:32  kernel: Could not set up I/O space
>>> This is the issue.  It looks like a bug in your DMI information.
>>> Notice that it say the address is 0xca2 and it is memory mapped.
>>> That is almost certainly wrong, as you would never have a memory
>>> mapped device at that address.  It's almost certainly I/O mapped.
>>>
>>> You can attempt to work around this by specifying "type=kcs
>>> ports=0xca2" when modprob-ing ipmi_si:
>>>
>>>     rmmod ipmi_si
>>>     modprobe ipmi_si type=kcs ports=0xca2
>>>
>>> Alternately, you can hot-add the device to the running driver using:
>>>
>>>     echo "add,kcs,i/o,0xca2" >/sys/module/ipmi_si/parameters/hotmod
>>>
>>> And of course, you can complain to your motherboard vendor.
>>>
>>> -corey
>>
>>
>> ------------------------------------------------------------------------------
>> Got Input?   Slashdot Needs You.
>> Take our quick survey online.  Come on, we don't ask for help often.
>> Plus, you'll get a chance to win $100 to spend on ThinkGeek.
>> http://p.sf.net/sfu/slashdot-survey
>>
>>
>> _______________________________________________
>> Openipmi-developer mailing list
>> Openipmi-developer <at> lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/openipmi-developer
> -------------- next part --------------
> An HTML attachment was scrubbed...
>
> ------------------------------
>
> ------------------------------------------------------------------------------
> Got Input?   Slashdot Needs You.
> Take our quick survey online.  Come on, we don't ask for help often.
> Plus, you'll get a chance to win $100 to spend on ThinkGeek.
> http://p.sf.net/sfu/slashdot-survey
>
>
> ------------------------------
>
> _______________________________________________
> Openipmi-developer mailing list
> Openipmi-developer <at> lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openipmi-developer
>
>
> End of Openipmi-developer Digest, Vol 58, Issue 1
> *************************************************
>

------------------------------------------------------------------------------
BlackBerry&reg; DevCon Americas, Oct. 18-20, San Francisco, CA
The must-attend event for mobile developers. Connect with experts. 
Get tools for creating Super Apps. See the latest technologies.
Sessions, hands-on labs, demos & much more. Register early & save!
http://p.sf.net/sfu/rim-blackberry-1
Bob Sauvage | 28 Jul 18:02
Picon
Favicon

OpenIPMI and RedHat 6

Hello *

New to IPMI world, I want to get info about fans and temperatures of my 
server.

My server is running under RHEL 6 with this kernel : 
/2.6.32-131.6.1.el6.x86_64./

I installed this OpenIPMI package : /OpenIPMI.x86_64 2.0.16-12.el6/ and 
this ipmitool package : /ipmitool.x86_64 1.8.11-7.el6/.

But when I launch this command, it fails :

/ipmitool sel list
Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No 
such file or directory
Get SEL Info command failed/

It seems that the driver is not correctly binded to the device ?

Someone can help me ?

Thanks a lot !

------------------------------------------------------------------------------
Got Input?   Slashdot Needs You.
Take our quick survey online.  Come on, we don't ask for help often.
Plus, you'll get a chance to win $100 to spend on ThinkGeek.
http://p.sf.net/sfu/slashdot-survey
Alexey Dobriyan | 13 May 22:13
Picon

[PATCH] ipmi: convert to seq_file interface

->read_proc interface is going away, convert to seq_file.

Signed-off-by: Alexey Dobriyan <adobriyan <at> gmail.com>
---

 drivers/char/ipmi/ipmi_msghandler.c |  138 +++++++++++++++++++++---------------
 drivers/char/ipmi/ipmi_si_intf.c    |   88 +++++++++++++++-------
 include/linux/ipmi_smi.h            |    2 
 3 files changed, 142 insertions(+), 86 deletions(-)

--- a/drivers/char/ipmi/ipmi_msghandler.c
+++ b/drivers/char/ipmi/ipmi_msghandler.c
@@ -36,6 +36,7 @@
 #include <asm/system.h>
 #include <linux/poll.h>
 #include <linux/sched.h>
+#include <linux/seq_file.h>
 #include <linux/spinlock.h>
 #include <linux/mutex.h>
 #include <linux/slab.h>
@@ -1896,102 +1897,128 @@ int ipmi_request_supply_msgs(ipmi_user_t          user,
 EXPORT_SYMBOL(ipmi_request_supply_msgs);

 #ifdef CONFIG_PROC_FS
-static int ipmb_file_read_proc(char *page, char **start, off_t off,
-			       int count, int *eof, void *data)
+static int smi_ipmb_proc_show(struct seq_file *m, void *v)
 {
-	char       *out = (char *) page;
-	ipmi_smi_t intf = data;
+	ipmi_smi_t intf = m->private;
 	int        i;
-	int        rv = 0;

-	for (i = 0; i < IPMI_MAX_CHANNELS; i++)
-		rv += sprintf(out+rv, "%x ", intf->channels[i].address);
-	out[rv-1] = '\n'; /* Replace the final space with a newline */
-	out[rv] = '\0';
-	rv++;
-	return rv;
+	seq_printf(m, "%x", intf->channels[0].address);
+	for (i = 1; i < IPMI_MAX_CHANNELS; i++)
+		seq_printf(m, " %x", intf->channels[i].address);
+	return seq_putc(m, '\n');
 }

-static int version_file_read_proc(char *page, char **start, off_t off,
-				  int count, int *eof, void *data)
+static int smi_ipmb_proc_open(struct inode *inode, struct file *file)
 {
-	char       *out = (char *) page;
-	ipmi_smi_t intf = data;
+	return single_open(file, smi_ipmb_proc_show, PDE(inode)->data);
+}

-	return sprintf(out, "%u.%u\n",
+static const struct file_operations smi_ipmb_proc_ops = {
+	.open		= smi_ipmb_proc_open,
+	.read		= seq_read,
+	.llseek		= seq_lseek,
+	.release	= single_release,
+};
+
+static int smi_version_proc_show(struct seq_file *m, void *v)
+{
+	ipmi_smi_t intf = m->private;
+
+	return seq_printf(m, "%u.%u\n",
 		       ipmi_version_major(&intf->bmc->id),
 		       ipmi_version_minor(&intf->bmc->id));
 }

-static int stat_file_read_proc(char *page, char **start, off_t off,
-			       int count, int *eof, void *data)
+static int smi_version_proc_open(struct inode *inode, struct file *file)
 {
-	char       *out = (char *) page;
-	ipmi_smi_t intf = data;
+	return single_open(file, smi_version_proc_show, PDE(inode)->data);
+}
+
+static const struct file_operations smi_version_proc_ops = {
+	.open		= smi_version_proc_open,
+	.read		= seq_read,
+	.llseek		= seq_lseek,
+	.release	= single_release,
+};

-	out += sprintf(out, "sent_invalid_commands:       %u\n",
+static int smi_stats_proc_show(struct seq_file *m, void *v)
+{
+	ipmi_smi_t intf = m->private;
+
+	seq_printf(m, "sent_invalid_commands:       %u\n",
 		       ipmi_get_stat(intf, sent_invalid_commands));
-	out += sprintf(out, "sent_local_commands:         %u\n",
+	seq_printf(m, "sent_local_commands:         %u\n",
 		       ipmi_get_stat(intf, sent_local_commands));
-	out += sprintf(out, "handled_local_responses:     %u\n",
+	seq_printf(m, "handled_local_responses:     %u\n",
 		       ipmi_get_stat(intf, handled_local_responses));
-	out += sprintf(out, "unhandled_local_responses:   %u\n",
+	seq_printf(m, "unhandled_local_responses:   %u\n",
 		       ipmi_get_stat(intf, unhandled_local_responses));
-	out += sprintf(out, "sent_ipmb_commands:          %u\n",
+	seq_printf(m, "sent_ipmb_commands:          %u\n",
 		       ipmi_get_stat(intf, sent_ipmb_commands));
-	out += sprintf(out, "sent_ipmb_command_errs:      %u\n",
+	seq_printf(m, "sent_ipmb_command_errs:      %u\n",
 		       ipmi_get_stat(intf, sent_ipmb_command_errs));
-	out += sprintf(out, "retransmitted_ipmb_commands: %u\n",
+	seq_printf(m, "retransmitted_ipmb_commands: %u\n",
 		       ipmi_get_stat(intf, retransmitted_ipmb_commands));
-	out += sprintf(out, "timed_out_ipmb_commands:     %u\n",
+	seq_printf(m, "timed_out_ipmb_commands:     %u\n",
 		       ipmi_get_stat(intf, timed_out_ipmb_commands));
-	out += sprintf(out, "timed_out_ipmb_broadcasts:   %u\n",
+	seq_printf(m, "timed_out_ipmb_broadcasts:   %u\n",
 		       ipmi_get_stat(intf, timed_out_ipmb_broadcasts));
-	out += sprintf(out, "sent_ipmb_responses:         %u\n",
+	seq_printf(m, "sent_ipmb_responses:         %u\n",
 		       ipmi_get_stat(intf, sent_ipmb_responses));
-	out += sprintf(out, "handled_ipmb_responses:      %u\n",
+	seq_printf(m, "handled_ipmb_responses:      %u\n",
 		       ipmi_get_stat(intf, handled_ipmb_responses));
-	out += sprintf(out, "invalid_ipmb_responses:      %u\n",
+	seq_printf(m, "invalid_ipmb_responses:      %u\n",
 		       ipmi_get_stat(intf, invalid_ipmb_responses));
-	out += sprintf(out, "unhandled_ipmb_responses:    %u\n",
+	seq_printf(m, "unhandled_ipmb_responses:    %u\n",
 		       ipmi_get_stat(intf, unhandled_ipmb_responses));
-	out += sprintf(out, "sent_lan_commands:           %u\n",
+	seq_printf(m, "sent_lan_commands:           %u\n",
 		       ipmi_get_stat(intf, sent_lan_commands));
-	out += sprintf(out, "sent_lan_command_errs:       %u\n",
+	seq_printf(m, "sent_lan_command_errs:       %u\n",
 		       ipmi_get_stat(intf, sent_lan_command_errs));
-	out += sprintf(out, "retransmitted_lan_commands:  %u\n",
+	seq_printf(m, "retransmitted_lan_commands:  %u\n",
 		       ipmi_get_stat(intf, retransmitted_lan_commands));
-	out += sprintf(out, "timed_out_lan_commands:      %u\n",
+	seq_printf(m, "timed_out_lan_commands:      %u\n",
 		       ipmi_get_stat(intf, timed_out_lan_commands));
-	out += sprintf(out, "sent_lan_responses:          %u\n",
+	seq_printf(m, "sent_lan_responses:          %u\n",
 		       ipmi_get_stat(intf, sent_lan_responses));
-	out += sprintf(out, "handled_lan_responses:       %u\n",
+	seq_printf(m, "handled_lan_responses:       %u\n",
 		       ipmi_get_stat(intf, handled_lan_responses));
-	out += sprintf(out, "invalid_lan_responses:       %u\n",
+	seq_printf(m, "invalid_lan_responses:       %u\n",
 		       ipmi_get_stat(intf, invalid_lan_responses));
-	out += sprintf(out, "unhandled_lan_responses:     %u\n",
+	seq_printf(m, "unhandled_lan_responses:     %u\n",
 		       ipmi_get_stat(intf, unhandled_lan_responses));
-	out += sprintf(out, "handled_commands:            %u\n",
+	seq_printf(m, "handled_commands:            %u\n",
 		       ipmi_get_stat(intf, handled_commands));
-	out += sprintf(out, "invalid_commands:            %u\n",
+	seq_printf(m, "invalid_commands:            %u\n",
 		       ipmi_get_stat(intf, invalid_commands));
-	out += sprintf(out, "unhandled_commands:          %u\n",
+	seq_printf(m, "unhandled_commands:          %u\n",
 		       ipmi_get_stat(intf, unhandled_commands));
-	out += sprintf(out, "invalid_events:              %u\n",
+	seq_printf(m, "invalid_events:              %u\n",
 		       ipmi_get_stat(intf, invalid_events));
-	out += sprintf(out, "events:                      %u\n",
+	seq_printf(m, "events:                      %u\n",
 		       ipmi_get_stat(intf, events));
-	out += sprintf(out, "failed rexmit LAN msgs:      %u\n",
+	seq_printf(m, "failed rexmit LAN msgs:      %u\n",
 		       ipmi_get_stat(intf, dropped_rexmit_lan_commands));
-	out += sprintf(out, "failed rexmit IPMB msgs:     %u\n",
+	seq_printf(m, "failed rexmit IPMB msgs:     %u\n",
 		       ipmi_get_stat(intf, dropped_rexmit_ipmb_commands));
+	return 0;
+}

-	return (out - ((char *) page));
+static int smi_stats_proc_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, smi_stats_proc_show, PDE(inode)->data);
 }
+
+static const struct file_operations smi_stats_proc_ops = {
+	.open		= smi_stats_proc_open,
+	.read		= seq_read,
+	.llseek		= seq_lseek,
+	.release	= single_release,
+};
 #endif /* CONFIG_PROC_FS */

 int ipmi_smi_add_proc_entry(ipmi_smi_t smi, char *name,
-			    read_proc_t *read_proc,
+			    const struct file_operations *proc_ops,
 			    void *data)
 {
 	int                    rv = 0;
@@ -2010,15 +2037,12 @@ int ipmi_smi_add_proc_entry(ipmi_smi_t smi, char *name,
 	}
 	strcpy(entry->name, name);

-	file = create_proc_entry(name, 0, smi->proc_dir);
+	file = proc_create_data(name, 0, smi->proc_dir, proc_ops, data);
 	if (!file) {
 		kfree(entry->name);
 		kfree(entry);
 		rv = -ENOMEM;
 	} else {
-		file->data = data;
-		file->read_proc = read_proc;
-
 		mutex_lock(&smi->proc_entry_lock);
 		/* Stick it on the list. */
 		entry->next = smi->proc_entries;
@@ -2043,17 +2067,17 @@ static int add_proc_entries(ipmi_smi_t smi, int num)

 	if (rv == 0)
 		rv = ipmi_smi_add_proc_entry(smi, "stats",
-					     stat_file_read_proc,
+					     &smi_stats_proc_ops,
 					     smi);

 	if (rv == 0)
 		rv = ipmi_smi_add_proc_entry(smi, "ipmb",
-					     ipmb_file_read_proc,
+					     &smi_ipmb_proc_ops,
 					     smi);

 	if (rv == 0)
 		rv = ipmi_smi_add_proc_entry(smi, "version",
-					     version_file_read_proc,
+					     &smi_version_proc_ops,
 					     smi);
 #endif /* CONFIG_PROC_FS */

--- a/drivers/char/ipmi/ipmi_si_intf.c
+++ b/drivers/char/ipmi/ipmi_si_intf.c
@@ -43,6 +43,7 @@
 #include <linux/moduleparam.h>
 #include <asm/system.h>
 #include <linux/sched.h>
+#include <linux/seq_file.h>
 #include <linux/timer.h>
 #include <linux/errno.h>
 #include <linux/spinlock.h>
@@ -2802,54 +2803,73 @@ static int try_enable_event_buffer(struct smi_info *smi_info)
 	return rv;
 }

-static int type_file_read_proc(char *page, char **start, off_t off,
-			       int count, int *eof, void *data)
+static int smi_type_proc_show(struct seq_file *m, void *v)
 {
-	struct smi_info *smi = data;
+	struct smi_info *smi = m->private;

-	return sprintf(page, "%s\n", si_to_str[smi->si_type]);
+	return seq_printf(m, "%s\n", si_to_str[smi->si_type]);
 }

-static int stat_file_read_proc(char *page, char **start, off_t off,
-			       int count, int *eof, void *data)
+static int smi_type_proc_open(struct inode *inode, struct file *file)
 {
-	char            *out = (char *) page;
-	struct smi_info *smi = data;
+	return single_open(file, smi_type_proc_show, PDE(inode)->data);
+}
+
+static const struct file_operations smi_type_proc_ops = {
+	.open		= smi_type_proc_open,
+	.read		= seq_read,
+	.llseek		= seq_lseek,
+	.release	= single_release,
+};
+
+static int smi_si_stats_proc_show(struct seq_file *m, void *v)
+{
+	struct smi_info *smi = m->private;

-	out += sprintf(out, "interrupts_enabled:    %d\n",
+	seq_printf(m, "interrupts_enabled:    %d\n",
 		       smi->irq && !smi->interrupt_disabled);
-	out += sprintf(out, "short_timeouts:        %u\n",
+	seq_printf(m, "short_timeouts:        %u\n",
 		       smi_get_stat(smi, short_timeouts));
-	out += sprintf(out, "long_timeouts:         %u\n",
+	seq_printf(m, "long_timeouts:         %u\n",
 		       smi_get_stat(smi, long_timeouts));
-	out += sprintf(out, "idles:                 %u\n",
+	seq_printf(m, "idles:                 %u\n",
 		       smi_get_stat(smi, idles));
-	out += sprintf(out, "interrupts:            %u\n",
+	seq_printf(m, "interrupts:            %u\n",
 		       smi_get_stat(smi, interrupts));
-	out += sprintf(out, "attentions:            %u\n",
+	seq_printf(m, "attentions:            %u\n",
 		       smi_get_stat(smi, attentions));
-	out += sprintf(out, "flag_fetches:          %u\n",
+	seq_printf(m, "flag_fetches:          %u\n",
 		       smi_get_stat(smi, flag_fetches));
-	out += sprintf(out, "hosed_count:           %u\n",
+	seq_printf(m, "hosed_count:           %u\n",
 		       smi_get_stat(smi, hosed_count));
-	out += sprintf(out, "complete_transactions: %u\n",
+	seq_printf(m, "complete_transactions: %u\n",
 		       smi_get_stat(smi, complete_transactions));
-	out += sprintf(out, "events:                %u\n",
+	seq_printf(m, "events:                %u\n",
 		       smi_get_stat(smi, events));
-	out += sprintf(out, "watchdog_pretimeouts:  %u\n",
+	seq_printf(m, "watchdog_pretimeouts:  %u\n",
 		       smi_get_stat(smi, watchdog_pretimeouts));
-	out += sprintf(out, "incoming_messages:     %u\n",
+	seq_printf(m, "incoming_messages:     %u\n",
 		       smi_get_stat(smi, incoming_messages));
+	return 0;
+}

-	return out - page;
+static int smi_si_stats_proc_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, smi_si_stats_proc_show, PDE(inode)->data);
 }

-static int param_read_proc(char *page, char **start, off_t off,
-			   int count, int *eof, void *data)
+static const struct file_operations smi_si_stats_proc_ops = {
+	.open		= smi_si_stats_proc_open,
+	.read		= seq_read,
+	.llseek		= seq_lseek,
+	.release	= single_release,
+};
+
+static int smi_params_proc_show(struct seq_file *m, void *v)
 {
-	struct smi_info *smi = data;
+	struct smi_info *smi = m->private;

-	return sprintf(page,
+	return seq_printf(m,
 		       "%s,%s,0x%lx,rsp=%d,rsi=%d,rsh=%d,irq=%d,ipmb=%d\n",
 		       si_to_str[smi->si_type],
 		       addr_space_to_str[smi->io.addr_type],
@@ -2861,6 +2881,18 @@ static int param_read_proc(char *page, char **start, off_t off,
 		       smi->slave_addr);
 }

+static int smi_params_proc_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, smi_params_proc_show, PDE(inode)->data);
+}
+
+static const struct file_operations smi_params_proc_ops = {
+	.open		= smi_params_proc_open,
+	.read		= seq_read,
+	.llseek		= seq_lseek,
+	.release	= single_release,
+};
+
 /*
  * oem_data_avail_to_receive_msg_avail
  * @info - smi_info structure with msg_flags set
@@ -3254,7 +3286,7 @@ static int try_smi_init(struct smi_info *new_smi)
 	}

 	rv = ipmi_smi_add_proc_entry(new_smi->intf, "type",
-				     type_file_read_proc,
+				     &smi_type_proc_ops,
 				     new_smi);
 	if (rv) {
 		dev_err(new_smi->dev, "Unable to create proc entry: %d\n", rv);
@@ -3262,7 +3294,7 @@ static int try_smi_init(struct smi_info *new_smi)
 	}

 	rv = ipmi_smi_add_proc_entry(new_smi->intf, "si_stats",
-				     stat_file_read_proc,
+				     &smi_si_stats_proc_ops,
 				     new_smi);
 	if (rv) {
 		dev_err(new_smi->dev, "Unable to create proc entry: %d\n", rv);
@@ -3270,7 +3302,7 @@ static int try_smi_init(struct smi_info *new_smi)
 	}

 	rv = ipmi_smi_add_proc_entry(new_smi->intf, "params",
-				     param_read_proc,
+				     &smi_params_proc_ops,
 				     new_smi);
 	if (rv) {
 		dev_err(new_smi->dev, "Unable to create proc entry: %d\n", rv);
--- a/include/linux/ipmi_smi.h
+++ b/include/linux/ipmi_smi.h
@@ -236,7 +236,7 @@ static inline void ipmi_free_smi_msg(struct ipmi_smi_msg *msg)
    directory for this interface.  Note that the entry will
    automatically be dstroyed when the interface is destroyed. */
 int ipmi_smi_add_proc_entry(ipmi_smi_t smi, char *name,
-			    read_proc_t *read_proc,
+			    const struct file_operations *proc_ops,
 			    void *data);

 #endif /* __LINUX_IPMI_SMI_H */

------------------------------------------------------------------------------
What Every C/C++ and Fortran developer Should Know!
Read this article and learn how Intel has extended the reach of its 
next-generation tools to help Windows* and Linux* C/C++ and Fortran 
developers boost performance applications - including clusters. 
http://p.sf.net/sfu/intel-dev2devmay

Gmane