diff --git a/vmkdrivers/src_9/drivers/char/openipmi/ipmi_si_drv/ipmi_si_intf.c b/vmkdrivers/src_9/drivers/char/openipmi/ipmi_si_drv/ipmi_si_intf.c index 9f149d33124896337b9c06a22f65bfb80a802aa8..17e14f2fac42857f58e733aee84bef25e9288a21 100644 --- a/vmkdrivers/src_9/drivers/char/openipmi/ipmi_si_drv/ipmi_si_intf.c +++ b/vmkdrivers/src_9/drivers/char/openipmi/ipmi_si_drv/ipmi_si_intf.c @@ -307,7 +307,11 @@ static void return_hosed_msg(struct smi_info *smi_info, int cCode) msg->rsp_size = 3; smi_info->curr_msg = NULL; + + /* To fix #PR 889881*/ + spin_unlock(&(smi_info->msg_lock)); deliver_recv_msg(smi_info, msg); + spin_lock(&(smi_info->msg_lock)); } static enum si_sm_result start_next_msg(struct smi_info *smi_info) @@ -767,7 +771,10 @@ static enum si_sm_result smi_event_handler(struct smi_info *smi_info, /* If we were handling a user message, format a response to send to the upper layer to tell it about the error. */ + /* To fix #PR 889881*/ + spin_lock(&(smi_info->msg_lock)); return_hosed_msg(smi_info, IPMI_ERR_UNSPECIFIED); + spin_unlock(&(smi_info->msg_lock)); } si_sm_result = smi_info->handlers->event(smi_info->si_sm, 0); }