From d8a68ea6c30ef39aad9db6319eca72c9c1371d3d Mon Sep 17 00:00:00 2001 From: David Brownell Date: Sun, 22 Mar 2009 21:28:39 -0700 Subject: [PATCH] --- yaml --- r: 132556 b: refs/heads/master c: e3162d381fc359ebe5c98a3e216888a7cb200051 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/net/dm9000.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 359e16df226a..91135eeee350 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6580f57d485f70851218813fa053d971915f61fb +refs/heads/master: e3162d381fc359ebe5c98a3e216888a7cb200051 diff --git a/trunk/drivers/net/dm9000.c b/trunk/drivers/net/dm9000.c index bcf92917bbf3..254ec62b5f58 100644 --- a/trunk/drivers/net/dm9000.c +++ b/trunk/drivers/net/dm9000.c @@ -930,13 +930,15 @@ static irqreturn_t dm9000_interrupt(int irq, void *dev_id) struct net_device *dev = dev_id; board_info_t *db = netdev_priv(dev); int int_status; + unsigned long flags; u8 reg_save; dm9000_dbg(db, 3, "entering %s\n", __func__); /* A real interrupt coming */ - spin_lock(&db->lock); + /* holders of db->lock must always block IRQs */ + spin_lock_irqsave(&db->lock, flags); /* Save previous register address */ reg_save = readb(db->io_addr); @@ -972,7 +974,7 @@ static irqreturn_t dm9000_interrupt(int irq, void *dev_id) /* Restore previous register address */ writeb(reg_save, db->io_addr); - spin_unlock(&db->lock); + spin_unlock_irqrestore(&db->lock, flags); return IRQ_HANDLED; }