Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a747c5ab authored by Jiri Kosina's avatar Jiri Kosina Committed by Linus Torvalds
Browse files

ipmi: handle run_to_completion properly in deliver_recv_msg()



If run_to_completion flag is set, it means that we are running in a
single-threaded mode, and thus no locks are held.

This fixes a deadlock when IPMI notifier is being called during panic.

Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
Acked-by: default avatarCorey Minyard <minyard@acm.org>
Cc: <stable@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 279fbd0c
Loading
Loading
Loading
Loading
+8 −3
Original line number Original line Diff line number Diff line
@@ -323,10 +323,15 @@ static void deliver_recv_msg(struct smi_info *smi_info,
{
{
	/* Deliver the message to the upper layer with the lock
	/* Deliver the message to the upper layer with the lock
	   released. */
	   released. */

	if (smi_info->run_to_completion) {
		ipmi_smi_msg_received(smi_info->intf, msg);
	} else {
		spin_unlock(&(smi_info->si_lock));
		spin_unlock(&(smi_info->si_lock));
		ipmi_smi_msg_received(smi_info->intf, msg);
		ipmi_smi_msg_received(smi_info->intf, msg);
		spin_lock(&(smi_info->si_lock));
		spin_lock(&(smi_info->si_lock));
	}
	}
}


static void return_hosed_msg(struct smi_info *smi_info, int cCode)
static void return_hosed_msg(struct smi_info *smi_info, int cCode)
{
{