diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-03-23 12:25:58 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-03-23 12:25:58 -0400 |
commit | d56ffd38a93841a07c839a375049a56b51e9567c (patch) | |
tree | ac668709aa6f973de26e993f21adcf98626bed46 /drivers/net/dm9000.c | |
parent | 12a37b5e2c93f6550b82490c3de6d4eedc509c39 (diff) | |
parent | 61fa9dcf9329cb92c220f7b656410fbe5e72f933 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (32 commits)
ucc_geth: Fix oops when using fixed-link support
dm9000: locking bugfix
net: update dnet.c for bus_id removal
dnet: DNET should depend on HAS_IOMEM
dca: add missing copyright/license headers
nl80211: Check that function pointer != NULL before using it
sungem: missing net_device_ops
be2net: fix to restore vlan ids into BE2 during a IF DOWN->UP cycle
be2net: replenish when posting to rx-queue is starved in out of mem conditions
bas_gigaset: correctly allocate USB interrupt transfer buffer
smsc911x: reset last known duplex and carrier on open
sh_eth: Fix mistake of the address of SH7763
sh_eth: Change handling of IRQ
netns: oops in ip[6]_frag_reasm incrementing stats
net: kfree(napi->skb) => kfree_skb
net: fix sctp breakage
ipv6: fix display of local and remote sit endpoints
net: Document /proc/sys/net/core/netdev_budget
tulip: fix crash on iface up with shirq debug
virtio_net: Make virtio_net support carrier detection
...
Diffstat (limited to 'drivers/net/dm9000.c')
-rw-r--r-- | drivers/net/dm9000.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c index bcf92917bbf..254ec62b5f5 100644 --- a/drivers/net/dm9000.c +++ b/drivers/net/dm9000.c | |||
@@ -930,13 +930,15 @@ static irqreturn_t dm9000_interrupt(int irq, void *dev_id) | |||
930 | struct net_device *dev = dev_id; | 930 | struct net_device *dev = dev_id; |
931 | board_info_t *db = netdev_priv(dev); | 931 | board_info_t *db = netdev_priv(dev); |
932 | int int_status; | 932 | int int_status; |
933 | unsigned long flags; | ||
933 | u8 reg_save; | 934 | u8 reg_save; |
934 | 935 | ||
935 | dm9000_dbg(db, 3, "entering %s\n", __func__); | 936 | dm9000_dbg(db, 3, "entering %s\n", __func__); |
936 | 937 | ||
937 | /* A real interrupt coming */ | 938 | /* A real interrupt coming */ |
938 | 939 | ||
939 | spin_lock(&db->lock); | 940 | /* holders of db->lock must always block IRQs */ |
941 | spin_lock_irqsave(&db->lock, flags); | ||
940 | 942 | ||
941 | /* Save previous register address */ | 943 | /* Save previous register address */ |
942 | reg_save = readb(db->io_addr); | 944 | reg_save = readb(db->io_addr); |
@@ -972,7 +974,7 @@ static irqreturn_t dm9000_interrupt(int irq, void *dev_id) | |||
972 | /* Restore previous register address */ | 974 | /* Restore previous register address */ |
973 | writeb(reg_save, db->io_addr); | 975 | writeb(reg_save, db->io_addr); |
974 | 976 | ||
975 | spin_unlock(&db->lock); | 977 | spin_unlock_irqrestore(&db->lock, flags); |
976 | 978 | ||
977 | return IRQ_HANDLED; | 979 | return IRQ_HANDLED; |
978 | } | 980 | } |