diff options
| author | David S. Miller <davem@davemloft.net> | 2011-02-04 14:28:58 -0800 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2011-02-04 14:28:58 -0800 | 
| commit | bd4a6974cc9090ef3851e5b0a2071e5383565c7c (patch) | |
| tree | e96ef46426d293b730a305b5185ba5412c9172d4 /drivers/net/r8169.c | |
| parent | 2b7bcebf958c74124220ee8103024def8597b36c (diff) | |
| parent | 1e6d93e45b231b3ae87c01902ede2315aacfe976 (diff) | |
| download | olio-linux-3.10-bd4a6974cc9090ef3851e5b0a2071e5383565c7c.tar.xz olio-linux-3.10-bd4a6974cc9090ef3851e5b0a2071e5383565c7c.zip  | |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Diffstat (limited to 'drivers/net/r8169.c')
| -rw-r--r-- | drivers/net/r8169.c | 41 | 
1 files changed, 32 insertions, 9 deletions
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index bde7d61f193..59ccf0c5c61 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c @@ -973,7 +973,8 @@ static void __rtl8169_check_link_status(struct net_device *dev,  		if (pm)  			pm_request_resume(&tp->pci_dev->dev);  		netif_carrier_on(dev); -		netif_info(tp, ifup, dev, "link up\n"); +		if (net_ratelimit()) +			netif_info(tp, ifup, dev, "link up\n");  	} else {  		netif_carrier_off(dev);  		netif_info(tp, ifdown, dev, "link down\n"); @@ -3757,7 +3758,8 @@ static void rtl_hw_start_8168(struct net_device *dev)  	RTL_W16(IntrMitigate, 0x5151);  	/* Work around for RxFIFO overflow. */ -	if (tp->mac_version == RTL_GIGA_MAC_VER_11) { +	if (tp->mac_version == RTL_GIGA_MAC_VER_11 || +	    tp->mac_version == RTL_GIGA_MAC_VER_22) {  		tp->intr_event |= RxFIFOOver | PCSTimeout;  		tp->intr_event &= ~RxOverflow;  	} @@ -4639,12 +4641,33 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)  			break;  		} -		/* Work around for rx fifo overflow */ -		if (unlikely(status & RxFIFOOver) && -		(tp->mac_version == RTL_GIGA_MAC_VER_11)) { -			netif_stop_queue(dev); -			rtl8169_tx_timeout(dev); -			break; +		if (unlikely(status & RxFIFOOver)) { +			switch (tp->mac_version) { +			/* Work around for rx fifo overflow */ +			case RTL_GIGA_MAC_VER_11: +			case RTL_GIGA_MAC_VER_22: +			case RTL_GIGA_MAC_VER_26: +				netif_stop_queue(dev); +				rtl8169_tx_timeout(dev); +				goto done; +			/* Testers needed. */ +			case RTL_GIGA_MAC_VER_17: +			case RTL_GIGA_MAC_VER_19: +			case RTL_GIGA_MAC_VER_20: +			case RTL_GIGA_MAC_VER_21: +			case RTL_GIGA_MAC_VER_23: +			case RTL_GIGA_MAC_VER_24: +			case RTL_GIGA_MAC_VER_27: +			case RTL_GIGA_MAC_VER_28: +			/* Experimental science. Pktgen proof. */ +			case RTL_GIGA_MAC_VER_12: +			case RTL_GIGA_MAC_VER_25: +				if (status == RxFIFOOver) +					goto done; +				break; +			default: +				break; +			}  		}  		if (unlikely(status & SYSErr)) { @@ -4680,7 +4703,7 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)  			(status & RxFIFOOver) ? (status | RxOverflow) : status);  		status = RTL_R16(IntrStatus);  	} - +done:  	return IRQ_RETVAL(handled);  }  |