Re: [patch mm1-rc2] lock validator: netlink.c netlink_table_grabfix

From: Zhu Yi
Date: Thu Jun 01 2006 - 23:09:15 EST


On Thu, 2006-06-01 at 16:42 +0200, Frederik Deweerdt wrote:
> This got rid of the oops for me, is it the right fix?

I don't think netlink will contend with hardirqs. Can you test with this
fix for ipw2200 driver?

Thanks,
-yi
diff -urp a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c
--- a/drivers/net/wireless/ipw2200.c 2006-04-01 09:47:24.000000000 +0800
+++ b/drivers/net/wireless/ipw2200.c 2006-06-01 14:32:00.000000000 +0800
@@ -11058,11 +11058,9 @@ static irqreturn_t ipw_isr(int irq, void
if (!priv)
return IRQ_NONE;

- spin_lock(&priv->lock);
-
if (!(priv->status & STATUS_INT_ENABLED)) {
/* Shared IRQ */
- goto none;
+ return IRQ_NONE;
}

inta = ipw_read32(priv, IPW_INTA_RW);
@@ -11071,12 +11069,12 @@ static irqreturn_t ipw_isr(int irq, void
if (inta == 0xFFFFFFFF) {
/* Hardware disappeared */
IPW_WARNING("IRQ INTA == 0xFFFFFFFF\n");
- goto none;
+ return IRQ_NONE;
}

if (!(inta & (IPW_INTA_MASK_ALL & inta_mask))) {
/* Shared interrupt */
- goto none;
+ return IRQ_NONE;
}

/* tell the device to stop sending interrupts */
@@ -11091,12 +11089,7 @@ static irqreturn_t ipw_isr(int irq, void

tasklet_schedule(&priv->irq_tasklet);

- spin_unlock(&priv->lock);
-
return IRQ_HANDLED;
- none:
- spin_unlock(&priv->lock);
- return IRQ_NONE;
}

static void ipw_rf_kill(void *adapter)