From: Corey Minyard 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 Signed-off-by: Andrew Morton --- 25-akpm/drivers/char/ipmi/ipmi_msghandler.c | 15 ++++++++++----- 25-akpm/drivers/char/ipmi/ipmi_si_intf.c | 7 ++++--- 2 files changed, 14 insertions(+), 8 deletions(-) diff -puN drivers/char/ipmi/ipmi_msghandler.c~minor-ipmi-driver-updates drivers/char/ipmi/ipmi_msghandler.c --- 25/drivers/char/ipmi/ipmi_msghandler.c~minor-ipmi-driver-updates Wed Jan 19 15:42:32 2005 +++ 25-akpm/drivers/char/ipmi/ipmi_msghandler.c Wed Jan 19 15:42:32 2005 @@ -2301,12 +2301,17 @@ static int handle_bmc_rsp(ipmi_smi_t 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; diff -puN drivers/char/ipmi/ipmi_si_intf.c~minor-ipmi-driver-updates drivers/char/ipmi/ipmi_si_intf.c --- 25/drivers/char/ipmi/ipmi_si_intf.c~minor-ipmi-driver-updates Wed Jan 19 15:42:32 2005 +++ 25-akpm/drivers/char/ipmi/ipmi_si_intf.c Wed Jan 19 15:42:32 2005 @@ -1299,7 +1299,7 @@ static int try_init_mem(int intf_num, st 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, 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); _