|
@@ -3820,6 +3820,7 @@ static void handle_new_recv_msgs(ipmi_smi_t intf)
|
|
|
while (!list_empty(&intf->waiting_rcv_msgs)) {
|
|
|
smi_msg = list_entry(intf->waiting_rcv_msgs.next,
|
|
|
struct ipmi_smi_msg, link);
|
|
|
+ list_del(&smi_msg->link);
|
|
|
if (!run_to_completion)
|
|
|
spin_unlock_irqrestore(&intf->waiting_rcv_msgs_lock,
|
|
|
flags);
|
|
@@ -3829,11 +3830,14 @@ static void handle_new_recv_msgs(ipmi_smi_t intf)
|
|
|
if (rv > 0) {
|
|
|
/*
|
|
|
* To preserve message order, quit if we
|
|
|
- * can't handle a message.
|
|
|
+ * can't handle a message. Add the message
|
|
|
+ * back at the head, this is safe because this
|
|
|
+ * tasklet is the only thing that pulls the
|
|
|
+ * messages.
|
|
|
*/
|
|
|
+ list_add(&smi_msg->link, &intf->waiting_rcv_msgs);
|
|
|
break;
|
|
|
} else {
|
|
|
- list_del(&smi_msg->link);
|
|
|
if (rv == 0)
|
|
|
/* Message handled */
|
|
|
ipmi_free_smi_msg(smi_msg);
|