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 <l...@intel.com>
> 
> 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
> 

Reply via email to