netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch 3/4] mv643xx_eth: fix byte order when checksum offload is enabled
@ 2008-02-05  7:47 akpm
  2008-02-05 18:32 ` Jeff Garzik
  0 siblings, 1 reply; 2+ messages in thread
From: akpm @ 2008-02-05  7:47 UTC (permalink / raw)
  To: jeff; +Cc: netdev, akpm, byron.bbradley, dale, mlachwani, viro

From: Byron Bradley <byron.bbradley@gmail.com>

The Marvell Orion system on chips have an integrated mv643xx MAC.  On these
little endian ARM devices mv643xx will oops when checksum offload is
enabled.  Swapping the byte order of the protocol and checksum solves this
problem.

Signed-off-by: Byron Bradley <byron.bbradley@gmail.com>
Cc: Dale Farnsworth <dale@farnsworth.org>
Cc: Manish Lachwani <mlachwani@mvista.com>
Cc: Jeff Garzik <jeff@garzik.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---

 drivers/net/mv643xx_eth.c |   11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff -puN drivers/net/mv643xx_eth.c~mv643xx_eth-fix-byte-order-when-checksum-offload-is-enabled drivers/net/mv643xx_eth.c
--- a/drivers/net/mv643xx_eth.c~mv643xx_eth-fix-byte-order-when-checksum-offload-is-enabled
+++ a/drivers/net/mv643xx_eth.c
@@ -1652,6 +1652,11 @@ static void eth_tx_fill_frag_descs(struc
 	}
 }
 
+static inline __be16 sum16_as_be(__sum16 sum)
+{
+	return (__force __be16)sum;
+}
+
 /**
  * eth_tx_submit_descs_for_skb - submit data from an skb to the tx hw
  *
@@ -1689,7 +1694,7 @@ static void eth_tx_submit_descs_for_skb(
 	desc->buf_ptr = dma_map_single(NULL, skb->data, length, DMA_TO_DEVICE);
 
 	if (skb->ip_summed == CHECKSUM_PARTIAL) {
-		BUG_ON(skb->protocol != ETH_P_IP);
+		BUG_ON(skb->protocol != htons(ETH_P_IP));
 
 		cmd_sts |= ETH_GEN_TCP_UDP_CHECKSUM |
 			   ETH_GEN_IP_V_4_CHECKSUM  |
@@ -1698,10 +1703,10 @@ static void eth_tx_submit_descs_for_skb(
 		switch (ip_hdr(skb)->protocol) {
 		case IPPROTO_UDP:
 			cmd_sts |= ETH_UDP_FRAME;
-			desc->l4i_chk = udp_hdr(skb)->check;
+			desc->l4i_chk = ntohs(sum16_as_be(udp_hdr(skb)->check));
 			break;
 		case IPPROTO_TCP:
-			desc->l4i_chk = tcp_hdr(skb)->check;
+			desc->l4i_chk = ntohs(sum16_as_be(tcp_hdr(skb)->check));
 			break;
 		default:
 			BUG();
_

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [patch 3/4] mv643xx_eth: fix byte order when checksum offload is enabled
  2008-02-05  7:47 [patch 3/4] mv643xx_eth: fix byte order when checksum offload is enabled akpm
@ 2008-02-05 18:32 ` Jeff Garzik
  0 siblings, 0 replies; 2+ messages in thread
From: Jeff Garzik @ 2008-02-05 18:32 UTC (permalink / raw)
  To: akpm; +Cc: netdev, byron.bbradley, dale, mlachwani, viro

akpm@linux-foundation.org wrote:
> From: Byron Bradley <byron.bbradley@gmail.com>
> 
> The Marvell Orion system on chips have an integrated mv643xx MAC.  On these
> little endian ARM devices mv643xx will oops when checksum offload is
> enabled.  Swapping the byte order of the protocol and checksum solves this
> problem.
> 
> Signed-off-by: Byron Bradley <byron.bbradley@gmail.com>
> Cc: Dale Farnsworth <dale@farnsworth.org>
> Cc: Manish Lachwani <mlachwani@mvista.com>
> Cc: Jeff Garzik <jeff@garzik.org>
> Cc: Al Viro <viro@zeniv.linux.org.uk>
> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> ---
> 
>  drivers/net/mv643xx_eth.c |   11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)

applied 3-4



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-02-05 18:33 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-05  7:47 [patch 3/4] mv643xx_eth: fix byte order when checksum offload is enabled akpm
2008-02-05 18:32 ` Jeff Garzik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).