diff options
| author | Jeff Garzik <jgarzik@pobox.com> | 2005-08-29 19:24:43 -0400 | 
|---|---|---|
| committer | Jeff Garzik <jgarzik@pobox.com> | 2005-08-29 19:24:43 -0400 | 
| commit | 76b2bf9b4dee2fb32ef17f5c84a99ce481a14be2 (patch) | |
| tree | 49cd36d6e980044c2a88f2c14cdc9259e0f0f1b4 /drivers/net/loopback.c | |
| parent | 2fca877b68b2b4fc5b94277858a1bedd46017cde (diff) | |
| parent | 8f3d17fb7bcb7c255197d11469fb5e9695c9d2f4 (diff) | |
Merge libata branch 'chs-support' to latest upstream kernel.
Diffstat (limited to 'drivers/net/loopback.c')
| -rw-r--r-- | drivers/net/loopback.c | 22 | 
1 files changed, 14 insertions, 8 deletions
| diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c index 1f61f0cc95d..690a1aae0b3 100644 --- a/drivers/net/loopback.c +++ b/drivers/net/loopback.c @@ -68,6 +68,7 @@ static DEFINE_PER_CPU(struct net_device_stats, loopback_stats);   * of largesending device modulo TCP checksum, which is ignored for loopback.   */ +#ifdef LOOPBACK_TSO  static void emulate_large_send_offload(struct sk_buff *skb)  {  	struct iphdr *iph = skb->nh.iph; @@ -119,6 +120,7 @@ static void emulate_large_send_offload(struct sk_buff *skb)  	dev_kfree_skb(skb);  } +#endif /* LOOPBACK_TSO */  /*   * The higher levels take care of making this non-reentrant (it's @@ -130,12 +132,13 @@ static int loopback_xmit(struct sk_buff *skb, struct net_device *dev)  	skb_orphan(skb); -	skb->protocol=eth_type_trans(skb,dev); -	skb->dev=dev; +	skb->protocol = eth_type_trans(skb,dev); +	skb->dev = dev;  #ifndef LOOPBACK_MUST_CHECKSUM  	skb->ip_summed = CHECKSUM_UNNECESSARY;  #endif +#ifdef LOOPBACK_TSO  	if (skb_shinfo(skb)->tso_size) {  		BUG_ON(skb->protocol != htons(ETH_P_IP));  		BUG_ON(skb->nh.iph->protocol != IPPROTO_TCP); @@ -143,14 +146,14 @@ static int loopback_xmit(struct sk_buff *skb, struct net_device *dev)  		emulate_large_send_offload(skb);  		return 0;  	} - +#endif  	dev->last_rx = jiffies;  	lb_stats = &per_cpu(loopback_stats, get_cpu());  	lb_stats->rx_bytes += skb->len; -	lb_stats->tx_bytes += skb->len; +	lb_stats->tx_bytes = lb_stats->rx_bytes;  	lb_stats->rx_packets++; -	lb_stats->tx_packets++; +	lb_stats->tx_packets = lb_stats->rx_packets;  	put_cpu();  	netif_rx(skb); @@ -208,9 +211,12 @@ struct net_device loopback_dev = {  	.type			= ARPHRD_LOOPBACK,	/* 0x0001*/  	.rebuild_header		= eth_rebuild_header,  	.flags			= IFF_LOOPBACK, -	.features 		= NETIF_F_SG|NETIF_F_FRAGLIST -				  |NETIF_F_NO_CSUM|NETIF_F_HIGHDMA -				  |NETIF_F_LLTX, +	.features 		= NETIF_F_SG | NETIF_F_FRAGLIST +#ifdef LOOPBACK_TSO +				  | NETIF_F_TSO +#endif +				  | NETIF_F_NO_CSUM | NETIF_F_HIGHDMA +				  | NETIF_F_LLTX,  	.ethtool_ops		= &loopback_ethtool_ops,  }; | 
