Hi Qing,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on net-next/master]
[also build test ERROR on v4.17-rc5 next-20180517]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Qing-Huang/mlx4_core-allocate-ICM-memory-in-page-size-chunks/20180512-090438
config: sparc64-allyesconfig (attached as .config)
compiler: sparc64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=sparc64 

All error/warnings (new ones prefixed by >>):

   drivers/net//ethernet/mellanox/mlx4/icm.c: In function 'mlx4_init_icm_table':
>> drivers/net//ethernet/mellanox/mlx4/icm.c:403:20: error: implicit 
>> declaration of function 'vzalloc'; did you mean 'kzalloc'? 
>> [-Werror=implicit-function-declaration]
     table->icm      = vzalloc(num_icm * sizeof(*table->icm));
                       ^~~~~~~
                       kzalloc
>> drivers/net//ethernet/mellanox/mlx4/icm.c:403:18: warning: assignment makes 
>> pointer from integer without a cast [-Wint-conversion]
     table->icm      = vzalloc(num_icm * sizeof(*table->icm));
                     ^
>> drivers/net//ethernet/mellanox/mlx4/icm.c:449:2: error: implicit declaration 
>> of function 'vfree'; did you mean 'kfree'? 
>> [-Werror=implicit-function-declaration]
     vfree(table->icm);
     ^~~~~
     kfree
   cc1: some warnings being treated as errors

vim +403 drivers/net//ethernet/mellanox/mlx4/icm.c

   389  
   390  int mlx4_init_icm_table(struct mlx4_dev *dev, struct mlx4_icm_table 
*table,
   391                          u64 virt, int obj_size, u32 nobj, int reserved,
   392                          int use_lowmem, int use_coherent)
   393  {
   394          int obj_per_chunk;
   395          int num_icm;
   396          unsigned chunk_size;
   397          int i;
   398          u64 size;
   399  
   400          obj_per_chunk = MLX4_TABLE_CHUNK_SIZE / obj_size;
   401          num_icm = (nobj + obj_per_chunk - 1) / obj_per_chunk;
   402  
 > 403          table->icm      = vzalloc(num_icm * sizeof(*table->icm));
   404          if (!table->icm)
   405                  return -ENOMEM;
   406          table->virt     = virt;
   407          table->num_icm  = num_icm;
   408          table->num_obj  = nobj;
   409          table->obj_size = obj_size;
   410          table->lowmem   = use_lowmem;
   411          table->coherent = use_coherent;
   412          mutex_init(&table->mutex);
   413  
   414          size = (u64) nobj * obj_size;
   415          for (i = 0; i * MLX4_TABLE_CHUNK_SIZE < reserved * obj_size; 
++i) {
   416                  chunk_size = MLX4_TABLE_CHUNK_SIZE;
   417                  if ((i + 1) * MLX4_TABLE_CHUNK_SIZE > size)
   418                          chunk_size = PAGE_ALIGN(size -
   419                                          i * MLX4_TABLE_CHUNK_SIZE);
   420  
   421                  table->icm[i] = mlx4_alloc_icm(dev, chunk_size >> 
PAGE_SHIFT,
   422                                                 (use_lowmem ? GFP_KERNEL 
: GFP_HIGHUSER) |
   423                                                 __GFP_NOWARN, 
use_coherent);
   424                  if (!table->icm[i])
   425                          goto err;
   426                  if (mlx4_MAP_ICM(dev, table->icm[i], virt + i * 
MLX4_TABLE_CHUNK_SIZE)) {
   427                          mlx4_free_icm(dev, table->icm[i], use_coherent);
   428                          table->icm[i] = NULL;
   429                          goto err;
   430                  }
   431  
   432                  /*
   433                   * Add a reference to this ICM chunk so that it never
   434                   * gets freed (since it contains reserved firmware 
objects).
   435                   */
   436                  ++table->icm[i]->refcount;
   437          }
   438  
   439          return 0;
   440  
   441  err:
   442          for (i = 0; i < num_icm; ++i)
   443                  if (table->icm[i]) {
   444                          mlx4_UNMAP_ICM(dev, virt + i * 
MLX4_TABLE_CHUNK_SIZE,
   445                                         MLX4_TABLE_CHUNK_SIZE / 
MLX4_ICM_PAGE_SIZE);
   446                          mlx4_free_icm(dev, table->icm[i], use_coherent);
   447                  }
   448  
 > 449          vfree(table->icm);
   450  
   451          return -ENOMEM;
   452  }
   453  

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