Skip to content

Commit

Permalink
ipmi: Free receive messages when in an oops
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
cminyard committed Aug 16, 2019
1 parent 340ff31 commit 2033f68
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions drivers/char/ipmi/ipmi_msghandler.c
Original file line number Diff line number Diff line change
Expand Up @@ -904,12 +904,14 @@ static int deliver_response(struct ipmi_smi *intf, struct ipmi_recv_msg *msg)
rv = -EINVAL;
}
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
* receive handler doesn't much meaning and has a deadlock
* risk. At this moment, simply skip it in that case.
*/
ipmi_free_recv_msg(msg);
} else {
int index;
struct ipmi_user *user = acquire_ipmi_user(msg->user, &index);

Expand Down Expand Up @@ -2220,7 +2222,8 @@ static int i_ipmi_request(struct ipmi_user *user,
else {
smi_msg = ipmi_alloc_smi_msg();
if (smi_msg == NULL) {
ipmi_free_recv_msg(recv_msg);
if (!supplied_recv)
ipmi_free_recv_msg(recv_msg);
rv = -ENOMEM;
goto out;
}
Expand Down

0 comments on commit 2033f68

Please sign in to comment.