Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 84fa7933 authored by Patrick McHardy's avatar Patrick McHardy Committed by David S. Miller
Browse files

[NET]: Replace CHECKSUM_HW by CHECKSUM_PARTIAL/CHECKSUM_COMPLETE



Replace CHECKSUM_HW by CHECKSUM_PARTIAL (for outgoing packets, whose
checksum still needs to be completed) and CHECKSUM_COMPLETE (for
incoming packets, device supplied full checksum).

Patch originally from Herbert Xu, updated by myself for 2.6.18-rc3.

Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8584d6df
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -1912,7 +1912,7 @@ he_service_rbrq(struct he_dev *he_dev, int group)
				skb->tail = skb->data + skb->len;
				skb->tail = skb->data + skb->len;
#ifdef USE_CHECKSUM_HW
#ifdef USE_CHECKSUM_HW
				if (vcc->vpi == 0 && vcc->vci >= ATM_NOT_RSV_VCI) {
				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,
					skb->csum = TCP_CKSUM(skb->data,
							he_vcc->pdu_len);
							he_vcc->pdu_len);
				}
				}
+1 −1
Original line number Original line Diff line number Diff line
@@ -2077,7 +2077,7 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)


	vp->tx_ring[entry].next = 0;
	vp->tx_ring[entry].next = 0;
#if DO_ZEROCOPY
#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);
			vp->tx_ring[entry].status = cpu_to_le32(skb->len | TxIntrUploaded);
	else
	else
			vp->tx_ring[entry].status = cpu_to_le32(skb->len | TxIntrUploaded | AddTCPChksum | AddUDPChksum);
			vp->tx_ring[entry].status = cpu_to_le32(skb->len | TxIntrUploaded | AddTCPChksum | AddUDPChksum);
+3 −3
Original line number Original line Diff line number Diff line
@@ -813,7 +813,7 @@ static int cp_start_xmit (struct sk_buff *skb, struct net_device *dev)


		if (mss)
		if (mss)
			flags |= LargeSend | ((mss & MSSMask) << MSSShift);
			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;
			const struct iphdr *ip = skb->nh.iph;
			if (ip->protocol == IPPROTO_TCP)
			if (ip->protocol == IPPROTO_TCP)
				flags |= IPCS | TCPCS;
				flags |= IPCS | TCPCS;
@@ -867,7 +867,7 @@ static int cp_start_xmit (struct sk_buff *skb, struct net_device *dev)
			if (mss)
			if (mss)
				ctrl |= LargeSend |
				ctrl |= LargeSend |
					((mss & MSSMask) << MSSShift);
					((mss & MSSMask) << MSSShift);
			else if (skb->ip_summed == CHECKSUM_HW) {
			else if (skb->ip_summed == CHECKSUM_PARTIAL) {
				if (ip->protocol == IPPROTO_TCP)
				if (ip->protocol == IPPROTO_TCP)
					ctrl |= IPCS | TCPCS;
					ctrl |= IPCS | TCPCS;
				else if (ip->protocol == IPPROTO_UDP)
				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);
		txd->addr = cpu_to_le64(first_mapping);
		wmb();
		wmb();


		if (skb->ip_summed == CHECKSUM_HW) {
		if (skb->ip_summed == CHECKSUM_PARTIAL) {
			if (ip->protocol == IPPROTO_TCP)
			if (ip->protocol == IPPROTO_TCP)
				txd->opts1 = cpu_to_le32(first_eor | first_len |
				txd->opts1 = cpu_to_le32(first_eor | first_len |
							 FirstFrag | DescOwn |
							 FirstFrag | DescOwn |
+4 −4
Original line number Original line Diff line number Diff line
@@ -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) {
		if (bd_flags & BD_FLG_TCP_UDP_SUM) {
			skb->csum = htons(csum);
			skb->csum = htons(csum);
			skb->ip_summed = CHECKSUM_HW;
			skb->ip_summed = CHECKSUM_COMPLETE;
		} else {
		} else {
			skb->ip_summed = CHECKSUM_NONE;
			skb->ip_summed = CHECKSUM_NONE;
		}
		}
@@ -2511,7 +2511,7 @@ static int ace_start_xmit(struct sk_buff *skb, struct net_device *dev)


		mapping = ace_map_tx_skb(ap, skb, skb, idx);
		mapping = ace_map_tx_skb(ap, skb, skb, idx);
		flagsize = (skb->len << 16) | (BD_FLG_END);
		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;
			flagsize |= BD_FLG_TCP_UDP_SUM;
#if ACENIC_DO_VLAN
#if ACENIC_DO_VLAN
		if (vlan_tx_tag_present(skb)) {
		if (vlan_tx_tag_present(skb)) {
@@ -2534,7 +2534,7 @@ static int ace_start_xmit(struct sk_buff *skb, struct net_device *dev)


		mapping = ace_map_tx_skb(ap, skb, NULL, idx);
		mapping = ace_map_tx_skb(ap, skb, NULL, idx);
		flagsize = (skb_headlen(skb) << 16);
		flagsize = (skb_headlen(skb) << 16);
		if (skb->ip_summed == CHECKSUM_HW)
		if (skb->ip_summed == CHECKSUM_PARTIAL)
			flagsize |= BD_FLG_TCP_UDP_SUM;
			flagsize |= BD_FLG_TCP_UDP_SUM;
#if ACENIC_DO_VLAN
#if ACENIC_DO_VLAN
		if (vlan_tx_tag_present(skb)) {
		if (vlan_tx_tag_present(skb)) {
@@ -2560,7 +2560,7 @@ static int ace_start_xmit(struct sk_buff *skb, struct net_device *dev)
					       PCI_DMA_TODEVICE);
					       PCI_DMA_TODEVICE);


			flagsize = (frag->size << 16);
			flagsize = (frag->size << 16);
			if (skb->ip_summed == CHECKSUM_HW)
			if (skb->ip_summed == CHECKSUM_PARTIAL)
				flagsize |= BD_FLG_TCP_UDP_SUM;
				flagsize |= BD_FLG_TCP_UDP_SUM;
			idx = (idx + 1) % ACE_TX_RING_ENTRIES(ap);
			idx = (idx + 1) % ACE_TX_RING_ENTRIES(ap);


+1 −1
Original line number Original line Diff line number Diff line
@@ -4423,7 +4423,7 @@ bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev)
	ring_prod = TX_RING_IDX(prod);
	ring_prod = TX_RING_IDX(prod);


	vlan_tag_flags = 0;
	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;
		vlan_tag_flags |= TX_BD_FLAGS_TCP_UDP_CKSUM;
	}
	}


Loading