projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
279fbd0
)
ipmi: handle run_to_completion properly in deliver_recv_msg()
author
Jiri Kosina
<
[email protected]
>
Wed, 26 May 2010 21:43:53 +0000
(14:43 -0700)
committer
Linus Torvalds
<
[email protected]
>
Thu, 27 May 2010 16:12:50 +0000
(09:12 -0700)
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: Jiri Kosina <
[email protected]
>
Acked-by: Corey Minyard <
[email protected]
>
Cc: <
[email protected]
>
Signed-off-by: Andrew Morton <
[email protected]
>
Signed-off-by: Linus Torvalds <
[email protected]
>
drivers/char/ipmi/ipmi_si_intf.c
patch
|
blob
|
history
diff --git
a/drivers/char/ipmi/ipmi_si_intf.c
b/drivers/char/ipmi/ipmi_si_intf.c
index f052c481327a55062a29aedb353fcbf87a117842..35603dd4e6c5276911dec0b3a11464a152beb8a5 100644
(file)
--- a/
drivers/char/ipmi/ipmi_si_intf.c
+++ b/
drivers/char/ipmi/ipmi_si_intf.c
@@
-323,9
+323,14
@@
static void deliver_recv_msg(struct smi_info *smi_info,
{
/* Deliver the message to the upper layer with the lock
released. */
- spin_unlock(&(smi_info->si_lock));
- ipmi_smi_msg_received(smi_info->intf, msg);
- spin_lock(&(smi_info->si_lock));
+
+ if (smi_info->run_to_completion) {
+ ipmi_smi_msg_received(smi_info->intf, msg);
+ } else {
+ spin_unlock(&(smi_info->si_lock));
+ ipmi_smi_msg_received(smi_info->intf, msg);
+ spin_lock(&(smi_info->si_lock));
+ }
}
static void return_hosed_msg(struct smi_info *smi_info, int cCode)