ipmi: Free receive messages when in an oops
If the driver handles a response in an oops, it was just ignoring the message. However, the IPMI watchdog timer was counting on the free happening to know when panic-time messages were complete. So free it in all cases. Signed-off-by: Corey Minyard <cminyard@mvista.com>
This commit is contained in:
parent
340ff31ab0
commit
2033f68589
|
@ -904,12 +904,14 @@ static int deliver_response(struct ipmi_smi *intf, struct ipmi_recv_msg *msg)
|
||||||
rv = -EINVAL;
|
rv = -EINVAL;
|
||||||
}
|
}
|
||||||
ipmi_free_recv_msg(msg);
|
ipmi_free_recv_msg(msg);
|
||||||
} else if (!oops_in_progress) {
|
} else if (oops_in_progress) {
|
||||||
/*
|
/*
|
||||||
* If we are running in the panic context, calling the
|
* If we are running in the panic context, calling the
|
||||||
* receive handler doesn't much meaning and has a deadlock
|
* receive handler doesn't much meaning and has a deadlock
|
||||||
* risk. At this moment, simply skip it in that case.
|
* risk. At this moment, simply skip it in that case.
|
||||||
*/
|
*/
|
||||||
|
ipmi_free_recv_msg(msg);
|
||||||
|
} else {
|
||||||
int index;
|
int index;
|
||||||
struct ipmi_user *user = acquire_ipmi_user(msg->user, &index);
|
struct ipmi_user *user = acquire_ipmi_user(msg->user, &index);
|
||||||
|
|
||||||
|
@ -2220,7 +2222,8 @@ static int i_ipmi_request(struct ipmi_user *user,
|
||||||
else {
|
else {
|
||||||
smi_msg = ipmi_alloc_smi_msg();
|
smi_msg = ipmi_alloc_smi_msg();
|
||||||
if (smi_msg == NULL) {
|
if (smi_msg == NULL) {
|
||||||
ipmi_free_recv_msg(recv_msg);
|
if (!supplied_recv)
|
||||||
|
ipmi_free_recv_msg(recv_msg);
|
||||||
rv = -ENOMEM;
|
rv = -ENOMEM;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue