Patch "ipmi: move timer init to before irq is setup" has been added to the 4.3-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
ipmi: move timer init to before irq is setup
to the 4.3-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
ipmi-move-timer-init-to-before-irq-is-setup.patch
and it can be found in the queue-4.3 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
27f972d3e00b50639deb4cc1392afaeb08d3ceccMon Sep 17 00:00:00 2001
From: Jan Stancek <[email protected]>
Date: Tue, 8 Dec 2015 13:57:51 -0500
Subject: ipmi: move timer init to before irq is setup
From: Jan Stancek <[email protected]>
commit 27f972d3e00b50639deb4cc1392afaeb08d3cecc upstream.
We encountered a panic on boot in ipmi_si on a dell per320 due to an uninitialized timer as follows.
static int smi_start_processing(void *send_info,
ipmi_smi_t intf)
{
/* Try to claim any interrupts. */
if (new_smi->irq_setup)
new_smi->irq_setup(new_smi);--> IRQ arrives here and irq handler tries to modify uninitialized timer
which triggers BUG_ON(!timer->function) in __mod_timer().
Call Trace: <IRQ> [<ffffffffa0532617>] start_new_msg+0x47/0x80 [ipmi_si] [<ffffffffa053269e>] start_check_enables+0x4e/0x60 [ipmi_si] [<ffffffffa0532bd8>] smi_event_handler+0x1e8/0x640 [ipmi_si] [<ffffffff810f5584>] ? __rcu_process_callbacks+0x54/0x350 [<ffffffffa053327c>] si_irq_handler+0x3c/0x60 [ipmi_si] [<ffffffff810efaf0>] handle_IRQ_event+0x60/0x170 [<ffffffff810f245e>] handle_edge_irq+0xde/0x180 [<ffffffff8100fc59>] handle_irq+0x49/0xa0 [<ffffffff8154643c>] do_IRQ+0x6c/0xf0 [<ffffffff8100ba53>] ret_from_intr+0x0/0x11
/* Set up the timer that drives the interface. */
setup_timer(&new_smi->si_timer, smi_timeout, (long)new_smi);The following patch fixes the problem.
To: [email protected]
To: Corey Minyard <[email protected]>
CC: [email protected]
--- drivers/char/ipmi/ipmi_si_intf.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/char/ipmi/ipmi_si_intf.c +4 -4
@@ -1223,14 +1223,14 @@ static int smi_start_processing(void new_smi->intf = intf; -/* Try to claim any interrupts. */ -if (new_smi->irq_setup) - new_smi->irq_setup (new_smi); -/* Set up the timer that drives the interface. */ setup_timer (&new_smi->si_timer, smi_timeout, (long )new_smi);smi_mod_timer (new_smi, jiffies +SI_TIMEOUT_JIFFIES ); +/* Try to claim any interrupts. */ +if (new_smi->irq_setup) + new_smi->irq_setup (new_smi); +/* * Check if the user forcefully enabled the daemon. */
Patches currently in stable-queue which might be from [email protected] are
queue-4.3/ipmi-move-timer-init-to-before-irq-is-setup.patch