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