Changeset 2987

Show
Ignore:
Timestamp:
05/04/05 22:21:01 (8 years ago)
Author:
mds
Message:

(mds)

On 5/1/05, Sergey Vlasov <vsu@…> wrote:

Hello!

 http://openipmi.sourceforge.net/ provides patches for 2.4.x kernels
with updated IPMI code. However, these patches change the IPMI driver
API by adding an additional argument to ipmi_request():

int ipmi_request(ipmi_user_t user,
struct ipmi_addr *addr,
long msgid,
struct ipmi_msg *msg,
+ void *user_msg_data,
int priority);

(user_msg_data is later returned in the struct ipmi_recv_msg field).
This API change breaks compilation of some lm_sensors drivers
(i2c-ipmb, i2c-ipmi).

The patch below adds compatibility with the new IPMI API to i2c-ipmb
and i2c-ipmi drivers. <linux/ipmi.h> does not provide a real
API-version #define, therefore IPMI_RESPONSE_RESPONSE_TYPE (also added
by the openipmi.sf.net patch) is (ab)used as a new API indicator.

Compile tested only due to lack of hardware.

(Yani I.):

Hi Sergey,

Actually there was a patch to the 2.6 i2c-ipmi/bmcsensors for this
problem (after Bene Martin notified me of the problem and how to fix
it), but from what I understand Corey re-included the ipmi_request
method in the next version once he learned of a driver using it (it
was removed because there was thought to be no usage). He was eager to
learn when bmcsensors would make it into the kernel so that he could
stop being nagged by the 'unused function police' as he put it .

It might be wise to apply a patch like this in 2.4 to support the
openipmi that went 'wrong', I changed the 2.6 driver to use the
ipmi_request_settime function to no ill effect, but you should
consider that Corey notes that it is preferred to use the old one:

(extract from some e-mail between Corey, Martin and I about the problem):

Interestingly enough the ipmi_request_settime still has a comment in
the header "Don't use this unless you *really* have to.", making me
wonder if there is a reason not to be using it instead of ipmi_request
if its re-incorporated into the kernel.




I guess the only one qualified to answer that one would be corey.

Bye, Martin



You wouldn't generally use it because it sets the timeouts and for most
purposes the timeouts are defined by the spec (sort of).

Do you have any feeling when the BMC sensors package will go into the
mainstream kernel? That would be the time to coordinate adding the
normal function back in so I'm not constantly fighting the unused
function police.

-Corey

Location:
lm-sensors/trunk/kernel/busses
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/trunk/kernel/busses/i2c-ipmb.c

    r1721 r2987  
    8888        int err; 
    8989 
    90         if((err = ipmi_request(i2c_ipmb_user, address, id, msg, 0))) 
     90#ifdef IPMI_RESPONSE_RESPONSE_TYPE 
     91        err = ipmi_request(i2c_ipmb_user, address, id, msg, NULL, 0); 
     92#else 
     93        err = ipmi_request(i2c_ipmb_user, address, id, msg, 0); 
     94#endif 
     95        if (err) 
    9196                printk(KERN_INFO "i2c-ipmb.o: ipmi_request error %d\n", 
    9297                        err); 
  • lm-sensors/trunk/kernel/busses/i2c-ipmi.c

    r2884 r2987  
    9898static void ipmi_i2c_send_message(int id, struct ipmi_msg * msg) 
    9999{ 
     100#ifdef IPMI_RESPONSE_RESPONSE_TYPE 
     101        ipmi_request(i2c_ipmi_user, &address, (long) id, msg, NULL, 0); 
     102#else 
    100103        ipmi_request(i2c_ipmi_user, &address, (long) id, msg, 0); 
     104#endif 
    101105} 
    102106