Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fpga: zynq_fpga: Fix the wrong usage of dma_map_sgtable()

dma_map_sgtable() returns only 0 or the error code. Read sgt->nents to
get the number of mapped segments.

Fixes: 37e00703228a ("zynq_fpga: use sgtable-based scatterlist wrappers")
Reported-by: Pavel Pisa <pisa@fel.cvut.cz>
Closes: https://lore.kernel.org/linux-fpga/202508041548.22955.pisa@fel.cvut.cz/
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Xu Yilun <yilun.xu@linux.intel.com>
Tested-by: Pavel Pisa <pisa@fel.cvut.cz>
Link: https://lore.kernel.org/r/20250806070605.1920909-2-yilun.xu@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Xu Yilun and committed by
Greg Kroah-Hartman
1ca61060 c17b750b

+4 -4
+4 -4
drivers/fpga/zynq-fpga.c
··· 405 405 } 406 406 } 407 407 408 - priv->dma_nelms = 409 - dma_map_sgtable(mgr->dev.parent, sgt, DMA_TO_DEVICE, 0); 410 - if (priv->dma_nelms == 0) { 408 + err = dma_map_sgtable(mgr->dev.parent, sgt, DMA_TO_DEVICE, 0); 409 + if (err) { 411 410 dev_err(&mgr->dev, "Unable to DMA map (TO_DEVICE)\n"); 412 - return -ENOMEM; 411 + return err; 413 412 } 413 + priv->dma_nelms = sgt->nents; 414 414 415 415 /* enable clock */ 416 416 err = clk_enable(priv->clk);