Skip to contentSkip to conversation

IPMI: don't init irq until ready

PATCH In review Corey Minyard 1 participant 1 message Oct 12, 2007 IPMI

lore
Share & tools
lore
#0 lore raw

PATCH 1/7 IPMI: don't init irq until ready

From: Corey Minyard <[email protected]>

Patrick found a race at startup. Interrupts were being enabled for the IPMI interface before the driver was really ready to handle them. This could result in an oops if something was pending on the interface at startup and interrupt were already enabled (technically shouldn't happen, but need to cover for this in real life). So move the IRQ setup to the code that starts the actual IPMI processing.

Not needed for the stable kernel, very few IPMI devices have interrupts.

Cc Patrick Schoeller <[email protected]>

---

drivers/char/ipmi/ipmi_si_intf.c +4 -4
Index: linux-2.6.21/drivers/char/ipmi/ipmi_si_intf.c
===================================================================
@@ -1006,6 +1006,10 @@ 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);
 	new_smi->last_timeout_jiffies = jiffies;
@@ -2762,10 +2766,6 @@ static int try_smi_init(struct smi_info 
 	setup_oem_data_handler(new_smi);
 	setup_xaction_handlers(new_smi);
 
-	/* Try to claim any interrupts. */
-	if (new_smi->irq_setup)
-		new_smi->irq_setup(new_smi);
-
 	INIT_LIST_HEAD(&(new_smi->xmit_msgs));
 	INIT_LIST_HEAD(&(new_smi->hp_xmit_msgs));
 	new_smi->curr_msg = NULL;