From f8ff267c2ee2df796a08c7117ee8a7651dbe5445 Mon Sep 17 00:00:00 2001 From: Michael Gill Date: Tue, 15 May 2018 13:13:56 -0700 Subject: [PATCH] staging: apf: Correct sg list length assignment in apf dma When using DMABUFs in the apf dma driver, there were specific lengths that resulted in the transfer length being incorrectly assigned. This patch corrects that by assigning lengths correctly when the sg descriptor length is smaller than the transfer size. Signed-off-by: Michael Gill Signed-off-by: Michal Simek --- drivers/staging/apf/xilinx-dma-apf.c | 4 +++- drivers/staging/apf/xlnk.h | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/staging/apf/xilinx-dma-apf.c b/drivers/staging/apf/xilinx-dma-apf.c index 7bcce2d66e11..55913130eafc 100644 --- a/drivers/staging/apf/xilinx-dma-apf.c +++ b/drivers/staging/apf/xilinx-dma-apf.c @@ -818,8 +818,9 @@ int xdma_submit(struct xdma_chan *chan, sglist = kmalloc_array(dp->dbuf_sg_table->nents, sizeof(*sglist), GFP_KERNEL); - if (!dp->sg_list) + if (!sglist) return -ENOMEM; + sg_init_table(sglist, dp->dbuf_sg_table->nents); sgcnt = 0; for_each_sg(dp->dbuf_sg_table->sgl, @@ -837,6 +838,7 @@ int xdma_submit(struct xdma_chan *chan, sg_dma_len(sglist + i) = remaining_size; sgcnt++; } else { + sg_dma_len(sglist + i) = sg_dma_len(sg); remaining_size -= sg_dma_len(sg); sgcnt++; } diff --git a/drivers/staging/apf/xlnk.h b/drivers/staging/apf/xlnk.h index 6f7e77fe3dc0..eb94ef2b1da3 100644 --- a/drivers/staging/apf/xlnk.h +++ b/drivers/staging/apf/xlnk.h @@ -45,8 +45,6 @@ struct xlnk_dmabuf_reg { struct dma_buf *dbuf; struct dma_buf_attachment *dbuf_attach; struct sg_table *dbuf_sg_table; - struct scatterlist *sg_list; - int sg_list_cnt; int is_mapped; int dma_direction; struct list_head list; -- 2.39.2