51 lines
1.7 KiB
Diff
51 lines
1.7 KiB
Diff
From: Steven Rostedt <rostedt@goodmis.org>
|
|
Date: Fri, 3 Jul 2009 08:30:00 -0500
|
|
Subject: drivers/net: vortex fix locking issues
|
|
|
|
Argh, cut and paste wasn't enough...
|
|
|
|
Use this patch instead. It needs an irq disable. But, believe it or not,
|
|
on SMP this is actually better. If the irq is shared (as it is in Mark's
|
|
case), we don't stop the irq of other devices from being handled on
|
|
another CPU (unfortunately for Mark, he pinned all interrupts to one CPU).
|
|
|
|
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
|
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|
|
|
drivers/net/ethernet/3com/3c59x.c | 8 ++++----
|
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
|
|
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
|
|
|
Index: linux-stable/drivers/net/ethernet/3com/3c59x.c
|
|
===================================================================
|
|
--- linux-stable.orig/drivers/net/ethernet/3com/3c59x.c
|
|
+++ linux-stable/drivers/net/ethernet/3com/3c59x.c
|
|
@@ -843,9 +843,9 @@ static void poll_vortex(struct net_devic
|
|
{
|
|
struct vortex_private *vp = netdev_priv(dev);
|
|
unsigned long flags;
|
|
- local_irq_save(flags);
|
|
+ local_irq_save_nort(flags);
|
|
(vp->full_bus_master_rx ? boomerang_interrupt:vortex_interrupt)(dev->irq,dev);
|
|
- local_irq_restore(flags);
|
|
+ local_irq_restore_nort(flags);
|
|
}
|
|
#endif
|
|
|
|
@@ -1920,12 +1920,12 @@ static void vortex_tx_timeout(struct net
|
|
* Block interrupts because vortex_interrupt does a bare spin_lock()
|
|
*/
|
|
unsigned long flags;
|
|
- local_irq_save(flags);
|
|
+ local_irq_save_nort(flags);
|
|
if (vp->full_bus_master_tx)
|
|
boomerang_interrupt(dev->irq, dev);
|
|
else
|
|
vortex_interrupt(dev->irq, dev);
|
|
- local_irq_restore(flags);
|
|
+ local_irq_restore_nort(flags);
|
|
}
|
|
}
|
|
|