Hi "Matthew, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on linus/master] [also build test WARNING on next-20210629] [cannot apply to hnaz-linux-mm/master tip/perf/core cgroup/for-next v5.13] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Matthew-Wilcox-Oracle/Folio-conversion-of-memcg/20210630-121408 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 007b350a58754a93ca9fe50c498cc27780171153 config: sparc64-randconfig-r002-20210628 (attached as .config) compiler: sparc64-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 # https://github.com/0day-ci/linux/commit/014d3a00c94acec84ed571a521e10b9fe77a95cc git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Matthew-Wilcox-Oracle/Folio-conversion-of-memcg/20210630-121408 git checkout 014d3a00c94acec84ed571a521e10b9fe77a95cc # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=sparc64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@xxxxxxxxx> All warnings (new ones prefixed by >>): include/linux/mm.h:1382:42: warning: 'struct folio' declared inside parameter list will not be visible outside of this definition or declaration 1382 | static inline int folio_nid(const struct folio *folio) | ^~~~~ include/linux/mm.h: In function 'folio_nid': include/linux/mm.h:1384:27: error: dereferencing pointer to incomplete type 'const struct folio' 1384 | return page_to_nid(&folio->page); | ^~ In file included from include/linux/rmap.h:12, from mm/huge_memory.c:16: include/linux/memcontrol.h: At top level: include/linux/memcontrol.h:375:44: warning: 'struct folio' declared inside parameter list will not be visible outside of this definition or declaration 375 | static inline bool folio_memcg_kmem(struct folio *folio); | ^~~~~ include/linux/memcontrol.h:399:55: warning: 'struct folio' declared inside parameter list will not be visible outside of this definition or declaration 399 | static inline struct mem_cgroup *__folio_memcg(struct folio *folio) | ^~~~~ include/linux/memcontrol.h: In function '__folio_memcg': include/linux/memcontrol.h:401:34: error: dereferencing pointer to incomplete type 'struct folio' 401 | unsigned long memcg_data = folio->memcg_data; | ^~ include/linux/memcontrol.h:403:2: error: implicit declaration of function 'VM_BUG_ON_FOLIO'; did you mean 'VM_BUG_ON_MM'? [-Werror=implicit-function-declaration] 403 | VM_BUG_ON_FOLIO(folio_slab(folio), folio); | ^~~~~~~~~~~~~~~ | VM_BUG_ON_MM include/linux/memcontrol.h:403:18: error: implicit declaration of function 'folio_slab' [-Werror=implicit-function-declaration] 403 | VM_BUG_ON_FOLIO(folio_slab(folio), folio); | ^~~~~~~~~~ include/linux/memcontrol.h: At top level: include/linux/memcontrol.h:420:55: warning: 'struct folio' declared inside parameter list will not be visible outside of this definition or declaration 420 | static inline struct obj_cgroup *__folio_objcg(struct folio *folio) | ^~~~~ include/linux/memcontrol.h: In function '__folio_objcg': include/linux/memcontrol.h:422:34: error: dereferencing pointer to incomplete type 'struct folio' 422 | unsigned long memcg_data = folio->memcg_data; | ^~ include/linux/memcontrol.h: At top level: include/linux/memcontrol.h:451:53: warning: 'struct folio' declared inside parameter list will not be visible outside of this definition or declaration 451 | static inline struct mem_cgroup *folio_memcg(struct folio *folio) | ^~~~~ include/linux/memcontrol.h: In function 'folio_memcg': include/linux/memcontrol.h:453:23: error: passing argument 1 of 'folio_memcg_kmem' from incompatible pointer type [-Werror=incompatible-pointer-types] 453 | if (folio_memcg_kmem(folio)) | ^~~~~ | | | struct folio * include/linux/memcontrol.h:375:51: note: expected 'struct folio *' but argument is of type 'struct folio *' 375 | static inline bool folio_memcg_kmem(struct folio *folio); | ~~~~~~~~~~~~~~^~~~~ include/linux/memcontrol.h:454:41: error: passing argument 1 of '__folio_objcg' from incompatible pointer type [-Werror=incompatible-pointer-types] 454 | return obj_cgroup_memcg(__folio_objcg(folio)); | ^~~~~ | | | struct folio * include/linux/memcontrol.h:420:62: note: expected 'struct folio *' but argument is of type 'struct folio *' 420 | static inline struct obj_cgroup *__folio_objcg(struct folio *folio) | ~~~~~~~~~~~~~~^~~~~ include/linux/memcontrol.h:456:24: error: passing argument 1 of '__folio_memcg' from incompatible pointer type [-Werror=incompatible-pointer-types] 456 | return __folio_memcg(folio); | ^~~~~ | | | struct folio * include/linux/memcontrol.h:399:62: note: expected 'struct folio *' but argument is of type 'struct folio *' 399 | static inline struct mem_cgroup *__folio_memcg(struct folio *folio) | ~~~~~~~~~~~~~~^~~~~ include/linux/memcontrol.h: In function 'page_memcg': include/linux/memcontrol.h:461:21: error: implicit declaration of function 'page_folio' [-Werror=implicit-function-declaration] 461 | return folio_memcg(page_folio(page)); | ^~~~~~~~~~ include/linux/memcontrol.h:461:21: warning: passing argument 1 of 'folio_memcg' makes pointer from integer without a cast [-Wint-conversion] 461 | return folio_memcg(page_folio(page)); | ^~~~~~~~~~~~~~~~ | | | int include/linux/memcontrol.h:451:60: note: expected 'struct folio *' but argument is of type 'int' 451 | static inline struct mem_cgroup *folio_memcg(struct folio *folio) | ~~~~~~~~~~~~~~^~~~~ include/linux/memcontrol.h: At top level: include/linux/memcontrol.h:589:44: warning: 'struct folio' declared inside parameter list will not be visible outside of this definition or declaration 589 | static inline bool folio_memcg_kmem(struct folio *folio) | ^~~~~ include/linux/memcontrol.h:589:20: error: conflicting types for 'folio_memcg_kmem' 589 | static inline bool folio_memcg_kmem(struct folio *folio) | ^~~~~~~~~~~~~~~~ include/linux/memcontrol.h:375:20: note: previous declaration of 'folio_memcg_kmem' was here 375 | static inline bool folio_memcg_kmem(struct folio *folio); | ^~~~~~~~~~~~~~~~ include/linux/memcontrol.h: In function 'PageMemcgKmem': include/linux/memcontrol.h:607:26: warning: passing argument 1 of 'folio_memcg_kmem' makes pointer from integer without a cast [-Wint-conversion] 607 | return folio_memcg_kmem(page_folio(page)); | ^~~~~~~~~~~~~~~~ | | | int include/linux/memcontrol.h:589:51: note: expected 'struct folio *' but argument is of type 'int' 589 | static inline bool folio_memcg_kmem(struct folio *folio) | ~~~~~~~~~~~~~~^~~~~ include/linux/memcontrol.h: At top level: include/linux/memcontrol.h:708:30: warning: 'struct folio' declared inside parameter list will not be visible outside of this definition or declaration 708 | int mem_cgroup_charge(struct folio *, struct mm_struct *, gfp_t); | ^~~~~ mm/huge_memory.c: In function '__do_huge_pmd_anonymous_page': >> mm/huge_memory.c:597:24: warning: passing argument 1 of 'mem_cgroup_charge' makes pointer from integer without a cast [-Wint-conversion] 597 | if (mem_cgroup_charge(page_folio(page), vma->vm_mm, gfp)) { | ^~~~~~~~~~~~~~~~ | | | int In file included from include/linux/rmap.h:12, from mm/huge_memory.c:16: include/linux/memcontrol.h:708:23: note: expected 'struct folio *' but argument is of type 'int' 708 | int mem_cgroup_charge(struct folio *, struct mm_struct *, gfp_t); | ^~~~~~~~~~~~~~ mm/huge_memory.c: At top level: include/linux/memcontrol.h:375:20: warning: 'folio_memcg_kmem' used but never defined 375 | static inline bool folio_memcg_kmem(struct folio *folio); | ^~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors -- 1384 | return page_to_nid(&folio->page); | ^~ In file included from include/linux/rmap.h:12, from mm/khugepaged.c:9: include/linux/memcontrol.h: At top level: include/linux/memcontrol.h:375:44: warning: 'struct folio' declared inside parameter list will not be visible outside of this definition or declaration 375 | static inline bool folio_memcg_kmem(struct folio *folio); | ^~~~~ include/linux/memcontrol.h:399:55: warning: 'struct folio' declared inside parameter list will not be visible outside of this definition or declaration 399 | static inline struct mem_cgroup *__folio_memcg(struct folio *folio) | ^~~~~ include/linux/memcontrol.h: In function '__folio_memcg': include/linux/memcontrol.h:401:34: error: dereferencing pointer to incomplete type 'struct folio' 401 | unsigned long memcg_data = folio->memcg_data; | ^~ include/linux/memcontrol.h:403:2: error: implicit declaration of function 'VM_BUG_ON_FOLIO'; did you mean 'VM_BUG_ON_MM'? [-Werror=implicit-function-declaration] 403 | VM_BUG_ON_FOLIO(folio_slab(folio), folio); | ^~~~~~~~~~~~~~~ | VM_BUG_ON_MM include/linux/memcontrol.h:403:18: error: implicit declaration of function 'folio_slab' [-Werror=implicit-function-declaration] 403 | VM_BUG_ON_FOLIO(folio_slab(folio), folio); | ^~~~~~~~~~ include/linux/memcontrol.h: At top level: include/linux/memcontrol.h:420:55: warning: 'struct folio' declared inside parameter list will not be visible outside of this definition or declaration 420 | static inline struct obj_cgroup *__folio_objcg(struct folio *folio) | ^~~~~ include/linux/memcontrol.h: In function '__folio_objcg': include/linux/memcontrol.h:422:34: error: dereferencing pointer to incomplete type 'struct folio' 422 | unsigned long memcg_data = folio->memcg_data; | ^~ include/linux/memcontrol.h: At top level: include/linux/memcontrol.h:451:53: warning: 'struct folio' declared inside parameter list will not be visible outside of this definition or declaration 451 | static inline struct mem_cgroup *folio_memcg(struct folio *folio) | ^~~~~ include/linux/memcontrol.h: In function 'folio_memcg': include/linux/memcontrol.h:453:23: error: passing argument 1 of 'folio_memcg_kmem' from incompatible pointer type [-Werror=incompatible-pointer-types] 453 | if (folio_memcg_kmem(folio)) | ^~~~~ | | | struct folio * include/linux/memcontrol.h:375:51: note: expected 'struct folio *' but argument is of type 'struct folio *' 375 | static inline bool folio_memcg_kmem(struct folio *folio); | ~~~~~~~~~~~~~~^~~~~ include/linux/memcontrol.h:454:41: error: passing argument 1 of '__folio_objcg' from incompatible pointer type [-Werror=incompatible-pointer-types] 454 | return obj_cgroup_memcg(__folio_objcg(folio)); | ^~~~~ | | | struct folio * include/linux/memcontrol.h:420:62: note: expected 'struct folio *' but argument is of type 'struct folio *' 420 | static inline struct obj_cgroup *__folio_objcg(struct folio *folio) | ~~~~~~~~~~~~~~^~~~~ include/linux/memcontrol.h:456:24: error: passing argument 1 of '__folio_memcg' from incompatible pointer type [-Werror=incompatible-pointer-types] 456 | return __folio_memcg(folio); | ^~~~~ | | | struct folio * include/linux/memcontrol.h:399:62: note: expected 'struct folio *' but argument is of type 'struct folio *' 399 | static inline struct mem_cgroup *__folio_memcg(struct folio *folio) | ~~~~~~~~~~~~~~^~~~~ include/linux/memcontrol.h: In function 'page_memcg': include/linux/memcontrol.h:461:21: error: implicit declaration of function 'page_folio' [-Werror=implicit-function-declaration] 461 | return folio_memcg(page_folio(page)); | ^~~~~~~~~~ include/linux/memcontrol.h:461:21: warning: passing argument 1 of 'folio_memcg' makes pointer from integer without a cast [-Wint-conversion] 461 | return folio_memcg(page_folio(page)); | ^~~~~~~~~~~~~~~~ | | | int include/linux/memcontrol.h:451:60: note: expected 'struct folio *' but argument is of type 'int' 451 | static inline struct mem_cgroup *folio_memcg(struct folio *folio) | ~~~~~~~~~~~~~~^~~~~ include/linux/memcontrol.h: At top level: include/linux/memcontrol.h:589:44: warning: 'struct folio' declared inside parameter list will not be visible outside of this definition or declaration 589 | static inline bool folio_memcg_kmem(struct folio *folio) | ^~~~~ include/linux/memcontrol.h:589:20: error: conflicting types for 'folio_memcg_kmem' 589 | static inline bool folio_memcg_kmem(struct folio *folio) | ^~~~~~~~~~~~~~~~ include/linux/memcontrol.h:375:20: note: previous declaration of 'folio_memcg_kmem' was here 375 | static inline bool folio_memcg_kmem(struct folio *folio); | ^~~~~~~~~~~~~~~~ include/linux/memcontrol.h: In function 'PageMemcgKmem': include/linux/memcontrol.h:607:26: warning: passing argument 1 of 'folio_memcg_kmem' makes pointer from integer without a cast [-Wint-conversion] 607 | return folio_memcg_kmem(page_folio(page)); | ^~~~~~~~~~~~~~~~ | | | int include/linux/memcontrol.h:589:51: note: expected 'struct folio *' but argument is of type 'int' 589 | static inline bool folio_memcg_kmem(struct folio *folio) | ~~~~~~~~~~~~~~^~~~~ include/linux/memcontrol.h: At top level: include/linux/memcontrol.h:708:30: warning: 'struct folio' declared inside parameter list will not be visible outside of this definition or declaration 708 | int mem_cgroup_charge(struct folio *, struct mm_struct *, gfp_t); | ^~~~~ In file included from arch/sparc/include/asm/bug.h:6, from include/linux/bug.h:5, from include/linux/mmdebug.h:5, from include/linux/mm.h:9, from mm/khugepaged.c:4: mm/khugepaged.c: In function 'collapse_huge_page': >> mm/khugepaged.c:1091:33: warning: passing argument 1 of 'mem_cgroup_charge' makes pointer from integer without a cast [-Wint-conversion] 1091 | if (unlikely(mem_cgroup_charge(page_folio(new_page), mm, gfp))) { | ^~~~~~~~~~~~~~~~~~~~ | | | int include/linux/compiler.h:78:42: note: in definition of macro 'unlikely' 78 | # define unlikely(x) __builtin_expect(!!(x), 0) | ^ In file included from include/linux/rmap.h:12, from mm/khugepaged.c:9: include/linux/memcontrol.h:708:23: note: expected 'struct folio *' but argument is of type 'int' 708 | int mem_cgroup_charge(struct folio *, struct mm_struct *, gfp_t); | ^~~~~~~~~~~~~~ mm/khugepaged.c: At top level: include/linux/memcontrol.h:375:20: warning: 'folio_memcg_kmem' used but never defined 375 | static inline bool folio_memcg_kmem(struct folio *folio); | ^~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/mem_cgroup_charge +597 mm/huge_memory.c 586 587 static vm_fault_t __do_huge_pmd_anonymous_page(struct vm_fault *vmf, 588 struct page *page, gfp_t gfp) 589 { 590 struct vm_area_struct *vma = vmf->vma; 591 pgtable_t pgtable; 592 unsigned long haddr = vmf->address & HPAGE_PMD_MASK; 593 vm_fault_t ret = 0; 594 595 VM_BUG_ON_PAGE(!PageCompound(page), page); 596 > 597 if (mem_cgroup_charge(page_folio(page), vma->vm_mm, gfp)) { 598 put_page(page); 599 count_vm_event(THP_FAULT_FALLBACK); 600 count_vm_event(THP_FAULT_FALLBACK_CHARGE); 601 return VM_FAULT_FALLBACK; 602 } 603 cgroup_throttle_swaprate(page, gfp); 604 605 pgtable = pte_alloc_one(vma->vm_mm); 606 if (unlikely(!pgtable)) { 607 ret = VM_FAULT_OOM; 608 goto release; 609 } 610 611 clear_huge_page(page, vmf->address, HPAGE_PMD_NR); 612 /* 613 * The memory barrier inside __SetPageUptodate makes sure that 614 * clear_huge_page writes become visible before the set_pmd_at() 615 * write. 616 */ 617 __SetPageUptodate(page); 618 619 vmf->ptl = pmd_lock(vma->vm_mm, vmf->pmd); 620 if (unlikely(!pmd_none(*vmf->pmd))) { 621 goto unlock_release; 622 } else { 623 pmd_t entry; 624 625 ret = check_stable_address_space(vma->vm_mm); 626 if (ret) 627 goto unlock_release; 628 629 /* Deliver the page fault to userland */ 630 if (userfaultfd_missing(vma)) { 631 spin_unlock(vmf->ptl); 632 put_page(page); 633 pte_free(vma->vm_mm, pgtable); 634 ret = handle_userfault(vmf, VM_UFFD_MISSING); 635 VM_BUG_ON(ret & VM_FAULT_FALLBACK); 636 return ret; 637 } 638 639 entry = mk_huge_pmd(page, vma->vm_page_prot); 640 entry = maybe_pmd_mkwrite(pmd_mkdirty(entry), vma); 641 page_add_new_anon_rmap(page, vma, haddr, true); 642 lru_cache_add_inactive_or_unevictable(page, vma); 643 pgtable_trans_huge_deposit(vma->vm_mm, vmf->pmd, pgtable); 644 set_pmd_at(vma->vm_mm, haddr, vmf->pmd, entry); 645 update_mmu_cache_pmd(vma, vmf->address, vmf->pmd); 646 add_mm_counter(vma->vm_mm, MM_ANONPAGES, HPAGE_PMD_NR); 647 mm_inc_nr_ptes(vma->vm_mm); 648 spin_unlock(vmf->ptl); 649 count_vm_event(THP_FAULT_ALLOC); 650 count_memcg_event_mm(vma->vm_mm, THP_FAULT_ALLOC); 651 } 652 653 return 0; 654 unlock_release: 655 spin_unlock(vmf->ptl); 656 release: 657 if (pgtable) 658 pte_free(vma->vm_mm, pgtable); 659 put_page(page); 660 return ret; 661 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip