58 lines
1.9 KiB
Diff
58 lines
1.9 KiB
Diff
|
From 7d9c88c20f2c1bb4649b444c103a6dccd308d2ba Mon Sep 17 00:00:00 2001
|
||
|
From: Steven Rostedt <rostedt@goodmis.org>
|
||
|
Date: Fri, 3 Jul 2009 08:30:00 -0500
|
||
|
Subject: [PATCH 098/365] 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>
|
||
|
---
|
||
|
drivers/net/ethernet/3com/3c59x.c | 8 ++++----
|
||
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
|
||
|
index 9133e7926da5..63afb921ed40 100644
|
||
|
--- a/drivers/net/ethernet/3com/3c59x.c
|
||
|
+++ b/drivers/net/ethernet/3com/3c59x.c
|
||
|
@@ -842,9 +842,9 @@ static void poll_vortex(struct net_device *dev)
|
||
|
{
|
||
|
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
|
||
|
|
||
|
@@ -1910,12 +1910,12 @@ static void vortex_tx_timeout(struct net_device *dev)
|
||
|
* 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);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
--
|
||
|
2.28.0
|
||
|
|