All of lore.kernel.org
 help / color / mirror / Atom feed
From: Baruch Siach <baruch@tkos.co.il>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 2/2] net: ping,arp: Fix cache alignment issues
Date: Wed, 30 May 2018 08:52:30 +0300	[thread overview]
Message-ID: <1c55b2ef764fd213e69367c79ead7b5294dbd13a.1527659550.git.baruch@tkos.co.il> (raw)
In-Reply-To: <bd1d3296eb645160fe9a742f21e985debae201bd.1527659550.git.baruch@tkos.co.il>

From: Jon Nettleton <jon@solid-run.com>

Both ping_receive and arp_receive would transmit a received packet
back out using its original point.  This causes problems with
certain network cards that add a custom header to the packet.
Specifically the mvneta driver for the Armada series boards has
a 2 byte Marvell header that is bypassed and passed along to
the system, but that 2 byte offset now causes a misalignment if
it is attempted to be sent back out.

Rather than changing the driver to memcpy all the received packets
to cache aligned buffers we instead change the two offending
network commands to copy the packet into a cache aligned net_tx_packet
before sending it back out.

This fixes occasional messages like:

  CACHE: Misaligned operation at range [3fc01082, 3fc010c2]

Reviewed-by: Stefan Roese <sr@denx.de>
Signed-off-by: Jon Nettleton <jon@solid-run.com>
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
---
v2: Add Stefan's review tag
---
 net/arp.c  | 3 ++-
 net/ping.c | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/net/arp.c b/net/arp.c
index 990b771c9211..b8a71684cd76 100644
--- a/net/arp.c
+++ b/net/arp.c
@@ -182,7 +182,8 @@ void arp_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len)
 		    (net_read_ip(&arp->ar_spa).s_addr & net_netmask.s_addr))
 			udelay(5000);
 #endif
-		net_send_packet((uchar *)et, eth_hdr_size + ARP_HDR_SIZE);
+		memcpy(net_tx_packet, et, eth_hdr_size + ARP_HDR_SIZE);
+		net_send_packet(net_tx_packet, eth_hdr_size + ARP_HDR_SIZE);
 		return;
 
 	case ARPOP_REPLY:		/* arp reply */
diff --git a/net/ping.c b/net/ping.c
index 5464f2f785fe..3e5461a36a02 100644
--- a/net/ping.c
+++ b/net/ping.c
@@ -107,7 +107,8 @@ void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len)
 		icmph->type = ICMP_ECHO_REPLY;
 		icmph->checksum = 0;
 		icmph->checksum = compute_ip_checksum(icmph, len - IP_HDR_SIZE);
-		net_send_packet((uchar *)et, eth_hdr_size + len);
+		memcpy(net_tx_packet, et, eth_hdr_size + len);
+		net_send_packet(net_tx_packet, eth_hdr_size + len);
 		return;
 /*	default:
 		return;*/
-- 
2.17.0

  reply	other threads:[~2018-05-30  5:52 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-30  5:52 [U-Boot] [PATCH v2 1/2] mvebu: neta: align DMA buffers Baruch Siach
2018-05-30  5:52 ` Baruch Siach [this message]
2018-06-08 20:55   ` [U-Boot] [PATCH v2 2/2] net: ping, arp: Fix cache alignment issues Joe Hershberger
2018-06-08 20:56 ` [U-Boot] [PATCH v2 1/2] mvebu: neta: align DMA buffers Joe Hershberger
2018-06-13 19:02 ` [U-Boot] " Joe Hershberger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1c55b2ef764fd213e69367c79ead7b5294dbd13a.1527659550.git.baruch@tkos.co.il \
    --to=baruch@tkos.co.il \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.