tree: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master head: 504582e8e40b90b8f8c58783e2d1e4f6a2b71a3a commit: a92a00f809503c6db9dac518951e060ab3d6f6ee [65/78] crypto: hisilicon - misc fix about sgl config: riscv-allyesconfig (attached as .config) compiler: riscv64-linux-gcc (GCC) 7.4.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross git checkout a92a00f809503c6db9dac518951e060ab3d6f6ee # save the attached .config to linux build tree GCC_VERSION=7.4.0 make.cross ARCH=riscv If you fix the issue, kindly add following tag Reported-by: kbuild test robot <lkp@xxxxxxxxx> All warnings (new ones prefixed by >>): In file included from include/linux/byteorder/little_endian.h:5:0, from arch/riscv/include/uapi/asm/byteorder.h:10, from include/asm-generic/bitops/le.h:6, from arch/riscv/include/asm/bitops.h:202, from include/linux/bitops.h:19, from include/linux/kernel.h:12, from include/linux/list.h:9, from include/linux/kobject.h:19, from include/linux/device.h:16, from include/linux/dma-mapping.h:7, from drivers/crypto//hisilicon/sgl.c:3: drivers/crypto//hisilicon/sgl.c: In function 'sg_map_to_hw_sg': drivers/crypto//hisilicon/sgl.c:168:33: error: 'struct scatterlist' has no member named 'dma_length'; did you mean 'length'? hw_sge->len = cpu_to_le32(sgl->dma_length); ^ include/uapi/linux/byteorder/little_endian.h:33:51: note: in definition of macro '__cpu_to_le32' #define __cpu_to_le32(x) ((__force __le32)(__u32)(x)) ^ >> drivers/crypto//hisilicon/sgl.c:168:16: note: in expansion of macro 'cpu_to_le32' hw_sge->len = cpu_to_le32(sgl->dma_length); ^~~~~~~~~~~ vim +/cpu_to_le32 +168 drivers/crypto//hisilicon/sgl.c > 3 #include <linux/dma-mapping.h> 4 #include <linux/module.h> 5 #include <linux/slab.h> 6 #include "qm.h" 7 8 #define HISI_ACC_SGL_SGE_NR_MIN 1 9 #define HISI_ACC_SGL_NR_MAX 256 10 #define HISI_ACC_SGL_ALIGN_SIZE 64 11 #define HISI_ACC_MEM_BLOCK_NR 5 12 13 struct acc_hw_sge { 14 dma_addr_t buf; 15 void *page_ctrl; 16 __le32 len; 17 __le32 pad; 18 __le32 pad0; 19 __le32 pad1; 20 }; 21 22 /* use default sgl head size 64B */ 23 struct hisi_acc_hw_sgl { 24 dma_addr_t next_dma; 25 __le16 entry_sum_in_chain; 26 __le16 entry_sum_in_sgl; 27 __le16 entry_length_in_sgl; 28 __le16 pad0; 29 __le64 pad1[5]; 30 struct hisi_acc_hw_sgl *next; 31 struct acc_hw_sge sge_entries[]; 32 } __aligned(1); 33 34 struct hisi_acc_sgl_pool { 35 struct mem_block { 36 struct hisi_acc_hw_sgl *sgl; 37 dma_addr_t sgl_dma; 38 size_t size; 39 } mem_block[HISI_ACC_MEM_BLOCK_NR]; 40 u32 sgl_num_per_block; 41 u32 block_num; 42 u32 count; 43 u32 sge_nr; 44 size_t sgl_size; 45 }; 46 47 /** 48 * hisi_acc_create_sgl_pool() - Create a hw sgl pool. 49 * @dev: The device which hw sgl pool belongs to. 50 * @count: Count of hisi_acc_hw_sgl in pool. 51 * @sge_nr: The count of sge in hw_sgl 52 * 53 * This function creates a hw sgl pool, after this user can get hw sgl memory 54 * from it. 55 */ 56 struct hisi_acc_sgl_pool *hisi_acc_create_sgl_pool(struct device *dev, 57 u32 count, u32 sge_nr) 58 { 59 u32 sgl_size, block_size, sgl_num_per_block, block_num, remain_sgl = 0; 60 struct hisi_acc_sgl_pool *pool; 61 struct mem_block *block; 62 u32 i, j; 63 64 if (!dev || !count || !sge_nr || sge_nr > HISI_ACC_SGL_SGE_NR_MAX) 65 return ERR_PTR(-EINVAL); 66 67 sgl_size = sizeof(struct acc_hw_sge) * sge_nr + 68 sizeof(struct hisi_acc_hw_sgl); 69 block_size = PAGE_SIZE * (1 << (MAX_ORDER - 1)); 70 sgl_num_per_block = block_size / sgl_size; 71 block_num = count / sgl_num_per_block; 72 remain_sgl = count % sgl_num_per_block; 73 74 if ((!remain_sgl && block_num > HISI_ACC_MEM_BLOCK_NR) || 75 (remain_sgl > 0 && block_num > HISI_ACC_MEM_BLOCK_NR - 1)) 76 return ERR_PTR(-EINVAL); 77 78 pool = kzalloc(sizeof(*pool), GFP_KERNEL); 79 if (!pool) 80 return ERR_PTR(-ENOMEM); 81 block = pool->mem_block; 82 83 for (i = 0; i < block_num; i++) { 84 block[i].sgl = dma_alloc_coherent(dev, block_size, 85 &block[i].sgl_dma, 86 GFP_KERNEL); 87 if (!block[i].sgl) 88 goto err_free_mem; 89 90 block[i].size = block_size; 91 } 92 93 if (remain_sgl > 0) { 94 block[i].sgl = dma_alloc_coherent(dev, remain_sgl * sgl_size, 95 &block[i].sgl_dma, 96 GFP_KERNEL); 97 if (!block[i].sgl) 98 goto err_free_mem; 99 100 block[i].size = remain_sgl * sgl_size; 101 } 102 103 pool->sgl_num_per_block = sgl_num_per_block; 104 pool->block_num = remain_sgl ? block_num + 1 : block_num; 105 pool->count = count; 106 pool->sgl_size = sgl_size; 107 pool->sge_nr = sge_nr; 108 109 return pool; 110 111 err_free_mem: 112 for (j = 0; j < i; j++) { 113 dma_free_coherent(dev, block_size, block[j].sgl, 114 block[j].sgl_dma); 115 memset(block + j, 0, sizeof(*block)); 116 } 117 kfree(pool); 118 return ERR_PTR(-ENOMEM); 119 } 120 EXPORT_SYMBOL_GPL(hisi_acc_create_sgl_pool); 121 122 /** 123 * hisi_acc_free_sgl_pool() - Free a hw sgl pool. 124 * @dev: The device which hw sgl pool belongs to. 125 * @pool: Pointer of pool. 126 * 127 * This function frees memory of a hw sgl pool. 128 */ 129 void hisi_acc_free_sgl_pool(struct device *dev, struct hisi_acc_sgl_pool *pool) 130 { 131 struct mem_block *block; 132 int i; 133 134 if (!dev || !pool) 135 return; 136 137 block = pool->mem_block; 138 139 for (i = 0; i < pool->block_num; i++) 140 dma_free_coherent(dev, block[i].size, block[i].sgl, 141 block[i].sgl_dma); 142 143 kfree(pool); 144 } 145 EXPORT_SYMBOL_GPL(hisi_acc_free_sgl_pool); 146 147 static struct hisi_acc_hw_sgl *acc_get_sgl(struct hisi_acc_sgl_pool *pool, 148 u32 index, dma_addr_t *hw_sgl_dma) 149 { 150 struct mem_block *block; 151 u32 block_index, offset; 152 153 if (!pool || !hw_sgl_dma || index >= pool->count) 154 return ERR_PTR(-EINVAL); 155 156 block = pool->mem_block; 157 block_index = index / pool->sgl_num_per_block; 158 offset = index % pool->sgl_num_per_block; 159 160 *hw_sgl_dma = block[block_index].sgl_dma + pool->sgl_size * offset; 161 return (void *)block[block_index].sgl + pool->sgl_size * offset; 162 } 163 164 static void sg_map_to_hw_sg(struct scatterlist *sgl, 165 struct acc_hw_sge *hw_sge) 166 { 167 hw_sge->buf = sgl->dma_address; > 168 hw_sge->len = cpu_to_le32(sgl->dma_length); 169 } 170 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip