Re: [PATCH 7/7] net: fec_imx: Do not use DMA coherent memory for Rx buffers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jan 14, 2019 at 01:21:30PM +0100, Uwe Kleine-König wrote:
> Hello,
> 
> On Mon, Sep 17, 2018 at 10:21:22PM -0700, Andrey Smirnov wrote:
> > Trying to do unaligned access of coherent memory on AArch64 will lead
> > to an abort and some parts of our IP stack will do exactly that with
> > received packet buffer by using memcpy() to extracts parts of it.
> > 
> > Convert the driver to use regular memory for received data buffers to
> > prevent the issue from happening.
> 
> I didn't spend time yet to debug, but this commit is pointed out to
> break nfs booting on an mx28evk board.
> 
> Maybe someone spots the obvious problem before I come around to fix
> this.

Sascha found it. The problem is that the nfs code uses the memory
location the packet was placed in only after the net_receive function
returned.

With this patch applied it works for me again:

diff --git a/fs/nfs.c b/fs/nfs.c
index d7f156687fc9..20fdf5ff4dfc 100644
--- a/fs/nfs.c
+++ b/fs/nfs.c
@@ -440,6 +440,7 @@ again:
 	nfs_timer_start = get_time_ns();
 
 	nfs_state = STATE_START;
+	free(nfs_packet);
 	nfs_packet = NULL;
 
 	while (nfs_state != STATE_DONE) {
@@ -924,7 +925,7 @@ static void nfs_handler(void *ctx, char *packet, unsigned len)
 	char *pkt = net_eth_to_udp_payload(packet);
 
 	nfs_state = STATE_DONE;
-	nfs_packet = pkt;
+	nfs_packet = xmemdup(pkt, len);
 	nfs_len = len;
 }
 

(Not completely nice though, as (at least) the last packet isn't freed.)

Will try to come up with a proper patch later.

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox




[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux