From cd0b7aa6f53fbabea7242206a86e0dc5a9bb3597 Mon Sep 17 00:00:00 2001 From: zhangwei Date: Fri, 9 Aug 2019 21:58:14 +0800 Subject: [PATCH] ACC: make sec2's fusion_num can bigger than 64 driver inclusion category: bugfix bugzilla: NA CVE: NA Feature or Bugfix:Bugfix Signed-off-by: Zhangwei Reviewed-by: lingmingqiang Signed-off-by: lingmingqiang Reviewed-by: Yang Yingliang Signed-off-by: Yang Yingliang --- drivers/crypto/hisilicon/sgl.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/crypto/hisilicon/sgl.c b/drivers/crypto/hisilicon/sgl.c index f6f14c107ede..399ada3ef258 100644 --- a/drivers/crypto/hisilicon/sgl.c +++ b/drivers/crypto/hisilicon/sgl.c @@ -208,11 +208,22 @@ EXPORT_SYMBOL_GPL(acc_sg_buf_unmap); struct acc_hw_sgl *acc_alloc_multi_sgl(struct device *dev, dma_addr_t *hw_sgl_dma, int sgl_num) { + struct acc_hw_sgl *hw_sgl; + int i; + if (!dev || !hw_sgl_dma || !sgl_num) return NULL; - return dma_alloc_coherent(dev, sgl_num * sizeof(struct acc_hw_sgl), + hw_sgl = dma_alloc_coherent(dev, sgl_num * sizeof(struct acc_hw_sgl), hw_sgl_dma, GFP_KERNEL | __GFP_ZERO); + + for (i = 1; i < sgl_num; i++) { + hw_sgl[i-1].next = &hw_sgl[i]; + hw_sgl[i-1].next_dma = (*hw_sgl_dma) + + i * sizeof(struct acc_hw_sgl); + } + + return hw_sgl; } EXPORT_SYMBOL_GPL(acc_alloc_multi_sgl); @@ -279,7 +290,7 @@ int acc_sg_buf_map_v2(struct device *dev, struct scatterlist *sgl, } update_hw_sgl_sum_sge(hw_sgl, - (sge_num + ACC_SGL_SGE_NR - 1) & (~(ACC_SGL_SGE_NR - 1))); + ((u16)sge_num + ACC_SGL_SGE_NR - 1) & (~(ACC_SGL_SGE_NR - 1))); return 0; } -- GitLab