Re: [cryptodev:master 65/78] drivers/crypto//hisilicon/sgl.c:168:16: note: in expansion of macro 'cpu_to_le32'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2019/10/10 22:25, kbuild test robot wrote:
> 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);

need select NEED_SG_DMA_LENGTH, will fix this.

>                                     ^
>    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
> 




[Index of Archives]     [Kernel]     [Gnu Classpath]     [Gnu Crypto]     [DM Crypt]     [Netfilter]     [Bugtraq]

  Powered by Linux