| 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); | 
 |  		} | 
 |  	} | 
 |   |