So I'm still chasing this issue.
I have added some debugs into ipmi_si_intf.c : handle_transaction_done().
I reproduced the error and got the log messages.
Below are my mods to handle_transaction_done() (I have hacked lots of other
places too).
Below that are the log messages.
static void handle_transaction_done(struct smi_info *smi_info)
{
struct ipmi_smi_msg *msg;
struct ipmi_recv_msg *recv_msg;
unsigned long user;
#ifdef DEBUG_TIMING
struct timeval t;
#endif
switch (smi_info->si_state) {
case SI_NORMAL:
if (!smi_info->curr_msg)
break;
smi_info->curr_msg->rsp_size
= smi_info->handlers->get_result(
smi_info->si_sm,
smi_info->curr_msg->rsp,
IPMI_MAX_MSG_LENGTH, &user);
/* check that the user for the current result matches
* the user in the current smi message info.
*/
if (user != ((unsigned long) smi_info->curr_msg)) {
printk(KERN_ERR "%s:line:%d users queue link does not
match\n",
__FUNCTION__, __LINE__);
}
/* check that smi msg msgid == ipmi msgid */
recv_msg = (struct ipmi_recv_msg *)
smi_info->curr_msg->user_data;
if (recv_msg && (recv_msg->msgid != smi_info->curr_msg->msgid))
{
printk(KERN_ERR "%s: ipmi msgid %ld does not match smi
msgid %ld\n",
__FUNCTION__, recv_msg->msgid,
smi_info->curr_msg->msgid);
}
/* check req and rsp match between smi msg->data[] and smi
msg->rsp[] */
if ((smi_info->curr_msg->data[0] >> 2) !=
((smi_info->curr_msg->rsp[0] >> 2) & 0xFE)) {
printk(KERN_ERR "%s: ipmi_smi_msg error. expected
netfn:%x cmd:%x, got netfn:%x cmd:%x msgid:%ld\n",
__FUNCTION__, (smi_info->curr_msg->data[0] >> 2) | 1,
smi_info->curr_msg->data[1],
(smi_info->curr_msg->rsp[0] >> 2), smi_info->curr_msg->rsp[1],
smi_info->curr_msg->msgid);
smi_inc_stat(smi_info, bmc_incorrect_responses);
}
/* compare response netfn and cmd in ipmi_smi_msg with
ipmi_recv_msg kernel_ipmi_msg */
if ((smi_info->curr_msg->rsp[0] >> 2) != (recv_msg->msg.netfn |
1) ||
smi_info->curr_msg->data[1] != recv_msg->msg.cmd) {
printk(KERN_ERR "%s: ipmi_recv_msg error. expected
netfn:%x cmd:%x, got netfn:%x cmd:%x msgid:%ld\n",
__FUNCTION__, (recv_msg->msg.netfn | 1),
recv_msg->msg.cmd,
(smi_info->curr_msg->rsp[0] >> 2),
smi_info->curr_msg->rsp[1], recv_msg->msgid);
smi_inc_stat(smi_info, bmc_incorrect_responses);
}
Sep 27 09:52:03 oak-sh334 kernel: handle_transaction_done: ipmi_smi_msg error.
expected netfn:b cmd:40, got netfn:7 cmd:35 msgid:113
Sep 27 09:52:03 oak-sh334 kernel: handle_transaction_done: ipmi_recv_msg error.
expected netfn:b cmd:40, got netfn:7 cmd:35 msgid:113
Sep 27 09:52:03 oak-sh334 kernel: IPMI message handler: BMC returned incorrect
response, expected netfn b cmd 40, got netfn 7 cmd 35 msgid:113
The message ipmi_recv_msg error is interesting in that the contents of the smi
message data do not match the kernel message data as
It exists in the user_data buffer. Not sure how this happens.
Hope this is useful info.
Dave
------------------------------------------------------------------------------
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
_______________________________________________
Openipmi-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openipmi-developer