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

Reply via email to