From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yelena Krivosheev Subject: RE: [EXT] [PATCH net] net: mvneta: fix the Rx desc buffer DMA unmapping Date: Thu, 20 Sep 2018 10:14:56 +0000 Message-ID: <5ab58500e78549618b597fdc2e54356a@IL-EXCH01.marvell.com> References: <20180919132906.26868-1-antoine.tenart@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Cc: "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "thomas.petazzoni@bootlin.com" , "maxime.chevallier@bootlin.com" , "gregory.clement@bootlin.com" , "miquel.raynal@bootlin.com" , Nadav Haklai , Stefan Chulski , Yan Markman , "mw@semihalf.com" To: Antoine Tenart , "davem@davemloft.net" Return-path: In-Reply-To: <20180919132906.26868-1-antoine.tenart@bootlin.com> Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org Hi Antoine. Good point. Please, check and fix all cases of dma_unmap_single() usage. See mvneta_rxq_drop_pkts() ... if (!data || !(rx_desc->buf_phys_addr)) continue; dma_unmap_single(pp->dev->dev.parent, rx_desc->buf_phys_addr, MVNETA_RX_BUF_SIZE(pp->pkt_size), DMA_FROM_DEVICE); __free_page(data); ... Thanks. Yelena -----Original Message----- From: Antoine Tenart [mailto:antoine.tenart@bootlin.com]=20 Sent: Wednesday, September 19, 2018 4:29 PM To: davem@davemloft.net; Yelena Krivosheev Cc: Antoine Tenart ; netdev@vger.kernel.org; li= nux-kernel@vger.kernel.org; thomas.petazzoni@bootlin.com; maxime.chevallier= @bootlin.com; gregory.clement@bootlin.com; miquel.raynal@bootlin.com; Nadav= Haklai ; Stefan Chulski ; Yan Mar= kman ; mw@semihalf.com Subject: [EXT] [PATCH net] net: mvneta: fix the Rx desc buffer DMA unmappin= g External Email ---------------------------------------------------------------------- With CONFIG_DMA_API_DEBUG enabled we now get a warning when using the mvnet= a driver: mvneta d0030000.ethernet: DMA-API: device driver frees DMA memory with wrong function [device address=3D0x000000001165b000] [size=3D4096 bytes] [mapped as page] [unmapped as single] This is because when using the s/w buffer management, the Rx descriptor buf= fer is mapped with dma_map_page but unmapped with dma_unmap_single. This patch fixes this by using the right unmapping function. Fixes: 562e2f467e71 ("net: mvneta: Improve the buffer allocation method for= SWBM") Signed-off-by: Antoine Tenart --- drivers/net/ethernet/marvell/mvneta.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/m= arvell/mvneta.c index bc80a678abc3..2db9708f2e24 100644 --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c @@ -2008,8 +2008,8 @@ static int mvneta_rx_swbm(struct napi_struct *napi, skb_add_rx_frag(rxq->skb, frag_num, page, frag_offset, frag_size, PAGE_SIZE); - dma_unmap_single(dev->dev.parent, phys_addr, - PAGE_SIZE, DMA_FROM_DEVICE); + dma_unmap_page(dev->dev.parent, phys_addr, + PAGE_SIZE, DMA_FROM_DEVICE); rxq->left_size -=3D frag_size; } } else { -- 2.17.1