[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20250627201615.GH1776@horms.kernel.org>
Date: Fri, 27 Jun 2025 21:16:15 +0100
From: Simon Horman <horms@...nel.org>
To: Thomas Fourier <fourier.thomas@...il.com>
Cc: Andrew Lunn <andrew+netdev@...n.ch>,
"David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>,
Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...nel.org>,
Jonathan Currier <dullfire@...oo.com>,
"Matthew Wilcox (Oracle)" <willy@...radead.org>,
Uwe Kleine-König <u.kleine-koenig@...libre.com>,
Shuah Khan <shuah@...nel.org>, netdev@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH net] nui: Fix dma_mapping_error() check
On Fri, Jun 27, 2025 at 04:48:19PM +0200, Thomas Fourier wrote:
> dma_map_XXX() functions return as error values DMA_MAPPING_ERROR which
> is often ~0. The error value should be tested with dma_mapping_error().
>
> Fixes: ec2deec1f352 ("niu: Fix to check for dma mapping errors.")
> Signed-off-by: Thomas Fourier <fourier.thomas@...il.com>
> ---
> drivers/net/ethernet/sun/niu.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
> index ddca8fc7883e..11ff08373de4 100644
> --- a/drivers/net/ethernet/sun/niu.c
> +++ b/drivers/net/ethernet/sun/niu.c
> @@ -3336,7 +3336,7 @@ static int niu_rbr_add_page(struct niu *np, struct rx_ring_info *rp,
>
> addr = np->ops->map_page(np->device, page, 0,
> PAGE_SIZE, DMA_FROM_DEVICE);
> - if (!addr) {
> + if (dma_mapping_error(np->device, addr)) {
> __free_page(page);
> return -ENOMEM;
> }
Hi Thomas,
Looking over niu.c I see two implementations of the .map_page callback.
1. niu_pci_map_page is a trivial wrapper around dma_map_page.
And in that case your change looks good.
2. niu_phys_map_page, which looks like this:
static u64 niu_phys_map_page(struct device *dev, struct page *page,
unsigned long offset, size_t size,
enum dma_data_direction direction)
{
return page_to_phys(page) + offset;
}
In this case dma_mapping_error may well correctly detect (no) errors.
But it will call debug_dma_mapping_error(), which doesn't seem ideal.
Powered by blists - more mailing lists