Hi Marek, I love your patch! Perhaps something to improve: [auto build test WARNING on next-20200618] [also build test WARNING on v5.8-rc1] [cannot apply to linuxtv-media/master staging/staging-testing drm-exynos/exynos-drm-next drm-intel/for-linux-next linus/master v5.8-rc1 v5.7 v5.7-rc7] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Marek-Szyprowski/DRM-fix-struct-sg_table-nents-vs-orig_nents-misuse/20200619-000417 base: ce2cc8efd7a40cbd17841add878cb691d0ce0bba config: alpha-allyesconfig (attached as .config) compiler: alpha-linux-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): 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 COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=alpha If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All warnings (new ones prefixed by >>, old ones prefixed by <<): In file included from include/linux/dma-mapping.h:11, from drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:25: drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c: In function 'amdgpu_vram_mgr_alloc_sgt': include/linux/scatterlist.h:158:17: error: '*sgt' is a pointer; did you mean to use '->'? 158 | for_each_sg(sgt->sgl, sg, sgt->orig_nents, i) | ^~ include/linux/scatterlist.h:152:22: note: in definition of macro 'for_each_sg' 152 | for (__i = 0, sg = (sglist); __i < (nr); __i++, sg = sg_next(sg)) | ^~~~~~ >> drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:480:2: note: in expansion of macro 'for_each_sgtable_sg' 480 | for_each_sgtable_sg(*sgt, sg, i) | ^~~~~~~~~~~~~~~~~~~ include/linux/scatterlist.h:158:31: error: '*sgt' is a pointer; did you mean to use '->'? 158 | for_each_sg(sgt->sgl, sg, sgt->orig_nents, i) | ^~ include/linux/scatterlist.h:152:38: note: in definition of macro 'for_each_sg' 152 | for (__i = 0, sg = (sglist); __i < (nr); __i++, sg = sg_next(sg)) | ^~ >> drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:480:2: note: in expansion of macro 'for_each_sgtable_sg' 480 | for_each_sgtable_sg(*sgt, sg, i) | ^~~~~~~~~~~~~~~~~~~ include/linux/scatterlist.h:158:17: error: '*sgt' is a pointer; did you mean to use '->'? 158 | for_each_sg(sgt->sgl, sg, sgt->orig_nents, i) | ^~ include/linux/scatterlist.h:152:22: note: in definition of macro 'for_each_sg' 152 | for (__i = 0, sg = (sglist); __i < (nr); __i++, sg = sg_next(sg)) | ^~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:484:2: note: in expansion of macro 'for_each_sgtable_sg' 484 | for_each_sgtable_sg(*sgt, sg, i) { | ^~~~~~~~~~~~~~~~~~~ include/linux/scatterlist.h:158:31: error: '*sgt' is a pointer; did you mean to use '->'? 158 | for_each_sg(sgt->sgl, sg, sgt->orig_nents, i) | ^~ include/linux/scatterlist.h:152:38: note: in definition of macro 'for_each_sg' 152 | for (__i = 0, sg = (sglist); __i < (nr); __i++, sg = sg_next(sg)) | ^~ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:484:2: note: in expansion of macro 'for_each_sgtable_sg' 484 | for_each_sgtable_sg(*sgt, sg, i) { | ^~~~~~~~~~~~~~~~~~~ include/linux/scatterlist.h:158:17: error: '*sgt' is a pointer; did you mean to use '->'? 158 | for_each_sg(sgt->sgl, sg, sgt->orig_nents, i) | ^~ include/linux/scatterlist.h:152:22: note: in definition of macro 'for_each_sg' 152 | for (__i = 0, sg = (sglist); __i < (nr); __i++, sg = sg_next(sg)) | ^~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:504:2: note: in expansion of macro 'for_each_sgtable_sg' 504 | for_each_sgtable_sg(*sgt, sg, i) { | ^~~~~~~~~~~~~~~~~~~ include/linux/scatterlist.h:158:31: error: '*sgt' is a pointer; did you mean to use '->'? 158 | for_each_sg(sgt->sgl, sg, sgt->orig_nents, i) | ^~ include/linux/scatterlist.h:152:38: note: in definition of macro 'for_each_sg' 152 | for (__i = 0, sg = (sglist); __i < (nr); __i++, sg = sg_next(sg)) | ^~ drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:504:2: note: in expansion of macro 'for_each_sgtable_sg' 504 | for_each_sgtable_sg(*sgt, sg, i) { | ^~~~~~~~~~~~~~~~~~~ In file included from drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:26: At top level: drivers/gpu/drm/amd/amdgpu/amdgpu.h:190:18: warning: 'sched_policy' defined but not used [-Wunused-const-variable=] 190 | static const int sched_policy = KFD_SCHED_POLICY_HWS; | ^~~~~~~~~~~~ In file included from drivers/gpu/drm/amd/amdgpu/../display/dc/dc_types.h:33, from drivers/gpu/drm/amd/amdgpu/../display/dc/dm_services_types.h:30, from drivers/gpu/drm/amd/amdgpu/../include/dm_pp_interface.h:26, from drivers/gpu/drm/amd/amdgpu/amdgpu.h:65, from drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:26: drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:76:32: warning: 'dc_fixpt_ln2_div_2' defined but not used [-Wunused-const-variable=] 76 | static const struct fixed31_32 dc_fixpt_ln2_div_2 = { 1488522236LL }; | ^~~~~~~~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:75:32: warning: 'dc_fixpt_ln2' defined but not used [-Wunused-const-variable=] 75 | static const struct fixed31_32 dc_fixpt_ln2 = { 2977044471LL }; | ^~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:74:32: warning: 'dc_fixpt_e' defined but not used [-Wunused-const-variable=] 74 | static const struct fixed31_32 dc_fixpt_e = { 11674931555LL }; | ^~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:73:32: warning: 'dc_fixpt_two_pi' defined but not used [-Wunused-const-variable=] 73 | static const struct fixed31_32 dc_fixpt_two_pi = { 26986075409LL }; | ^~~~~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:72:32: warning: 'dc_fixpt_pi' defined but not used [-Wunused-const-variable=] 72 | static const struct fixed31_32 dc_fixpt_pi = { 13493037705LL }; | ^~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/../display/include/fixed31_32.h:67:32: warning: 'dc_fixpt_zero' defined but not used [-Wunused-const-variable=] 67 | static const struct fixed31_32 dc_fixpt_zero = { 0 }; | ^~~~~~~~~~~~~ vim +/for_each_sgtable_sg +480 drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c 444 445 /** 446 * amdgpu_vram_mgr_alloc_sgt - allocate and fill a sg table 447 * 448 * @adev: amdgpu device pointer 449 * @mem: TTM memory object 450 * @dev: the other device 451 * @dir: dma direction 452 * @sgt: resulting sg table 453 * 454 * Allocate and fill a sg table from a VRAM allocation. 455 */ 456 int amdgpu_vram_mgr_alloc_sgt(struct amdgpu_device *adev, 457 struct ttm_mem_reg *mem, 458 struct device *dev, 459 enum dma_data_direction dir, 460 struct sg_table **sgt) 461 { 462 struct drm_mm_node *node; 463 struct scatterlist *sg; 464 int num_entries = 0; 465 unsigned int pages; 466 int i, r; 467 468 *sgt = kmalloc(sizeof(*sg), GFP_KERNEL); 469 if (!*sgt) 470 return -ENOMEM; 471 472 for (pages = mem->num_pages, node = mem->mm_node; 473 pages; pages -= node->size, ++node) 474 ++num_entries; 475 476 r = sg_alloc_table(*sgt, num_entries, GFP_KERNEL); 477 if (r) 478 goto error_free; 479 > 480 for_each_sgtable_sg(*sgt, sg, i) 481 sg->length = 0; 482 483 node = mem->mm_node; 484 for_each_sgtable_sg(*sgt, sg, i) { 485 phys_addr_t phys = (node->start << PAGE_SHIFT) + 486 adev->gmc.aper_base; 487 size_t size = node->size << PAGE_SHIFT; 488 dma_addr_t addr; 489 490 ++node; 491 addr = dma_map_resource(dev, phys, size, dir, 492 DMA_ATTR_SKIP_CPU_SYNC); 493 r = dma_mapping_error(dev, addr); 494 if (r) 495 goto error_unmap; 496 497 sg_set_page(sg, NULL, size, 0); 498 sg_dma_address(sg) = addr; 499 sg_dma_len(sg) = size; 500 } 501 return 0; 502 503 error_unmap: 504 for_each_sgtable_sg(*sgt, sg, i) { 505 if (!sg->length) 506 continue; 507 508 dma_unmap_resource(dev, sg->dma_address, 509 sg->length, dir, 510 DMA_ATTR_SKIP_CPU_SYNC); 511 } 512 sg_free_table(*sgt); 513 514 error_free: 515 kfree(*sgt); 516 return r; 517 } 518 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org