diff options
72 files changed, 168 insertions, 169 deletions
diff --git a/drivers/atm/he.c b/drivers/atm/he.c index ffcb9fd31c3..41e052fecd7 100644 --- a/drivers/atm/he.c +++ b/drivers/atm/he.c @@ -1912,7 +1912,7 @@ he_service_rbrq(struct he_dev *he_dev, int group)  				skb->tail = skb->data + skb->len;  #ifdef USE_CHECKSUM_HW  				if (vcc->vpi == 0 && vcc->vci >= ATM_NOT_RSV_VCI) { -					skb->ip_summed = CHECKSUM_HW; +					skb->ip_summed = CHECKSUM_COMPLETE;  					skb->csum = TCP_CKSUM(skb->data,  							he_vcc->pdu_len);  				} diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c index 80e8ca013e4..29dede2eaa8 100644 --- a/drivers/net/3c59x.c +++ b/drivers/net/3c59x.c @@ -2077,7 +2077,7 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)  	vp->tx_ring[entry].next = 0;  #if DO_ZEROCOPY -	if (skb->ip_summed != CHECKSUM_HW) +	if (skb->ip_summed != CHECKSUM_PARTIAL)  			vp->tx_ring[entry].status = cpu_to_le32(skb->len | TxIntrUploaded);  	else  			vp->tx_ring[entry].status = cpu_to_le32(skb->len | TxIntrUploaded | AddTCPChksum | AddUDPChksum); diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c index 1428bb7715a..a48b211c489 100644 --- a/drivers/net/8139cp.c +++ b/drivers/net/8139cp.c @@ -813,7 +813,7 @@ static int cp_start_xmit (struct sk_buff *skb, struct net_device *dev)  		if (mss)  			flags |= LargeSend | ((mss & MSSMask) << MSSShift); -		else if (skb->ip_summed == CHECKSUM_HW) { +		else if (skb->ip_summed == CHECKSUM_PARTIAL) {  			const struct iphdr *ip = skb->nh.iph;  			if (ip->protocol == IPPROTO_TCP)  				flags |= IPCS | TCPCS; @@ -867,7 +867,7 @@ static int cp_start_xmit (struct sk_buff *skb, struct net_device *dev)  			if (mss)  				ctrl |= LargeSend |  					((mss & MSSMask) << MSSShift); -			else if (skb->ip_summed == CHECKSUM_HW) { +			else if (skb->ip_summed == CHECKSUM_PARTIAL) {  				if (ip->protocol == IPPROTO_TCP)  					ctrl |= IPCS | TCPCS;  				else if (ip->protocol == IPPROTO_UDP) @@ -898,7 +898,7 @@ static int cp_start_xmit (struct sk_buff *skb, struct net_device *dev)  		txd->addr = cpu_to_le64(first_mapping);  		wmb(); -		if (skb->ip_summed == CHECKSUM_HW) { +		if (skb->ip_summed == CHECKSUM_PARTIAL) {  			if (ip->protocol == IPPROTO_TCP)  				txd->opts1 = cpu_to_le32(first_eor | first_len |  							 FirstFrag | DescOwn | diff --git a/drivers/net/acenic.c b/drivers/net/acenic.c index 1c01e9b3d07..826548644d7 100644 --- a/drivers/net/acenic.c +++ b/drivers/net/acenic.c @@ -2040,7 +2040,7 @@ static void ace_rx_int(struct net_device *dev, u32 rxretprd, u32 rxretcsm)  		 */  		if (bd_flags & BD_FLG_TCP_UDP_SUM) {  			skb->csum = htons(csum); -			skb->ip_summed = CHECKSUM_HW; +			skb->ip_summed = CHECKSUM_COMPLETE;  		} else {  			skb->ip_summed = CHECKSUM_NONE;  		} @@ -2511,7 +2511,7 @@ restart:  		mapping = ace_map_tx_skb(ap, skb, skb, idx);  		flagsize = (skb->len << 16) | (BD_FLG_END); -		if (skb->ip_summed == CHECKSUM_HW) +		if (skb->ip_summed == CHECKSUM_PARTIAL)  			flagsize |= BD_FLG_TCP_UDP_SUM;  #if ACENIC_DO_VLAN  		if (vlan_tx_tag_present(skb)) { @@ -2534,7 +2534,7 @@ restart:  		mapping = ace_map_tx_skb(ap, skb, NULL, idx);  		flagsize = (skb_headlen(skb) << 16); -		if (skb->ip_summed == CHECKSUM_HW) +		if (skb->ip_summed == CHECKSUM_PARTIAL)  			flagsize |= BD_FLG_TCP_UDP_SUM;  #if ACENIC_DO_VLAN  		if (vlan_tx_tag_present(skb)) { @@ -2560,7 +2560,7 @@ restart:  					       PCI_DMA_TODEVICE);  			flagsize = (frag->size << 16); -			if (skb->ip_summed == CHECKSUM_HW) +			if (skb->ip_summed == CHECKSUM_PARTIAL)  				flagsize |= BD_FLG_TCP_UDP_SUM;  			idx = (idx + 1) % ACE_TX_RING_ENTRIES(ap); diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index 652eb05a6c2..7857b463012 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c @@ -4423,7 +4423,7 @@ bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev)  	ring_prod = TX_RING_IDX(prod);  	vlan_tag_flags = 0; -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		vlan_tag_flags |= TX_BD_FLAGS_TCP_UDP_CKSUM;  	} diff --git a/drivers/net/cassini.c b/drivers/net/cassini.c index a31544ccb3c..558fdb8ad2d 100644 --- a/drivers/net/cassini.c +++ b/drivers/net/cassini.c @@ -2167,7 +2167,7 @@ end_copy_pkt:  			cas_page_unmap(addr);  	}  	skb->csum = ntohs(i ^ 0xffff); -	skb->ip_summed = CHECKSUM_HW; +	skb->ip_summed = CHECKSUM_COMPLETE;  	skb->protocol = eth_type_trans(skb, cp->dev);  	return len;  } @@ -2821,7 +2821,7 @@ static inline int cas_xmit_tx_ringN(struct cas *cp, int ring,  	}  	ctrl = 0; -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		u64 csum_start_off, csum_stuff_off;  		csum_start_off = (u64) (skb->h.raw - skb->data); diff --git a/drivers/net/chelsio/sge.c b/drivers/net/chelsio/sge.c index 61b3754f50f..ddd0bdb498f 100644 --- a/drivers/net/chelsio/sge.c +++ b/drivers/net/chelsio/sge.c @@ -1470,9 +1470,9 @@ int t1_start_xmit(struct sk_buff *skb, struct net_device *dev)  		}  		if (!(adapter->flags & UDP_CSUM_CAPABLE) && -		    skb->ip_summed == CHECKSUM_HW && +		    skb->ip_summed == CHECKSUM_PARTIAL &&  		    skb->nh.iph->protocol == IPPROTO_UDP) -			if (unlikely(skb_checksum_help(skb, 0))) { +			if (unlikely(skb_checksum_help(skb))) {  				dev_kfree_skb_any(skb);  				return NETDEV_TX_OK;  			} @@ -1495,11 +1495,11 @@ int t1_start_xmit(struct sk_buff *skb, struct net_device *dev)  		cpl = (struct cpl_tx_pkt *)__skb_push(skb, sizeof(*cpl));  		cpl->opcode = CPL_TX_PKT;  		cpl->ip_csum_dis = 1;    /* SW calculates IP csum */ -		cpl->l4_csum_dis = skb->ip_summed == CHECKSUM_HW ? 0 : 1; +		cpl->l4_csum_dis = skb->ip_summed == CHECKSUM_PARTIAL ? 0 : 1;  		/* the length field isn't used so don't bother setting it */ -		st->tx_cso += (skb->ip_summed == CHECKSUM_HW); -		sge->stats.tx_do_cksum += (skb->ip_summed == CHECKSUM_HW); +		st->tx_cso += (skb->ip_summed == CHECKSUM_PARTIAL); +		sge->stats.tx_do_cksum += (skb->ip_summed == CHECKSUM_PARTIAL);  		sge->stats.tx_reg_pkts++;  	}  	cpl->iff = dev->if_port; diff --git a/drivers/net/dl2k.c b/drivers/net/dl2k.c index 402961e68c8..b74e6765476 100644 --- a/drivers/net/dl2k.c +++ b/drivers/net/dl2k.c @@ -611,7 +611,7 @@ start_xmit (struct sk_buff *skb, struct net_device *dev)  	txdesc = &np->tx_ring[entry];  #if 0 -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		txdesc->status |=  		    cpu_to_le64 (TCPChecksumEnable | UDPChecksumEnable |  				 IPChecksumEnable); diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 98ef9f85482..2ab9f96f5da 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c @@ -2600,7 +2600,7 @@ e1000_tx_csum(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,  	unsigned int i;  	uint8_t css; -	if (likely(skb->ip_summed == CHECKSUM_HW)) { +	if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) {  		css = skb->h.raw - skb->data;  		i = tx_ring->next_to_use; @@ -2927,11 +2927,11 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)  	}  	/* reserve a descriptor for the offload context */ -	if ((mss) || (skb->ip_summed == CHECKSUM_HW)) +	if ((mss) || (skb->ip_summed == CHECKSUM_PARTIAL))  		count++;  	count++;  #else -	if (skb->ip_summed == CHECKSUM_HW) +	if (skb->ip_summed == CHECKSUM_PARTIAL)  		count++;  #endif @@ -3608,7 +3608,7 @@ e1000_rx_checksum(struct e1000_adapter *adapter,  		 */  		csum = ntohl(csum ^ 0xFFFF);  		skb->csum = csum; -		skb->ip_summed = CHECKSUM_HW; +		skb->ip_summed = CHECKSUM_COMPLETE;  	}  	adapter->hw_csum_good++;  } diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index 11b8f1b43dd..32cacf115f7 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c @@ -1503,7 +1503,8 @@ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev)  		tx_flags_extra = NV_TX2_TSO | (skb_shinfo(skb)->gso_size << NV_TX2_TSO_SHIFT);  	else  #endif -	tx_flags_extra = (skb->ip_summed == CHECKSUM_HW ? (NV_TX2_CHECKSUM_L3|NV_TX2_CHECKSUM_L4) : 0); +	tx_flags_extra = skb->ip_summed == CHECKSUM_PARTIAL ? +			 NV_TX2_CHECKSUM_L3 | NV_TX2_CHECKSUM_L4 : 0;  	/* vlan tag */  	if (np->vlangrp && vlan_tx_tag_present(skb)) { diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index ebbbd6ca620..ba960913c03 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c @@ -947,7 +947,7 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)  	/* Set up checksumming */  	if (likely((dev->features & NETIF_F_IP_CSUM) -			&& (CHECKSUM_HW == skb->ip_summed))) { +			&& (CHECKSUM_PARTIAL == skb->ip_summed))) {  		fcb = gfar_add_fcb(skb, txbdp);  		status |= TXBD_TOE;  		gfar_tx_checksum(skb, fcb); diff --git a/drivers/net/hamachi.c b/drivers/net/hamachi.c index 409c6aab041..763373ae966 100644 --- a/drivers/net/hamachi.c +++ b/drivers/net/hamachi.c @@ -1648,7 +1648,7 @@ static int hamachi_rx(struct net_device *dev)  						* could do the pseudo myself and return  						* CHECKSUM_UNNECESSARY  						*/ -						skb->ip_summed = CHECKSUM_HW; +						skb->ip_summed = CHECKSUM_COMPLETE;  					}  				}	  			} diff --git a/drivers/net/ibm_emac/ibm_emac_core.c b/drivers/net/ibm_emac/ibm_emac_core.c index 82468e2dc79..57e214d85e9 100644 --- a/drivers/net/ibm_emac/ibm_emac_core.c +++ b/drivers/net/ibm_emac/ibm_emac_core.c @@ -1036,7 +1036,7 @@ static inline u16 emac_tx_csum(struct ocp_enet_private *dev,  			       struct sk_buff *skb)  {  #if defined(CONFIG_IBM_EMAC_TAH) -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		++dev->stats.tx_packets_csum;  		return EMAC_TX_CTRL_TAH_CSUM;  	} diff --git a/drivers/net/ioc3-eth.c b/drivers/net/ioc3-eth.c index 68d8af7df08..65f897ddb92 100644 --- a/drivers/net/ioc3-eth.c +++ b/drivers/net/ioc3-eth.c @@ -1387,7 +1387,7 @@ static int ioc3_start_xmit(struct sk_buff *skb, struct net_device *dev)  	 * MAC header which should not be summed and the TCP/UDP pseudo headers  	 * manually.  	 */ -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		int proto = ntohs(skb->nh.iph->protocol);  		unsigned int csoff;  		struct iphdr *ih = skb->nh.iph; diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c index 7bbd447289b..9405b44f321 100644 --- a/drivers/net/ixgb/ixgb_main.c +++ b/drivers/net/ixgb/ixgb_main.c @@ -1232,7 +1232,7 @@ ixgb_tx_csum(struct ixgb_adapter *adapter, struct sk_buff *skb)  	unsigned int i;  	uint8_t css, cso; -	if(likely(skb->ip_summed == CHECKSUM_HW)) { +	if(likely(skb->ip_summed == CHECKSUM_PARTIAL)) {  		css = skb->h.raw - skb->data;  		cso = (skb->h.raw + skb->csum) - skb->data; diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c index eeab1df5bef..38df58fdb35 100644 --- a/drivers/net/mv643xx_eth.c +++ b/drivers/net/mv643xx_eth.c @@ -1147,7 +1147,7 @@ static void eth_tx_submit_descs_for_skb(struct mv643xx_private *mp,  	desc->byte_cnt = length;  	desc->buf_ptr = dma_map_single(NULL, skb->data, length, DMA_TO_DEVICE); -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		BUG_ON(skb->protocol != ETH_P_IP);  		cmd_sts |= ETH_GEN_TCP_UDP_CHECKSUM | diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c index 9bdd43ab357..9f16681d0e7 100644 --- a/drivers/net/myri10ge/myri10ge.c +++ b/drivers/net/myri10ge/myri10ge.c @@ -930,7 +930,7 @@ static inline void myri10ge_vlan_ip_csum(struct sk_buff *skb, u16 hw_csum)  	    (vh->h_vlan_encapsulated_proto == htons(ETH_P_IP) ||  	     vh->h_vlan_encapsulated_proto == htons(ETH_P_IPV6))) {  		skb->csum = hw_csum; -		skb->ip_summed = CHECKSUM_HW; +		skb->ip_summed = CHECKSUM_COMPLETE;  	}  } @@ -973,7 +973,7 @@ myri10ge_rx_done(struct myri10ge_priv *mgp, struct myri10ge_rx_buf *rx,  		if ((skb->protocol == ntohs(ETH_P_IP)) ||  		    (skb->protocol == ntohs(ETH_P_IPV6))) {  			skb->csum = ntohs((u16) csum); -			skb->ip_summed = CHECKSUM_HW; +			skb->ip_summed = CHECKSUM_COMPLETE;  		} else  			myri10ge_vlan_ip_csum(skb, ntohs((u16) csum));  	} @@ -1897,13 +1897,13 @@ again:  	pseudo_hdr_offset = 0;  	odd_flag = 0;  	flags = (MXGEFW_FLAGS_NO_TSO | MXGEFW_FLAGS_FIRST); -	if (likely(skb->ip_summed == CHECKSUM_HW)) { +	if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) {  		cksum_offset = (skb->h.raw - skb->data);  		pseudo_hdr_offset = (skb->h.raw + skb->csum) - skb->data;  		/* If the headers are excessively large, then we must  		 * fall back to a software checksum */  		if (unlikely(cksum_offset > 255 || pseudo_hdr_offset > 127)) { -			if (skb_checksum_help(skb, 0)) +			if (skb_checksum_help(skb))  				goto drop;  			cksum_offset = 0;  			pseudo_hdr_offset = 0; diff --git a/drivers/net/ns83820.c b/drivers/net/ns83820.c index 0e76859c90a..5143f5dbb2e 100644 --- a/drivers/net/ns83820.c +++ b/drivers/net/ns83820.c @@ -1153,7 +1153,7 @@ again:  	if (!nr_frags)  		frag = NULL;  	extsts = 0; -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		extsts |= EXTSTS_IPPKT;  		if (IPPROTO_TCP == skb->nh.iph->protocol)  			extsts |= EXTSTS_TCPPKT; diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index 4c2f575faad..d9b960aa9b0 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c @@ -2169,7 +2169,7 @@ static inline u32 rtl8169_tso_csum(struct sk_buff *skb, struct net_device *dev)  		if (mss)  			return LargeSend | ((mss & MSSMask) << MSSShift);  	} -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		const struct iphdr *ip = skb->nh.iph;  		if (ip->protocol == IPPROTO_TCP) diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index e72e0e09906..5b3713f622d 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c @@ -3893,7 +3893,7 @@ static int s2io_xmit(struct sk_buff *skb, struct net_device *dev)  		txdp->Control_1 |= TXD_TCP_LSO_MSS(s2io_tcp_mss(skb));  	}  #endif -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		txdp->Control_2 |=  		    (TXD_TX_CKO_IPV4_EN | TXD_TX_CKO_TCP_EN |  		     TXD_TX_CKO_UDP_EN); diff --git a/drivers/net/sk98lin/skge.c b/drivers/net/sk98lin/skge.c index ee62845d3ac..eb3b35180c2 100644 --- a/drivers/net/sk98lin/skge.c +++ b/drivers/net/sk98lin/skge.c @@ -1559,7 +1559,7 @@ struct sk_buff	*pMessage)	/* pointer to send-message              */  	pTxd->VDataHigh = (SK_U32) (PhysAddr >> 32);  	pTxd->pMBuf     = pMessage; -	if (pMessage->ip_summed == CHECKSUM_HW) { +	if (pMessage->ip_summed == CHECKSUM_PARTIAL) {  		u16 hdrlen = pMessage->h.raw - pMessage->data;  		u16 offset = hdrlen + pMessage->csum; @@ -1678,7 +1678,7 @@ struct sk_buff	*pMessage)	/* pointer to send-message              */  	/*   	** Does the HW need to evaluate checksum for TCP or UDP packets?   	*/ -	if (pMessage->ip_summed == CHECKSUM_HW) { +	if (pMessage->ip_summed == CHECKSUM_PARTIAL) {  		u16 hdrlen = pMessage->h.raw - pMessage->data;  		u16 offset = hdrlen + pMessage->csum; @@ -2158,7 +2158,7 @@ rx_start:  #ifdef USE_SK_RX_CHECKSUM  		pMsg->csum = pRxd->TcpSums & 0xffff; -		pMsg->ip_summed = CHECKSUM_HW; +		pMsg->ip_summed = CHECKSUM_COMPLETE;  #else  		pMsg->ip_summed = CHECKSUM_NONE;  #endif diff --git a/drivers/net/skge.c b/drivers/net/skge.c index ad878dfddef..b3d6fa3d6df 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c @@ -2338,7 +2338,7 @@ static int skge_xmit_frame(struct sk_buff *skb, struct net_device *dev)  	td->dma_lo = map;  	td->dma_hi = map >> 32; -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		int offset = skb->h.raw - skb->data;  		/* This seems backwards, but it is what the sk98lin @@ -2642,7 +2642,7 @@ static inline struct sk_buff *skge_rx_get(struct skge_port *skge,  	skb->dev = skge->netdev;  	if (skge->rx_csum) {  		skb->csum = csum; -		skb->ip_summed = CHECKSUM_HW; +		skb->ip_summed = CHECKSUM_COMPLETE;  	}  	skb->protocol = eth_type_trans(skb, skge->netdev); diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 933e87f1cc6..8e92566b587 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c @@ -1163,7 +1163,7 @@ static unsigned tx_le_req(const struct sk_buff *skb)  	if (skb_is_gso(skb))  		++count; -	if (skb->ip_summed == CHECKSUM_HW) +	if (skb->ip_summed == CHECKSUM_PARTIAL)  		++count;  	return count; @@ -1272,7 +1272,7 @@ static int sky2_xmit_frame(struct sk_buff *skb, struct net_device *dev)  #endif  	/* Handle TCP checksum offload */ -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		u16 hdr = skb->h.raw - skb->data;  		u16 offset = hdr + skb->csum; @@ -2000,7 +2000,7 @@ static int sky2_status_intr(struct sky2_hw *hw, int to_do)  #endif  		case OP_RXCHKS:  			skb = sky2->rx_ring[sky2->rx_next].skb; -			skb->ip_summed = CHECKSUM_HW; +			skb->ip_summed = CHECKSUM_COMPLETE;  			skb->csum = le16_to_cpu(status);  			break; diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c index c0a62b00ffc..2607aa51d8e 100644 --- a/drivers/net/starfire.c +++ b/drivers/net/starfire.c @@ -1230,7 +1230,7 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev)  	}  #if defined(ZEROCOPY) && defined(HAS_BROKEN_FIRMWARE) -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		if (skb_padto(skb, (skb->len + PADDING_MASK) & ~PADDING_MASK))  			return NETDEV_TX_OK;  	} @@ -1252,7 +1252,7 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev)  				status |= TxDescIntr;  				np->reap_tx = 0;  			} -			if (skb->ip_summed == CHECKSUM_HW) { +			if (skb->ip_summed == CHECKSUM_PARTIAL) {  				status |= TxCalTCP;  				np->stats.tx_compressed++;  			} @@ -1499,7 +1499,7 @@ static int __netdev_rx(struct net_device *dev, int *quota)  		 * Until then, the printk stays. :-) -Ion  		 */  		else if (le16_to_cpu(desc->status2) & 0x0040) { -			skb->ip_summed = CHECKSUM_HW; +			skb->ip_summed = CHECKSUM_COMPLETE;  			skb->csum = le16_to_cpu(desc->csum);  			printk(KERN_DEBUG "%s: checksum_hw, status2 = %#x\n", dev->name, le16_to_cpu(desc->status2));  		} diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c index d7b1d1882ca..b388651b783 100644 --- a/drivers/net/sungem.c +++ b/drivers/net/sungem.c @@ -855,7 +855,7 @@ static int gem_rx(struct gem *gp, int work_to_do)  		}  		skb->csum = ntohs((status & RXDCTRL_TCPCSUM) ^ 0xffff); -		skb->ip_summed = CHECKSUM_HW; +		skb->ip_summed = CHECKSUM_COMPLETE;  		skb->protocol = eth_type_trans(skb, gp->dev);  		netif_receive_skb(skb); @@ -1026,7 +1026,7 @@ static int gem_start_xmit(struct sk_buff *skb, struct net_device *dev)  	unsigned long flags;  	ctrl = 0; -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		u64 csum_start_off, csum_stuff_off;  		csum_start_off = (u64) (skb->h.raw - skb->data); diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c index c6f5bc3c042..17981da2273 100644 --- a/drivers/net/sunhme.c +++ b/drivers/net/sunhme.c @@ -1207,7 +1207,7 @@ static void happy_meal_transceiver_check(struct happy_meal *hp, void __iomem *tr   * flags, thus:   *   * 	skb->csum = rxd->rx_flags & 0xffff; - * 	skb->ip_summed = CHECKSUM_HW; + * 	skb->ip_summed = CHECKSUM_COMPLETE;   *   * before sending off the skb to the protocols, and we are good as gold.   */ @@ -2074,7 +2074,7 @@ static void happy_meal_rx(struct happy_meal *hp, struct net_device *dev)  		/* This card is _fucking_ hot... */  		skb->csum = ntohs(csum ^ 0xffff); -		skb->ip_summed = CHECKSUM_HW; +		skb->ip_summed = CHECKSUM_COMPLETE;  		RXD(("len=%d csum=%4x]", len, csum));  		skb->protocol = eth_type_trans(skb, dev); @@ -2268,7 +2268,7 @@ static int happy_meal_start_xmit(struct sk_buff *skb, struct net_device *dev)   	u32 tx_flags;  	tx_flags = TXFLAG_OWN; -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		u32 csum_start_off, csum_stuff_off;  		csum_start_off = (u32) (skb->h.raw - skb->data); diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index eafabb253f0..6f5d3a38c58 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c @@ -3851,11 +3851,11 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)  		skb->h.th->check = 0;  	} -	else if (skb->ip_summed == CHECKSUM_HW) +	else if (skb->ip_summed == CHECKSUM_PARTIAL)  		base_flags |= TXD_FLAG_TCPUDP_CSUM;  #else  	mss = 0; -	if (skb->ip_summed == CHECKSUM_HW) +	if (skb->ip_summed == CHECKSUM_PARTIAL)  		base_flags |= TXD_FLAG_TCPUDP_CSUM;  #endif  #if TG3_VLAN_TAG_USED @@ -3981,7 +3981,7 @@ static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev)  	entry = tp->tx_prod;  	base_flags = 0; -	if (skb->ip_summed == CHECKSUM_HW) +	if (skb->ip_summed == CHECKSUM_PARTIAL)  		base_flags |= TXD_FLAG_TCPUDP_CSUM;  #if TG3_TSO_SUPPORT != 0  	mss = 0; diff --git a/drivers/net/typhoon.c b/drivers/net/typhoon.c index 4103c37172f..c6e601dc6bb 100644 --- a/drivers/net/typhoon.c +++ b/drivers/net/typhoon.c @@ -830,7 +830,7 @@ typhoon_start_tx(struct sk_buff *skb, struct net_device *dev)  	first_txd->addrHi = (u64)((unsigned long) skb) >> 32;  	first_txd->processFlags = 0; -	if(skb->ip_summed == CHECKSUM_HW) { +	if(skb->ip_summed == CHECKSUM_PARTIAL) {  		/* The 3XP will figure out if this is UDP/TCP */  		first_txd->processFlags |= TYPHOON_TX_PF_TCP_CHKSUM;  		first_txd->processFlags |= TYPHOON_TX_PF_UDP_CHKSUM; diff --git a/drivers/net/via-rhine.c b/drivers/net/via-rhine.c index ae971080e2e..66547159bfd 100644 --- a/drivers/net/via-rhine.c +++ b/drivers/net/via-rhine.c @@ -1230,7 +1230,7 @@ static int rhine_start_tx(struct sk_buff *skb, struct net_device *dev)  	rp->tx_skbuff[entry] = skb;  	if ((rp->quirks & rqRhineI) && -	    (((unsigned long)skb->data & 3) || skb_shinfo(skb)->nr_frags != 0 || skb->ip_summed == CHECKSUM_HW)) { +	    (((unsigned long)skb->data & 3) || skb_shinfo(skb)->nr_frags != 0 || skb->ip_summed == CHECKSUM_PARTIAL)) {  		/* Must use alignment buffer. */  		if (skb->len > PKT_BUF_SZ) {  			/* packet too long, drop it */ diff --git a/drivers/net/via-velocity.c b/drivers/net/via-velocity.c index aa9cd92f46b..f1e0c746a38 100644 --- a/drivers/net/via-velocity.c +++ b/drivers/net/via-velocity.c @@ -2002,7 +2002,7 @@ static int velocity_xmit(struct sk_buff *skb, struct net_device *dev)  	 *	Handle hardware checksum  	 */  	if ((vptr->flags & VELOCITY_FLAGS_TX_CSUM) -				 && (skb->ip_summed == CHECKSUM_HW)) { +				 && (skb->ip_summed == CHECKSUM_PARTIAL)) {  		struct iphdr *ip = skb->nh.iph;  		if (ip->protocol == IPPROTO_TCP)  			td_ptr->tdesc1.TCR |= TCR0_TCPCK; diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 50a4719512e..4f2c2b6beb5 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -976,7 +976,7 @@ extern void		dev_mcast_init(void);  extern int		netdev_max_backlog;  extern int		weight_p;  extern int		netdev_set_master(struct net_device *dev, struct net_device *master); -extern int skb_checksum_help(struct sk_buff *skb, int inward); +extern int skb_checksum_help(struct sk_buff *skb);  extern struct sk_buff *skb_gso_segment(struct sk_buff *skb, int features);  #ifdef CONFIG_BUG  extern void netdev_rx_csum_fault(struct net_device *dev); @@ -1012,7 +1012,7 @@ static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb)  {  	return skb_is_gso(skb) &&  	       (!skb_gso_ok(skb, dev->features) || -		unlikely(skb->ip_summed != CHECKSUM_HW)); +		unlikely(skb->ip_summed != CHECKSUM_PARTIAL));  }  /* On bonding slaves other than the currently active slave, suppress diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 755e9cddac4..85577a4ffa6 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -34,8 +34,9 @@  #define HAVE_ALIGNABLE_SKB	/* Ditto 8)		   */  #define CHECKSUM_NONE 0 -#define CHECKSUM_HW 1 +#define CHECKSUM_PARTIAL 1  #define CHECKSUM_UNNECESSARY 2 +#define CHECKSUM_COMPLETE 3  #define SKB_DATA_ALIGN(X)	(((X) + (SMP_CACHE_BYTES - 1)) & \  				 ~(SMP_CACHE_BYTES - 1)) @@ -56,17 +57,17 @@   *	      Apparently with secret goal to sell you new device, when you   *	      will add new protocol to your host. F.e. IPv6. 8)   * - *	HW: the most generic way. Device supplied checksum of _all_ + *	COMPLETE: the most generic way. Device supplied checksum of _all_   *	    the packet as seen by netif_rx in skb->csum.   *	    NOTE: Even if device supports only some protocols, but - *	    is able to produce some skb->csum, it MUST use HW, + *	    is able to produce some skb->csum, it MUST use COMPLETE,   *	    not UNNECESSARY.   *   * B. Checksumming on output.   *   *	NONE: skb is checksummed by protocol or csum is not required.   * - *	HW: device is required to csum packet as seen by hard_start_xmit + *	PARTIAL: device is required to csum packet as seen by hard_start_xmit   *	from skb->h.raw to the end and to record the checksum   *	at skb->h.raw+skb->csum.   * @@ -1261,14 +1262,14 @@ static inline int skb_linearize_cow(struct sk_buff *skb)   *	@len: length of data pulled   *   *	After doing a pull on a received packet, you need to call this to - *	update the CHECKSUM_HW checksum, or set ip_summed to CHECKSUM_NONE - *	so that it can be recomputed from scratch. + *	update the CHECKSUM_COMPLETE checksum, or set ip_summed to + *	CHECKSUM_NONE so that it can be recomputed from scratch.   */  static inline void skb_postpull_rcsum(struct sk_buff *skb,  				      const void *start, unsigned int len)  { -	if (skb->ip_summed == CHECKSUM_HW) +	if (skb->ip_summed == CHECKSUM_COMPLETE)  		skb->csum = csum_sub(skb->csum, csum_partial(start, len, 0));  } @@ -1287,7 +1288,7 @@ static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)  {  	if (likely(len >= skb->len))  		return 0; -	if (skb->ip_summed == CHECKSUM_HW) +	if (skb->ip_summed == CHECKSUM_COMPLETE)  		skb->ip_summed = CHECKSUM_NONE;  	return __pskb_trim(skb, len);  } diff --git a/net/core/datagram.c b/net/core/datagram.c index aecddcc3040..f558c61aecc 100644 --- a/net/core/datagram.c +++ b/net/core/datagram.c @@ -417,7 +417,7 @@ unsigned int __skb_checksum_complete(struct sk_buff *skb)  	sum = (u16)csum_fold(skb_checksum(skb, 0, skb->len, skb->csum));  	if (likely(!sum)) { -		if (unlikely(skb->ip_summed == CHECKSUM_HW)) +		if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))  			netdev_rx_csum_fault(skb->dev);  		skb->ip_summed = CHECKSUM_UNNECESSARY;  	} @@ -462,7 +462,7 @@ int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb,  			goto fault;  		if ((unsigned short)csum_fold(csum))  			goto csum_error; -		if (unlikely(skb->ip_summed == CHECKSUM_HW)) +		if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))  			netdev_rx_csum_fault(skb->dev);  		iov->iov_len -= chunk;  		iov->iov_base += chunk; diff --git a/net/core/dev.c b/net/core/dev.c index d4a1ec3bded..fc82f6f6e1c 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1166,12 +1166,12 @@ EXPORT_SYMBOL(netif_device_attach);   * Invalidate hardware checksum when packet is to be mangled, and   * complete checksum manually on outgoing path.   */ -int skb_checksum_help(struct sk_buff *skb, int inward) +int skb_checksum_help(struct sk_buff *skb)  {  	unsigned int csum;  	int ret = 0, offset = skb->h.raw - skb->data; -	if (inward) +	if (skb->ip_summed == CHECKSUM_COMPLETE)  		goto out_set_summed;  	if (unlikely(skb_shinfo(skb)->gso_size)) { @@ -1223,7 +1223,7 @@ struct sk_buff *skb_gso_segment(struct sk_buff *skb, int features)  	skb->mac_len = skb->nh.raw - skb->data;  	__skb_pull(skb, skb->mac_len); -	if (unlikely(skb->ip_summed != CHECKSUM_HW)) { +	if (unlikely(skb->ip_summed != CHECKSUM_PARTIAL)) {  		if (skb_header_cloned(skb) &&  		    (err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC)))  			return ERR_PTR(err); @@ -1232,7 +1232,7 @@ struct sk_buff *skb_gso_segment(struct sk_buff *skb, int features)  	rcu_read_lock();  	list_for_each_entry_rcu(ptype, &ptype_base[ntohs(type) & 15], list) {  		if (ptype->type == type && !ptype->dev && ptype->gso_segment) { -			if (unlikely(skb->ip_summed != CHECKSUM_HW)) { +			if (unlikely(skb->ip_summed != CHECKSUM_PARTIAL)) {  				err = ptype->gso_send_check(skb);  				segs = ERR_PTR(err);  				if (err || skb_gso_ok(skb, features)) @@ -1444,11 +1444,11 @@ int dev_queue_xmit(struct sk_buff *skb)  	/* If packet is not checksummed and device does not support  	 * checksumming for this protocol, complete checksumming here.  	 */ -	if (skb->ip_summed == CHECKSUM_HW && +	if (skb->ip_summed == CHECKSUM_PARTIAL &&  	    (!(dev->features & NETIF_F_GEN_CSUM) &&  	     (!(dev->features & NETIF_F_IP_CSUM) ||  	      skb->protocol != htons(ETH_P_IP)))) -	      	if (skb_checksum_help(skb, 0)) +	      	if (skb_checksum_help(skb))  	      		goto out_kfree_skb;  gso: diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 471da451cd4..ead5920c26d 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -110,7 +110,7 @@ static int checksum_udp(struct sk_buff *skb, struct udphdr *uh,  	psum = csum_tcpudp_nofold(saddr, daddr, ulen, IPPROTO_UDP, 0); -	if (skb->ip_summed == CHECKSUM_HW && +	if (skb->ip_summed == CHECKSUM_COMPLETE &&  	    !(u16)csum_fold(csum_add(psum, skb->csum)))  		return 0; diff --git a/net/core/skbuff.c b/net/core/skbuff.c index c54f3664bce..8a476f1956e 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -1397,7 +1397,7 @@ void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to)  	unsigned int csum;  	long csstart; -	if (skb->ip_summed == CHECKSUM_HW) +	if (skb->ip_summed == CHECKSUM_PARTIAL)  		csstart = skb->h.raw - skb->data;  	else  		csstart = skb_headlen(skb); @@ -1411,7 +1411,7 @@ void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to)  		csum = skb_copy_and_csum_bits(skb, csstart, to + csstart,  					      skb->len - csstart, 0); -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		long csstuff = csstart + skb->csum;  		*((unsigned short *)(to + csstuff)) = csum_fold(csum); @@ -1898,10 +1898,10 @@ int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb,   *	@len: length of data pulled   *   *	This function performs an skb_pull on the packet and updates - *	update the CHECKSUM_HW checksum.  It should be used on receive - *	path processing instead of skb_pull unless you know that the - *	checksum difference is zero (e.g., a valid IP header) or you - *	are setting ip_summed to CHECKSUM_NONE. + *	update the CHECKSUM_COMPLETE checksum.  It should be used on + *	receive path processing instead of skb_pull unless you know + *	that the checksum difference is zero (e.g., a valid IP header) + *	or you are setting ip_summed to CHECKSUM_NONE.   */  unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len)  { @@ -1994,7 +1994,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int features)  		frag = skb_shinfo(nskb)->frags;  		k = 0; -		nskb->ip_summed = CHECKSUM_HW; +		nskb->ip_summed = CHECKSUM_PARTIAL;  		nskb->csum = skb->csum;  		memcpy(skb_put(nskb, hsize), skb->data + offset, hsize); diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index 6ad797c1416..6d223e5c674 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c @@ -930,7 +930,7 @@ int icmp_rcv(struct sk_buff *skb)  	ICMP_INC_STATS_BH(ICMP_MIB_INMSGS);  	switch (skb->ip_summed) { -	case CHECKSUM_HW: +	case CHECKSUM_COMPLETE:  		if (!(u16)csum_fold(skb->csum))  			break;  		/* fall through */ diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index 8e8117c19e4..7003e763d97 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c @@ -931,7 +931,7 @@ int igmp_rcv(struct sk_buff *skb)  		goto drop;  	switch (skb->ip_summed) { -	case CHECKSUM_HW: +	case CHECKSUM_COMPLETE:  		if (!(u16)csum_fold(skb->csum))  			break;  		/* fall through */ diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c index b84b53a4752..8d7f107c2ee 100644 --- a/net/ipv4/ip_fragment.c +++ b/net/ipv4/ip_fragment.c @@ -665,7 +665,7 @@ static struct sk_buff *ip_frag_reasm(struct ipq *qp, struct net_device *dev)  		head->len += fp->len;  		if (head->ip_summed != fp->ip_summed)  			head->ip_summed = CHECKSUM_NONE; -		else if (head->ip_summed == CHECKSUM_HW) +		else if (head->ip_summed == CHECKSUM_COMPLETE)  			head->csum = csum_add(head->csum, fp->csum);  		head->truesize += fp->truesize;  		atomic_sub(fp->truesize, &ip_frag_mem); diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index 0f9b3a31997..e66f6ff2e19 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c @@ -576,7 +576,7 @@ static int ipgre_rcv(struct sk_buff *skb)  		if (flags&GRE_CSUM) {  			switch (skb->ip_summed) { -			case CHECKSUM_HW: +			case CHECKSUM_COMPLETE:  				csum = (u16)csum_fold(skb->csum);  				if (!csum)  					break; @@ -584,7 +584,7 @@ static int ipgre_rcv(struct sk_buff *skb)  			case CHECKSUM_NONE:  				skb->csum = 0;  				csum = __skb_checksum_complete(skb); -				skb->ip_summed = CHECKSUM_HW; +				skb->ip_summed = CHECKSUM_COMPLETE;  			}  			offset += 4;  		} diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 308bdeac345..1b9b6742ef7 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c @@ -680,7 +680,7 @@ ip_generic_getfrag(void *from, char *to, int offset, int len, int odd, struct sk  {  	struct iovec *iov = from; -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		if (memcpy_fromiovecend(to, iov, offset, len) < 0)  			return -EFAULT;  	} else { @@ -736,7 +736,7 @@ static inline int ip_ufo_append_data(struct sock *sk,  		/* initialize protocol header pointer */  		skb->h.raw = skb->data + fragheaderlen; -		skb->ip_summed = CHECKSUM_HW; +		skb->ip_summed = CHECKSUM_PARTIAL;  		skb->csum = 0;  		sk->sk_sndmsg_off = 0;  	} @@ -844,7 +844,7 @@ int ip_append_data(struct sock *sk,  	    length + fragheaderlen <= mtu &&  	    rt->u.dst.dev->features & NETIF_F_ALL_CSUM &&  	    !exthdrlen) -		csummode = CHECKSUM_HW; +		csummode = CHECKSUM_PARTIAL;  	inet->cork.length += length;  	if (((length > mtu) && (sk->sk_protocol == IPPROTO_UDP)) && diff --git a/net/ipv4/ipvs/ip_vs_proto_tcp.c b/net/ipv4/ipvs/ip_vs_proto_tcp.c index bc28b1160a3..820e8318d10 100644 --- a/net/ipv4/ipvs/ip_vs_proto_tcp.c +++ b/net/ipv4/ipvs/ip_vs_proto_tcp.c @@ -151,7 +151,7 @@ tcp_snat_handler(struct sk_buff **pskb,  		/* Only port and addr are changed, do fast csum update */  		tcp_fast_csum_update(tcph, cp->daddr, cp->vaddr,  				     cp->dport, cp->vport); -		if ((*pskb)->ip_summed == CHECKSUM_HW) +		if ((*pskb)->ip_summed == CHECKSUM_COMPLETE)  			(*pskb)->ip_summed = CHECKSUM_NONE;  	} else {  		/* full checksum calculation */ @@ -204,7 +204,7 @@ tcp_dnat_handler(struct sk_buff **pskb,  		/* Only port and addr are changed, do fast csum update */  		tcp_fast_csum_update(tcph, cp->vaddr, cp->daddr,  				     cp->vport, cp->dport); -		if ((*pskb)->ip_summed == CHECKSUM_HW) +		if ((*pskb)->ip_summed == CHECKSUM_COMPLETE)  			(*pskb)->ip_summed = CHECKSUM_NONE;  	} else {  		/* full checksum calculation */ @@ -229,7 +229,7 @@ tcp_csum_check(struct sk_buff *skb, struct ip_vs_protocol *pp)  	switch (skb->ip_summed) {  	case CHECKSUM_NONE:  		skb->csum = skb_checksum(skb, tcphoff, skb->len - tcphoff, 0); -	case CHECKSUM_HW: +	case CHECKSUM_COMPLETE:  		if (csum_tcpudp_magic(skb->nh.iph->saddr, skb->nh.iph->daddr,  				      skb->len - tcphoff,  				      skb->nh.iph->protocol, skb->csum)) { @@ -239,7 +239,7 @@ tcp_csum_check(struct sk_buff *skb, struct ip_vs_protocol *pp)  		}  		break;  	default: -		/* CHECKSUM_UNNECESSARY */ +		/* No need to checksum. */  		break;  	} diff --git a/net/ipv4/ipvs/ip_vs_proto_udp.c b/net/ipv4/ipvs/ip_vs_proto_udp.c index 89d9175d8f2..90c8166c0ec 100644 --- a/net/ipv4/ipvs/ip_vs_proto_udp.c +++ b/net/ipv4/ipvs/ip_vs_proto_udp.c @@ -161,7 +161,7 @@ udp_snat_handler(struct sk_buff **pskb,  		/* Only port and addr are changed, do fast csum update */  		udp_fast_csum_update(udph, cp->daddr, cp->vaddr,  				     cp->dport, cp->vport); -		if ((*pskb)->ip_summed == CHECKSUM_HW) +		if ((*pskb)->ip_summed == CHECKSUM_COMPLETE)  			(*pskb)->ip_summed = CHECKSUM_NONE;  	} else {  		/* full checksum calculation */ @@ -216,7 +216,7 @@ udp_dnat_handler(struct sk_buff **pskb,  		/* Only port and addr are changed, do fast csum update */  		udp_fast_csum_update(udph, cp->vaddr, cp->daddr,  				     cp->vport, cp->dport); -		if ((*pskb)->ip_summed == CHECKSUM_HW) +		if ((*pskb)->ip_summed == CHECKSUM_COMPLETE)  			(*pskb)->ip_summed = CHECKSUM_NONE;  	} else {  		/* full checksum calculation */ @@ -250,7 +250,7 @@ udp_csum_check(struct sk_buff *skb, struct ip_vs_protocol *pp)  		case CHECKSUM_NONE:  			skb->csum = skb_checksum(skb, udphoff,  						 skb->len - udphoff, 0); -		case CHECKSUM_HW: +		case CHECKSUM_COMPLETE:  			if (csum_tcpudp_magic(skb->nh.iph->saddr,  					      skb->nh.iph->daddr,  					      skb->len - udphoff, @@ -262,7 +262,7 @@ udp_csum_check(struct sk_buff *skb, struct ip_vs_protocol *pp)  			}  			break;  		default: -			/* CHECKSUM_UNNECESSARY */ +			/* No need to checksum. */  			break;  		}  	} diff --git a/net/ipv4/netfilter.c b/net/ipv4/netfilter.c index 6a9e34b794b..f88347de21a 100644 --- a/net/ipv4/netfilter.c +++ b/net/ipv4/netfilter.c @@ -168,7 +168,7 @@ unsigned int nf_ip_checksum(struct sk_buff *skb, unsigned int hook,  	unsigned int csum = 0;  	switch (skb->ip_summed) { -	case CHECKSUM_HW: +	case CHECKSUM_COMPLETE:  		if (hook != NF_IP_PRE_ROUTING && hook != NF_IP_LOCAL_IN)  			break;  		if ((protocol == 0 && !(u16)csum_fold(skb->csum)) || diff --git a/net/ipv4/netfilter/ip_conntrack_proto_tcp.c b/net/ipv4/netfilter/ip_conntrack_proto_tcp.c index fb920e76ec1..9de81ff645d 100644 --- a/net/ipv4/netfilter/ip_conntrack_proto_tcp.c +++ b/net/ipv4/netfilter/ip_conntrack_proto_tcp.c @@ -865,8 +865,7 @@ static int tcp_error(struct sk_buff *skb,  	/* Checksum invalid? Ignore.  	 * We skip checking packets on the outgoing path -	 * because the semantic of CHECKSUM_HW is different there  -	 * and moreover root might send raw packets. +	 * because it is assumed to be correct.  	 */  	/* FIXME: Source route IP option packets --RR */  	if (ip_conntrack_checksum && hooknum == NF_IP_PRE_ROUTING && diff --git a/net/ipv4/netfilter/ip_conntrack_proto_udp.c b/net/ipv4/netfilter/ip_conntrack_proto_udp.c index 9b2c16b4d2f..e58e52f1455 100644 --- a/net/ipv4/netfilter/ip_conntrack_proto_udp.c +++ b/net/ipv4/netfilter/ip_conntrack_proto_udp.c @@ -117,8 +117,7 @@ static int udp_error(struct sk_buff *skb, enum ip_conntrack_info *ctinfo,  	/* Checksum invalid? Ignore.  	 * We skip checking packets on the outgoing path -	 * because the semantic of CHECKSUM_HW is different there  -	 * and moreover root might send raw packets. +	 * because the checksum is assumed to be correct.  	 * FIXME: Source route IP option packets --RR */  	if (ip_conntrack_checksum && hooknum == NF_IP_PRE_ROUTING &&  	    nf_ip_checksum(skb, hooknum, iph->ihl * 4, IPPROTO_UDP)) { diff --git a/net/ipv4/netfilter/ip_nat_standalone.c b/net/ipv4/netfilter/ip_nat_standalone.c index 17de077a790..f4f00c816d8 100644 --- a/net/ipv4/netfilter/ip_nat_standalone.c +++ b/net/ipv4/netfilter/ip_nat_standalone.c @@ -111,8 +111,9 @@ ip_nat_fn(unsigned int hooknum,  		       & htons(IP_MF|IP_OFFSET)));  	/* If we had a hardware checksum before, it's now invalid */ -	if ((*pskb)->ip_summed == CHECKSUM_HW) -		if (skb_checksum_help(*pskb, (out == NULL))) +	if ((*pskb)->ip_summed == CHECKSUM_PARTIAL || +	    (*pskb)->ip_summed == CHECKSUM_COMPLETE) +		if (skb_checksum_help(*pskb))  			return NF_DROP;  	ct = ip_conntrack_get(*pskb, &ctinfo); diff --git a/net/ipv4/netfilter/ip_queue.c b/net/ipv4/netfilter/ip_queue.c index 198ac36db86..276a964ee6c 100644 --- a/net/ipv4/netfilter/ip_queue.c +++ b/net/ipv4/netfilter/ip_queue.c @@ -208,9 +208,9 @@ ipq_build_packet_message(struct ipq_queue_entry *entry, int *errp)  		break;  	case IPQ_COPY_PACKET: -		if (entry->skb->ip_summed == CHECKSUM_HW && -		    (*errp = skb_checksum_help(entry->skb, -		                               entry->info->outdev == NULL))) { +		if ((entry->skb->ip_summed == CHECKSUM_PARTIAL || +		     entry->skb->ip_summed == CHECKSUM_COMPLETE) && +		    (*errp = skb_checksum_help(entry->skb))) {  			read_unlock_bh(&queue_lock);  			return NULL;  		} diff --git a/net/ipv4/netfilter/ipt_ECN.c b/net/ipv4/netfilter/ipt_ECN.c index 4adf5c9d34f..4ec43f98fe4 100644 --- a/net/ipv4/netfilter/ipt_ECN.c +++ b/net/ipv4/netfilter/ipt_ECN.c @@ -49,7 +49,7 @@ set_ect_ip(struct sk_buff **pskb, const struct ipt_ECN_info *einfo)  /* Return 0 if there was an error. */  static inline int -set_ect_tcp(struct sk_buff **pskb, const struct ipt_ECN_info *einfo, int inward) +set_ect_tcp(struct sk_buff **pskb, const struct ipt_ECN_info *einfo)  {  	struct tcphdr _tcph, *tcph;  	u_int16_t diffs[2]; @@ -70,8 +70,9 @@ set_ect_tcp(struct sk_buff **pskb, const struct ipt_ECN_info *einfo, int inward)  		return 0;  	tcph = (void *)(*pskb)->nh.iph + (*pskb)->nh.iph->ihl*4; -	if ((*pskb)->ip_summed == CHECKSUM_HW && -	    skb_checksum_help(*pskb, inward)) +	if (((*pskb)->ip_summed == CHECKSUM_PARTIAL || +	     (*pskb)->ip_summed == CHECKSUM_COMPLETE) && +	    skb_checksum_help(*pskb))  		return 0;  	diffs[0] = ((u_int16_t *)tcph)[6]; @@ -106,7 +107,7 @@ target(struct sk_buff **pskb,  	if (einfo->operation & (IPT_ECN_OP_SET_ECE | IPT_ECN_OP_SET_CWR)  	    && (*pskb)->nh.iph->protocol == IPPROTO_TCP) -		if (!set_ect_tcp(pskb, einfo, (out == NULL))) +		if (!set_ect_tcp(pskb, einfo))  			return NF_DROP;  	return IPT_CONTINUE; diff --git a/net/ipv4/netfilter/ipt_TCPMSS.c b/net/ipv4/netfilter/ipt_TCPMSS.c index ef2fe5b3f0d..c998dc0fcd1 100644 --- a/net/ipv4/netfilter/ipt_TCPMSS.c +++ b/net/ipv4/netfilter/ipt_TCPMSS.c @@ -62,8 +62,9 @@ ipt_tcpmss_target(struct sk_buff **pskb,  	if (!skb_make_writable(pskb, (*pskb)->len))  		return NF_DROP; -	if ((*pskb)->ip_summed == CHECKSUM_HW && -	    skb_checksum_help(*pskb, out == NULL)) +	if (((*pskb)->ip_summed == CHECKSUM_PARTIAL || +	     (*pskb)->ip_summed == CHECKSUM_COMPLETE) && +	    skb_checksum_help(*pskb))  		return NF_DROP;  	iph = (*pskb)->nh.iph; diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 934396bb137..b0124e69ab3 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -568,7 +568,7 @@ new_segment:  		skb->truesize += copy;  		sk->sk_wmem_queued += copy;  		sk->sk_forward_alloc -= copy; -		skb->ip_summed = CHECKSUM_HW; +		skb->ip_summed = CHECKSUM_PARTIAL;  		tp->write_seq += copy;  		TCP_SKB_CB(skb)->end_seq += copy;  		skb_shinfo(skb)->gso_segs = 0; @@ -723,7 +723,7 @@ new_segment:  				 * Check whether we can use HW checksum.  				 */  				if (sk->sk_route_caps & NETIF_F_ALL_CSUM) -					skb->ip_summed = CHECKSUM_HW; +					skb->ip_summed = CHECKSUM_PARTIAL;  				skb_entail(sk, tp, skb);  				copy = size_goal; @@ -2205,7 +2205,7 @@ struct sk_buff *tcp_tso_segment(struct sk_buff *skb, int features)  		th->fin = th->psh = 0;  		th->check = ~csum_fold(th->check + delta); -		if (skb->ip_summed != CHECKSUM_HW) +		if (skb->ip_summed != CHECKSUM_PARTIAL)  			th->check = csum_fold(csum_partial(skb->h.raw, thlen,  							   skb->csum)); @@ -2219,7 +2219,7 @@ struct sk_buff *tcp_tso_segment(struct sk_buff *skb, int features)  	delta = htonl(oldlen + (skb->tail - skb->h.raw) + skb->data_len);  	th->check = ~csum_fold(th->check + delta); -	if (skb->ip_summed != CHECKSUM_HW) +	if (skb->ip_summed != CHECKSUM_PARTIAL)  		th->check = csum_fold(csum_partial(skb->h.raw, thlen,  						   skb->csum)); diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 43f6740244f..b2aa512a30e 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -484,7 +484,7 @@ void tcp_v4_send_check(struct sock *sk, int len, struct sk_buff *skb)  	struct inet_sock *inet = inet_sk(sk);  	struct tcphdr *th = skb->h.th; -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		th->check = ~tcp_v4_check(th, len, inet->saddr, inet->daddr, 0);  		skb->csum = offsetof(struct tcphdr, check);  	} else { @@ -509,7 +509,7 @@ int tcp_v4_gso_send_check(struct sk_buff *skb)  	th->check = 0;  	th->check = ~tcp_v4_check(th, skb->len, iph->saddr, iph->daddr, 0);  	skb->csum = offsetof(struct tcphdr, check); -	skb->ip_summed = CHECKSUM_HW; +	skb->ip_summed = CHECKSUM_PARTIAL;  	return 0;  } @@ -973,7 +973,7 @@ static struct sock *tcp_v4_hnd_req(struct sock *sk, struct sk_buff *skb)  static int tcp_v4_checksum_init(struct sk_buff *skb)  { -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_COMPLETE) {  		if (!tcp_v4_check(skb->h.th, skb->len, skb->nh.iph->saddr,  				  skb->nh.iph->daddr, skb->csum)) {  			skb->ip_summed = CHECKSUM_UNNECESSARY; diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index b4f3ffe1b3b..9252a50c4b4 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -577,7 +577,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss  	TCP_SKB_CB(buff)->sacked = TCP_SKB_CB(skb)->sacked;  	TCP_SKB_CB(skb)->sacked &= ~TCPCB_AT_TAIL; -	if (!skb_shinfo(skb)->nr_frags && skb->ip_summed != CHECKSUM_HW) { +	if (!skb_shinfo(skb)->nr_frags && skb->ip_summed != CHECKSUM_PARTIAL) {  		/* Copy and checksum data tail into the new buffer. */  		buff->csum = csum_partial_copy_nocheck(skb->data + len, skb_put(buff, nsize),  						       nsize, 0); @@ -586,7 +586,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss  		skb->csum = csum_block_sub(skb->csum, buff->csum, len);  	} else { -		skb->ip_summed = CHECKSUM_HW; +		skb->ip_summed = CHECKSUM_PARTIAL;  		skb_split(skb, buff, len);  	} @@ -689,7 +689,7 @@ int tcp_trim_head(struct sock *sk, struct sk_buff *skb, u32 len)  		__pskb_trim_head(skb, len - skb_headlen(skb));  	TCP_SKB_CB(skb)->seq += len; -	skb->ip_summed = CHECKSUM_HW; +	skb->ip_summed = CHECKSUM_PARTIAL;  	skb->truesize	     -= len;  	sk->sk_wmem_queued   -= len; @@ -1062,7 +1062,7 @@ static int tso_fragment(struct sock *sk, struct sk_buff *skb, unsigned int len,  	/* This packet was never sent out yet, so no SACK bits. */  	TCP_SKB_CB(buff)->sacked = 0; -	buff->ip_summed = skb->ip_summed = CHECKSUM_HW; +	buff->ip_summed = skb->ip_summed = CHECKSUM_PARTIAL;  	skb_split(skb, buff, len);  	/* Fix up tso_factor for both original and new SKB.  */ @@ -1206,8 +1206,7 @@ static int tcp_mtu_probe(struct sock *sk)  	TCP_SKB_CB(nskb)->flags = TCPCB_FLAG_ACK;  	TCP_SKB_CB(nskb)->sacked = 0;  	nskb->csum = 0; -	if (skb->ip_summed == CHECKSUM_HW) -		nskb->ip_summed = CHECKSUM_HW; +	nskb->ip_summed = skb->ip_summed;  	len = 0;  	while (len < probe_size) { @@ -1231,7 +1230,7 @@ static int tcp_mtu_probe(struct sock *sk)  			                           ~(TCPCB_FLAG_FIN|TCPCB_FLAG_PSH);  			if (!skb_shinfo(skb)->nr_frags) {  				skb_pull(skb, copy); -				if (skb->ip_summed != CHECKSUM_HW) +				if (skb->ip_summed != CHECKSUM_PARTIAL)  					skb->csum = csum_partial(skb->data, skb->len, 0);  			} else {  				__pskb_trim_head(skb, copy); @@ -1572,10 +1571,9 @@ static void tcp_retrans_try_collapse(struct sock *sk, struct sk_buff *skb, int m  		memcpy(skb_put(skb, next_skb_size), next_skb->data, next_skb_size); -		if (next_skb->ip_summed == CHECKSUM_HW) -			skb->ip_summed = CHECKSUM_HW; +		skb->ip_summed = next_skb->ip_summed; -		if (skb->ip_summed != CHECKSUM_HW) +		if (skb->ip_summed != CHECKSUM_PARTIAL)  			skb->csum = csum_block_add(skb->csum, next_skb->csum, skb_size);  		/* Update sequence range on original skb. */ diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index a4d005eccc7..87152510980 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -429,7 +429,7 @@ static int udp_push_pending_frames(struct sock *sk, struct udp_sock *up)  		/*  		 * Only one fragment on the socket.  		 */ -		if (skb->ip_summed == CHECKSUM_HW) { +		if (skb->ip_summed == CHECKSUM_PARTIAL) {  			skb->csum = offsetof(struct udphdr, check);  			uh->check = ~csum_tcpudp_magic(fl->fl4_src, fl->fl4_dst,  					up->len, IPPROTO_UDP, 0); @@ -448,7 +448,7 @@ static int udp_push_pending_frames(struct sock *sk, struct udp_sock *up)  		 * fragments on the socket so that all csums of sk_buffs  		 * should be together.  		 */ -		if (skb->ip_summed == CHECKSUM_HW) { +		if (skb->ip_summed == CHECKSUM_PARTIAL) {  			int offset = (unsigned char *)uh - skb->data;  			skb->csum = skb_checksum(skb, offset, skb->len - offset, 0); @@ -1088,7 +1088,7 @@ static void udp_checksum_init(struct sk_buff *skb, struct udphdr *uh,  {  	if (uh->check == 0) {  		skb->ip_summed = CHECKSUM_UNNECESSARY; -	} else if (skb->ip_summed == CHECKSUM_HW) { +	} else if (skb->ip_summed == CHECKSUM_COMPLETE) {  		if (!udp_check(uh, ulen, saddr, daddr, skb->csum))  			skb->ip_summed = CHECKSUM_UNNECESSARY;  	} diff --git a/net/ipv4/xfrm4_output.c b/net/ipv4/xfrm4_output.c index d16f863cf68..4a96a9e3ef3 100644 --- a/net/ipv4/xfrm4_output.c +++ b/net/ipv4/xfrm4_output.c @@ -48,8 +48,8 @@ static int xfrm4_output_one(struct sk_buff *skb)  	struct xfrm_state *x = dst->xfrm;  	int err; -	if (skb->ip_summed == CHECKSUM_HW) { -		err = skb_checksum_help(skb, 0); +	if (skb->ip_summed == CHECKSUM_PARTIAL) { +		err = skb_checksum_help(skb);  		if (err)  			goto error_nolock;  	} diff --git a/net/ipv6/exthdrs.c b/net/ipv6/exthdrs.c index 86dac106873..05afa6b1912 100644 --- a/net/ipv6/exthdrs.c +++ b/net/ipv6/exthdrs.c @@ -294,7 +294,7 @@ looped_back:  		hdr = (struct ipv6_rt_hdr *) skb2->h.raw;  	} -	if (skb->ip_summed == CHECKSUM_HW) +	if (skb->ip_summed == CHECKSUM_COMPLETE)  		skb->ip_summed = CHECKSUM_NONE;  	i = n - --hdr->segments_left; diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index dbfce089e91..10305510767 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c @@ -606,7 +606,7 @@ static int icmpv6_rcv(struct sk_buff **pskb)  	/* Perform checksum. */  	switch (skb->ip_summed) { -	case CHECKSUM_HW: +	case CHECKSUM_COMPLETE:  		if (!csum_ipv6_magic(saddr, daddr, skb->len, IPPROTO_ICMPV6,  				     skb->csum))  			break; diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 4fb47a25291..65514f21c18 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c @@ -866,7 +866,7 @@ static inline int ip6_ufo_append_data(struct sock *sk,  		/* initialize protocol header pointer */  		skb->h.raw = skb->data + fragheaderlen; -		skb->ip_summed = CHECKSUM_HW; +		skb->ip_summed = CHECKSUM_PARTIAL;  		skb->csum = 0;  		sk->sk_sndmsg_off = 0;  	} diff --git a/net/ipv6/netfilter.c b/net/ipv6/netfilter.c index 395a417ba95..580b1aba672 100644 --- a/net/ipv6/netfilter.c +++ b/net/ipv6/netfilter.c @@ -87,7 +87,7 @@ unsigned int nf_ip6_checksum(struct sk_buff *skb, unsigned int hook,  	unsigned int csum = 0;  	switch (skb->ip_summed) { -	case CHECKSUM_HW: +	case CHECKSUM_COMPLETE:  		if (hook != NF_IP6_PRE_ROUTING && hook != NF_IP6_LOCAL_IN)  			break;  		if (!csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr, diff --git a/net/ipv6/netfilter/ip6_queue.c b/net/ipv6/netfilter/ip6_queue.c index 968a14be0d0..c01c126224e 100644 --- a/net/ipv6/netfilter/ip6_queue.c +++ b/net/ipv6/netfilter/ip6_queue.c @@ -206,9 +206,9 @@ ipq_build_packet_message(struct ipq_queue_entry *entry, int *errp)  		break;  	case IPQ_COPY_PACKET: -		if (entry->skb->ip_summed == CHECKSUM_HW && -		    (*errp = skb_checksum_help(entry->skb, -		                               entry->info->outdev == NULL))) { +		if ((entry->skb->ip_summed == CHECKSUM_PARTIAL || +		     entry->skb->ip_summed == CHECKSUM_COMPLETE) && +		    (*errp = skb_checksum_help(entry->skb))) {  			read_unlock_bh(&queue_lock);  			return NULL;  		} diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c index 00d5583807f..7a4e4c2e319 100644 --- a/net/ipv6/netfilter/nf_conntrack_reasm.c +++ b/net/ipv6/netfilter/nf_conntrack_reasm.c @@ -408,7 +408,7 @@ static int nf_ct_frag6_queue(struct nf_ct_frag6_queue *fq, struct sk_buff *skb,   		return -1;  	} - 	if (skb->ip_summed == CHECKSUM_HW) + 	if (skb->ip_summed == CHECKSUM_COMPLETE)   		skb->csum = csum_sub(skb->csum,   				     csum_partial(skb->nh.raw,  						  (u8*)(fhdr + 1) - skb->nh.raw, @@ -640,7 +640,7 @@ nf_ct_frag6_reasm(struct nf_ct_frag6_queue *fq, struct net_device *dev)  		head->len += fp->len;  		if (head->ip_summed != fp->ip_summed)  			head->ip_summed = CHECKSUM_NONE; -		else if (head->ip_summed == CHECKSUM_HW) +		else if (head->ip_summed == CHECKSUM_COMPLETE)  			head->csum = csum_add(head->csum, fp->csum);  		head->truesize += fp->truesize;  		atomic_sub(fp->truesize, &nf_ct_frag6_mem); @@ -652,7 +652,7 @@ nf_ct_frag6_reasm(struct nf_ct_frag6_queue *fq, struct net_device *dev)  	head->nh.ipv6h->payload_len = htons(payload_len);  	/* Yes, and fold redundant checksum back. 8) */ -	if (head->ip_summed == CHECKSUM_HW) +	if (head->ip_summed == CHECKSUM_COMPLETE)  		head->csum = csum_partial(head->nh.raw, head->h.raw-head->nh.raw, head->csum);  	fq->fragments = NULL; diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index d5040e17229..d4af1cb5e19 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c @@ -334,7 +334,7 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)  	if (!rp->checksum)  		skb->ip_summed = CHECKSUM_UNNECESSARY; -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_COMPLETE) {  		skb_postpull_rcsum(skb, skb->nh.raw,  		                   skb->h.raw - skb->nh.raw);  		if (!csum_ipv6_magic(&skb->nh.ipv6h->saddr, diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c index 4e299c69e1c..a8623d2b087 100644 --- a/net/ipv6/reassembly.c +++ b/net/ipv6/reassembly.c @@ -433,7 +433,7 @@ static void ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb,   		return;  	} - 	if (skb->ip_summed == CHECKSUM_HW) + 	if (skb->ip_summed == CHECKSUM_COMPLETE)   		skb->csum = csum_sub(skb->csum,   				     csum_partial(skb->nh.raw, (u8*)(fhdr+1)-skb->nh.raw, 0)); @@ -647,7 +647,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff **skb_in,  		head->len += fp->len;  		if (head->ip_summed != fp->ip_summed)  			head->ip_summed = CHECKSUM_NONE; -		else if (head->ip_summed == CHECKSUM_HW) +		else if (head->ip_summed == CHECKSUM_COMPLETE)  			head->csum = csum_add(head->csum, fp->csum);  		head->truesize += fp->truesize;  		atomic_sub(fp->truesize, &ip6_frag_mem); @@ -662,7 +662,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff **skb_in,  	*skb_in = head;  	/* Yes, and fold redundant checksum back. 8) */ -	if (head->ip_summed == CHECKSUM_HW) +	if (head->ip_summed == CHECKSUM_COMPLETE)  		head->csum = csum_partial(head->nh.raw, head->h.raw-head->nh.raw, head->csum);  	IP6_INC_STATS_BH(IPSTATS_MIB_REASMOKS); diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 302786a11cd..7f1b660493b 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -545,7 +545,7 @@ static void tcp_v6_send_check(struct sock *sk, int len, struct sk_buff *skb)  	struct ipv6_pinfo *np = inet6_sk(sk);  	struct tcphdr *th = skb->h.th; -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		th->check = ~csum_ipv6_magic(&np->saddr, &np->daddr, len, IPPROTO_TCP,  0);  		skb->csum = offsetof(struct tcphdr, check);  	} else { @@ -570,7 +570,7 @@ static int tcp_v6_gso_send_check(struct sk_buff *skb)  	th->check = ~csum_ipv6_magic(&ipv6h->saddr, &ipv6h->daddr, skb->len,  				     IPPROTO_TCP, 0);  	skb->csum = offsetof(struct tcphdr, check); -	skb->ip_summed = CHECKSUM_HW; +	skb->ip_summed = CHECKSUM_PARTIAL;  	return 0;  } @@ -1033,7 +1033,7 @@ out:  static int tcp_v6_checksum_init(struct sk_buff *skb)  { -	if (skb->ip_summed == CHECKSUM_HW) { +	if (skb->ip_summed == CHECKSUM_COMPLETE) {  		if (!tcp_v6_check(skb->h.th,skb->len,&skb->nh.ipv6h->saddr,  				  &skb->nh.ipv6h->daddr,skb->csum)) {  			skb->ip_summed = CHECKSUM_UNNECESSARY; diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 82c7c9cde2a..780b89f6dfc 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -475,7 +475,7 @@ static int udpv6_rcv(struct sk_buff **pskb)  		uh = skb->h.uh;  	} -	if (skb->ip_summed == CHECKSUM_HW && +	if (skb->ip_summed == CHECKSUM_COMPLETE &&  	    !csum_ipv6_magic(saddr, daddr, ulen, IPPROTO_UDP, skb->csum))  		skb->ip_summed = CHECKSUM_UNNECESSARY; diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c index c8c8b44a0f5..6d111743e50 100644 --- a/net/ipv6/xfrm6_output.c +++ b/net/ipv6/xfrm6_output.c @@ -41,8 +41,8 @@ static int xfrm6_output_one(struct sk_buff *skb)  	struct xfrm_state *x = dst->xfrm;  	int err; -	if (skb->ip_summed == CHECKSUM_HW) { -		err = skb_checksum_help(skb, 0); +	if (skb->ip_summed == CHECKSUM_PARTIAL) { +		err = skb_checksum_help(skb);  		if (err)  			goto error_nolock;  	} diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c index af8adcba23a..308d2abd7ee 100644 --- a/net/netfilter/nf_conntrack_proto_tcp.c +++ b/net/netfilter/nf_conntrack_proto_tcp.c @@ -823,8 +823,7 @@ static int tcp_error(struct sk_buff *skb,  	/* Checksum invalid? Ignore.  	 * We skip checking packets on the outgoing path -	 * because the semantic of CHECKSUM_HW is different there  -	 * and moreover root might send raw packets. +	 * because the checksum is assumed to be correct.  	 */  	/* FIXME: Source route IP option packets --RR */  	if (nf_conntrack_checksum && diff --git a/net/netfilter/nf_conntrack_proto_udp.c b/net/netfilter/nf_conntrack_proto_udp.c index ae07ebe3ab3..d36e03139e8 100644 --- a/net/netfilter/nf_conntrack_proto_udp.c +++ b/net/netfilter/nf_conntrack_proto_udp.c @@ -131,8 +131,7 @@ static int udp_error(struct sk_buff *skb, unsigned int dataoff,  	/* Checksum invalid? Ignore.  	 * We skip checking packets on the outgoing path -	 * because the semantic of CHECKSUM_HW is different there -	 * and moreover root might send raw packets. +	 * because the checksum is assumed to be correct.  	 * FIXME: Source route IP option packets --RR */  	if (nf_conntrack_checksum &&  	    ((pf == PF_INET && hooknum == NF_IP_PRE_ROUTING) || diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c index 49ef41e34c4..eddfbe4441a 100644 --- a/net/netfilter/nfnetlink_queue.c +++ b/net/netfilter/nfnetlink_queue.c @@ -377,9 +377,9 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue,  		break;  	case NFQNL_COPY_PACKET: -		if (entskb->ip_summed == CHECKSUM_HW && -		    (*errp = skb_checksum_help(entskb, -		                               outdev == NULL))) { +		if ((entskb->ip_summed == CHECKSUM_PARTIAL || +		     entskb->ip_summed == CHECKSUM_COMPLETE) && +		    (*errp = skb_checksum_help(entskb))) {  			spin_unlock_bh(&queue->lock);  			return NULL;  		} diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 4172a523591..300215bdbf4 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -586,7 +586,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, struct packe  		else if (skb->pkt_type == PACKET_OUTGOING) {  			/* Special case: outgoing packets have ll header at head */  			skb_pull(skb, skb->nh.raw - skb->data); -			if (skb->ip_summed == CHECKSUM_HW) +			if (skb->ip_summed == CHECKSUM_PARTIAL)  				status |= TP_STATUS_CSUMNOTREADY;  		}  	} diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c index a08ec4c7c55..45939bafbdf 100644 --- a/net/sched/sch_netem.c +++ b/net/sched/sch_netem.c @@ -192,8 +192,8 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch)  	 */  	if (q->corrupt && q->corrupt >= get_crandom(&q->corrupt_cor)) {  		if (!(skb = skb_unshare(skb, GFP_ATOMIC)) -		    || (skb->ip_summed == CHECKSUM_HW -			&& skb_checksum_help(skb, 0))) { +		    || (skb->ip_summed == CHECKSUM_PARTIAL +			&& skb_checksum_help(skb))) {  			sch->qstats.drops++;  			return NET_XMIT_DROP;  		} diff --git a/net/sunrpc/socklib.c b/net/sunrpc/socklib.c index eb330d4f66d..6f17527b9e6 100644 --- a/net/sunrpc/socklib.c +++ b/net/sunrpc/socklib.c @@ -168,7 +168,7 @@ int csum_partial_copy_to_xdr(struct xdr_buf *xdr, struct sk_buff *skb)  		return -1;  	if ((unsigned short)csum_fold(desc.csum))  		return -1; -	if (unlikely(skb->ip_summed == CHECKSUM_HW)) +	if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))  		netdev_rx_csum_fault(skb->dev);  	return 0;  no_checksum:  |