]> git.hungrycats.org Git - linux/commitdiff
[PATCH] Minor IPMI driver updates
authorCorey Minyard <minyard@acm.org>
Fri, 21 Jan 2005 00:08:29 +0000 (16:08 -0800)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Fri, 21 Jan 2005 00:08:29 +0000 (16:08 -0800)
This patch fixes counting of unhandled messages.  Messages that were
handled internally by the driver (to the NULL user) were miscounted as
unhanlded responses.  This counts them properly.

This patch also fixes the DMI 16-byte setting, which was set as a 16-bit
setting.

It also uses the right value to initilize the address memory when using a
memory-based interface.

Signed-off-by: Corey Minyard <minyard@acm.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/char/ipmi/ipmi_msghandler.c
drivers/char/ipmi/ipmi_si_intf.c

index 30ddedd57bec344753341a72fc00e67da10d47ad..e5f9deae529e13f579c017bd7aeba487007a65e2 100644 (file)
@@ -2301,12 +2301,17 @@ static int handle_bmc_rsp(ipmi_smi_t          intf,
 
        if (!found) {
                /* Special handling for NULL users. */
-               if (!recv_msg->user && intf->null_user_handler)
+               if (!recv_msg->user && intf->null_user_handler){
                        intf->null_user_handler(intf, msg);
-               /* The user for the message went away, so give up. */
-               spin_lock_irqsave(&intf->counter_lock, flags);
-               intf->unhandled_local_responses++;
-               spin_unlock_irqrestore(&intf->counter_lock, flags);
+                       spin_lock_irqsave(&intf->counter_lock, flags);
+                       intf->handled_local_responses++;
+                       spin_unlock_irqrestore(&intf->counter_lock, flags);
+               }else{
+                       /* The user for the message went away, so give up. */
+                       spin_lock_irqsave(&intf->counter_lock, flags);
+                       intf->unhandled_local_responses++;
+                       spin_unlock_irqrestore(&intf->counter_lock, flags);
+               }
                ipmi_free_recv_msg(recv_msg);
        } else {
                struct ipmi_system_interface_addr *smi_addr;
index 7e83d48fd759e33cdf0359f74df778a782c2afeb..9a5894d0cf079d99aec4583b785b615f94931a30 100644 (file)
@@ -1299,7 +1299,7 @@ static int try_init_mem(int intf_num, struct smi_info **new_info)
        memset(info, 0, sizeof(*info));
 
        info->io_setup = mem_setup;
-       info->io.info = (void *) addrs[intf_num];
+       info->io.info = &addrs[intf_num];
        info->io.addr = NULL;
        info->io.regspacing = regspacings[intf_num];
        if (!info->io.regspacing)
@@ -1587,8 +1587,9 @@ static int decode_dmi(dmi_header_t *dm, dmi_ipmi_data_t *ipmi_data)
        case 0x01: /* 32-bit boundaries */
                ipmi_data->offset = 4;
                break;
-       case 0x02: /* 16-bit boundaries */
-               ipmi_data->offset = 2;
+       case 0x02: /* 16-byte boundaries */
+               ipmi_data->offset = 16;
+               break;
        default:
                printk("ipmi_si: Unknown SMBIOS IPMI Base Addr"
                       " Modifier: 0x%x\n", reg_spacing);