diff options
| author | Herbert Xu <herbert@gondor.apana.org.au> | 2006-06-17 22:06:05 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2006-06-17 22:06:05 -0700 | 
| commit | 8648b3053bff39a7ee4c711d74268079c928a657 (patch) | |
| tree | 6de70eedf63c4b965d04040323827f1bc520ccdf /net | |
| parent | 00b7050426da8e7e58c889c5c80a19920d2d41b3 (diff) | |
| download | kernel_samsung_tuna-8648b3053bff39a7ee4c711d74268079c928a657.zip kernel_samsung_tuna-8648b3053bff39a7ee4c711d74268079c928a657.tar.gz kernel_samsung_tuna-8648b3053bff39a7ee4c711d74268079c928a657.tar.bz2  | |
[NET]: Add NETIF_F_GEN_CSUM and NETIF_F_ALL_CSUM
The current stack treats NETIF_F_HW_CSUM and NETIF_F_NO_CSUM
identically so we test for them in quite a few places.  For the sake
of brevity, I'm adding the macro NETIF_F_GEN_CSUM for these two.  We
also test the disjunct of NETIF_F_IP_CSUM and the other two in various
places, for that purpose I've added NETIF_F_ALL_CSUM.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
| -rw-r--r-- | net/bridge/br_if.c | 3 | ||||
| -rw-r--r-- | net/core/dev.c | 6 | ||||
| -rw-r--r-- | net/core/ethtool.c | 6 | ||||
| -rw-r--r-- | net/ipv4/ip_output.c | 2 | ||||
| -rw-r--r-- | net/ipv4/tcp.c | 10 | 
5 files changed, 8 insertions, 19 deletions
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index f5d47bf..90c95f5 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c @@ -376,8 +376,7 @@ void br_features_recompute(struct net_bridge *br)  	checksum = br->feature_mask & NETIF_F_IP_CSUM;  	list_for_each_entry(p, &br->port_list, list) { -		if (!(p->dev->features  -		      & (NETIF_F_IP_CSUM|NETIF_F_NO_CSUM|NETIF_F_HW_CSUM))) +		if (!(p->dev->features & NETIF_F_ALL_CSUM))  			checksum = 0;  		features &= p->dev->features;  	} diff --git a/net/core/dev.c b/net/core/dev.c index 91361bc..ab39fe1 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1284,7 +1284,7 @@ int dev_queue_xmit(struct sk_buff *skb)  	 * checksumming for this protocol, complete checksumming here.  	 */  	if (skb->ip_summed == CHECKSUM_HW && -	    (!(dev->features & (NETIF_F_HW_CSUM | NETIF_F_NO_CSUM)) && +	    (!(dev->features & NETIF_F_GEN_CSUM) &&  	     (!(dev->features & NETIF_F_IP_CSUM) ||  	      skb->protocol != htons(ETH_P_IP))))  	      	if (skb_checksum_help(skb, 0)) @@ -2789,9 +2789,7 @@ int register_netdevice(struct net_device *dev)  	/* Fix illegal SG+CSUM combinations. */  	if ((dev->features & NETIF_F_SG) && -	    !(dev->features & (NETIF_F_IP_CSUM | -			       NETIF_F_NO_CSUM | -			       NETIF_F_HW_CSUM))) { +	    !(dev->features & NETIF_F_ALL_CSUM)) {  		printk("%s: Dropping NETIF_F_SG since no checksum feature.\n",  		       dev->name);  		dev->features &= ~NETIF_F_SG; diff --git a/net/core/ethtool.c b/net/core/ethtool.c index e6f7610..3f269e4 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c @@ -30,7 +30,7 @@ u32 ethtool_op_get_link(struct net_device *dev)  u32 ethtool_op_get_tx_csum(struct net_device *dev)  { -	return (dev->features & (NETIF_F_IP_CSUM | NETIF_F_HW_CSUM)) != 0; +	return (dev->features & NETIF_F_ALL_CSUM) != 0;  }  int ethtool_op_set_tx_csum(struct net_device *dev, u32 data) @@ -551,9 +551,7 @@ static int ethtool_set_sg(struct net_device *dev, char __user *useraddr)  		return -EFAULT;  	if (edata.data &&  -	    !(dev->features & (NETIF_F_IP_CSUM | -			       NETIF_F_NO_CSUM | -			       NETIF_F_HW_CSUM))) +	    !(dev->features & NETIF_F_ALL_CSUM))  		return -EINVAL;  	return __ethtool_set_sg(dev, edata.data); diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index d4bb3fa..8538aac 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c @@ -840,7 +840,7 @@ int ip_append_data(struct sock *sk,  	 */  	if (transhdrlen &&  	    length + fragheaderlen <= mtu && -	    rt->u.dst.dev->features&(NETIF_F_IP_CSUM|NETIF_F_NO_CSUM|NETIF_F_HW_CSUM) && +	    rt->u.dst.dev->features & NETIF_F_ALL_CSUM &&  	    !exthdrlen)  		csummode = CHECKSUM_HW; diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index ff6ccda..74998f2 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -622,14 +622,10 @@ ssize_t tcp_sendpage(struct socket *sock, struct page *page, int offset,  	ssize_t res;  	struct sock *sk = sock->sk; -#define TCP_ZC_CSUM_FLAGS (NETIF_F_IP_CSUM | NETIF_F_NO_CSUM | NETIF_F_HW_CSUM) -  	if (!(sk->sk_route_caps & NETIF_F_SG) || -	    !(sk->sk_route_caps & TCP_ZC_CSUM_FLAGS)) +	    !(sk->sk_route_caps & NETIF_F_ALL_CSUM))  		return sock_no_sendpage(sock, page, offset, size, flags); -#undef TCP_ZC_CSUM_FLAGS -  	lock_sock(sk);  	TCP_CHECK_TIMER(sk);  	res = do_tcp_sendpages(sk, &page, offset, size, flags); @@ -726,9 +722,7 @@ new_segment:  				/*  				 * Check whether we can use HW checksum.  				 */ -				if (sk->sk_route_caps & -				    (NETIF_F_IP_CSUM | NETIF_F_NO_CSUM | -				     NETIF_F_HW_CSUM)) +				if (sk->sk_route_caps & NETIF_F_ALL_CSUM)  					skb->ip_summed = CHECKSUM_HW;  				skb_entail(sk, tp, skb);  | 
