Skip to content

Commit

Permalink
smsc9420: fix interrupt signalling test failures
Browse files Browse the repository at this point in the history
smsc9420 performs an interrupt signalling test when the interface is
brought up.  The current code mistakenly sets its test flag to false
AFTER enabling the software interrupt source, making failure quite
likely.

This patch changes the code to set the test flag BEFORE enabling
interrupts. I've also removed an smp_wmb because the following spinlock
provides an implicit memory barrier.

Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Steve Glendinning authored and David S. Miller committed Jan 30, 2009
1 parent b1c4a9d commit 1609559
Showing 1 changed file with 1 addition and 2 deletions.
3 changes: 1 addition & 2 deletions drivers/net/smsc9420.c
Original file line number Diff line number Diff line change
Expand Up @@ -1378,6 +1378,7 @@ static int smsc9420_open(struct net_device *dev)

/* test the IRQ connection to the ISR */
smsc_dbg(IFUP, "Testing ISR using IRQ %d", dev->irq);
pd->software_irq_signal = false;

spin_lock_irqsave(&pd->int_lock, flags);
/* configure interrupt deassertion timer and enable interrupts */
Expand All @@ -1393,8 +1394,6 @@ static int smsc9420_open(struct net_device *dev)
smsc9420_pci_flush_write(pd);

timeout = 1000;
pd->software_irq_signal = false;
smp_wmb();
while (timeout--) {
if (pd->software_irq_signal)
break;
Expand Down

0 comments on commit 1609559

Please sign in to comment.