lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 27 Dec 2017 01:21:56 +0000
From:   Andy Duan <fugang.duan@....com>
To:     Andy Duan <fugang.duan@....com>,
        "davem@...emloft.net" <davem@...emloft.net>
CC:     "netdev@...r.kernel.org" <netdev@...r.kernel.org>
Subject: RE: [PATCH net,stable 1/1] net: fec: unmap the xmit buffer that are
 not transferred by DMA

From: Fugang Duan <fugang.duan@....com> Sent: Friday, December 22, 2017 5:12 PM
>The enet IP only support 32 bit, it will use swiotlb buffer to do dma mapping
>when xmit buffer DMA memory address is bigger than 4G in i.MX platform.
>After stress suspend/resume test, it will print out:
>
>log:
>[12826.352864] fec 5b040000.ethernet: swiotlb buffer is full (sz: 191 bytes)
>[12826.359676] DMA: Out of SW-IOMMU space for 191 bytes at device
>5b040000.ethernet [12826.367110] fec 5b040000.ethernet eth0: Tx DMA
>memory map failed
>
>The issue is that the ready xmit buffers that are dma mapped but DMA still
>don't copy them into fifo, once MAC restart, these DMA buffers are not
>unmapped.
>So it should check the dma mapping buffer and unmap them.
>
>Signed-off-by: Fugang Duan <fugang.duan@....com>
>---
Hi David,

The patch pass two days long time suspend/resume test. Pls apply it to net tree and stable tree.

Thanks.

> drivers/net/ethernet/freescale/fec_main.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
>diff --git a/drivers/net/ethernet/freescale/fec_main.c
>b/drivers/net/ethernet/freescale/fec_main.c
>index 2d1b065..e17d10b 100644
>--- a/drivers/net/ethernet/freescale/fec_main.c
>+++ b/drivers/net/ethernet/freescale/fec_main.c
>@@ -818,6 +818,12 @@ static void fec_enet_bd_init(struct net_device *dev)
> 		for (i = 0; i < txq->bd.ring_size; i++) {
> 			/* Initialize the BD for every fragment in the page. */
> 			bdp->cbd_sc = cpu_to_fec16(0);
>+			if (bdp->cbd_bufaddr &&
>+			    !IS_TSO_HEADER(txq, fec32_to_cpu(bdp-
>>cbd_bufaddr)))
>+				dma_unmap_single(&fep->pdev->dev,
>+						 fec32_to_cpu(bdp-
>>cbd_bufaddr),
>+						 fec16_to_cpu(bdp-
>>cbd_datlen),
>+						 DMA_TO_DEVICE);
> 			if (txq->tx_skbuff[i]) {
> 				dev_kfree_skb_any(txq->tx_skbuff[i]);
> 				txq->tx_skbuff[i] = NULL;
>--
>1.9.1

Powered by blists - more mailing lists