提交 55162fb1 编写于 作者: C Corey Minyard 提交者: Linus Torvalds

[PATCH] IPMI: fix request events

When the IPMI message handler requested that the interface look for events,
the ipmi_si driver would request flags, see if the event buffer full flag was
set, then request events.  It's better to just send the request for events, as
it cuts one message out of the transaction if there happens to be events, and
it will fetch events even if the event buffer was not full.
Signed-off-by: NCorey Minyard <minyard@acm.org>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 b9675136
...@@ -684,22 +684,24 @@ static enum si_sm_result smi_event_handler(struct smi_info *smi_info, ...@@ -684,22 +684,24 @@ static enum si_sm_result smi_event_handler(struct smi_info *smi_info,
{ {
/* We are idle and the upper layer requested that I fetch /* We are idle and the upper layer requested that I fetch
events, so do so. */ events, so do so. */
unsigned char msg[2]; atomic_set(&smi_info->req_events, 0);
spin_lock(&smi_info->count_lock); smi_info->curr_msg = ipmi_alloc_smi_msg();
smi_info->flag_fetches++; if (!smi_info->curr_msg)
spin_unlock(&smi_info->count_lock); goto out;
atomic_set(&smi_info->req_events, 0); smi_info->curr_msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
msg[0] = (IPMI_NETFN_APP_REQUEST << 2); smi_info->curr_msg->data[1] = IPMI_READ_EVENT_MSG_BUFFER_CMD;
msg[1] = IPMI_GET_MSG_FLAGS_CMD; smi_info->curr_msg->data_size = 2;
smi_info->handlers->start_transaction( smi_info->handlers->start_transaction(
smi_info->si_sm, msg, 2); smi_info->si_sm,
smi_info->si_state = SI_GETTING_FLAGS; smi_info->curr_msg->data,
smi_info->curr_msg->data_size);
smi_info->si_state = SI_GETTING_EVENTS;
goto restart; goto restart;
} }
out:
return si_sm_result; return si_sm_result;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册