Subject: Re: [PATCH v11 05/13] mm: HUGE_VMAP arch support cleanup

From: kernel test robot <[email-masked]>
Date: Tue, 26 Jan 2021 21:26:38 +0800

Hi Nicholas,

I love your patch! Yet something to improve:

[auto build test ERROR on powerpc/next]
[also build test ERROR on arm64/for-next/core v5.11-rc5 next-20210125]
[cannot apply to hnaz-linux-mm/master]
[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/Nicholas-Piggin/huge-vmalloc-mappings/20210126-143141
base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: x86_64-randconfig-a002-20210126 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 925ae8c790c7e354f12ec14a6cac6aa49fc75b29)
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
        # install x86_64 cross compiling tool for clang build
        # apt-get install binutils-x86-64-linux-gnu
        # https://github.com/0day-ci/linux/commit/e43d3c665212ea34b790ab8d150bbde9d42e35b8
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Nicholas-Piggin/huge-vmalloc-mappings/20210126-143141
        git checkout e43d3c665212ea34b790ab8d150bbde9d42e35b8
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email-masked]>

All errors (new ones prefixed by >>):

>> mm/debug_vm_pgtable.c:221:7: error: implicit declaration of function 'arch_ioremap_pmd_supported' [-Werror,-Wimplicit-function-declaration]
           if (!arch_ioremap_pmd_supported())
                ^
   mm/debug_vm_pgtable.c:221:7: note: did you mean 'arch_vmap_pmd_supported'?
   arch/x86/include/asm/vmalloc.h:10:6: note: 'arch_vmap_pmd_supported' declared here
   bool arch_vmap_pmd_supported(pgprot_t prot);
        ^
>> mm/debug_vm_pgtable.c:343:7: error: implicit declaration of function 'arch_ioremap_pud_supported' [-Werror,-Wimplicit-function-declaration]
           if (!arch_ioremap_pud_supported())
                ^
   mm/debug_vm_pgtable.c:343:7: note: did you mean 'arch_vmap_pud_supported'?
   arch/x86/include/asm/vmalloc.h:9:6: note: 'arch_vmap_pud_supported' declared here
   bool arch_vmap_pud_supported(pgprot_t prot);
        ^
   2 errors generated.

vim +/arch_ioremap_pmd_supported +221 mm/debug_vm_pgtable.c

a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  215  
85a144632dcc71 Aneesh Kumar K.V  2020-10-15  216  #ifdef CONFIG_HAVE_ARCH_HUGE_VMAP
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  217  static void __init pmd_huge_tests(pmd_t *pmdp, unsigned long pfn, pgprot_t prot)
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  218  {
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  219  	pmd_t pmd;
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  220  
85a144632dcc71 Aneesh Kumar K.V  2020-10-15 @221  	if (!arch_ioremap_pmd_supported())
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  222  		return;
6315df41afccf1 Anshuman Khandual 2020-08-06  223  
6315df41afccf1 Anshuman Khandual 2020-08-06  224  	pr_debug("Validating PMD huge\n");
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  225  	/*
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  226  	 * X86 defined pmd_set_huge() verifies that the given
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  227  	 * PMD is not a populated non-leaf entry.
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  228  	 */
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  229  	WRITE_ONCE(*pmdp, __pmd(0));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  230  	WARN_ON(!pmd_set_huge(pmdp, __pfn_to_phys(pfn), prot));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  231  	WARN_ON(!pmd_clear_huge(pmdp));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  232  	pmd = READ_ONCE(*pmdp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  233  	WARN_ON(!pmd_none(pmd));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  234  }
85a144632dcc71 Aneesh Kumar K.V  2020-10-15  235  #else /* CONFIG_HAVE_ARCH_HUGE_VMAP */
85a144632dcc71 Aneesh Kumar K.V  2020-10-15  236  static void __init pmd_huge_tests(pmd_t *pmdp, unsigned long pfn, pgprot_t prot) { }
85a144632dcc71 Aneesh Kumar K.V  2020-10-15  237  #endif /* CONFIG_HAVE_ARCH_HUGE_VMAP */
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  238  
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  239  static void __init pmd_savedwrite_tests(unsigned long pfn, pgprot_t prot)
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  240  {
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  241  	pmd_t pmd = pfn_pmd(pfn, prot);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  242  
4200605b1f80e4 Aneesh Kumar K.V  2020-10-15  243  	if (!IS_ENABLED(CONFIG_NUMA_BALANCING))
4200605b1f80e4 Aneesh Kumar K.V  2020-10-15  244  		return;
4200605b1f80e4 Aneesh Kumar K.V  2020-10-15  245  
6315df41afccf1 Anshuman Khandual 2020-08-06  246  	pr_debug("Validating PMD saved write\n");
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  247  	WARN_ON(!pmd_savedwrite(pmd_mk_savedwrite(pmd_clear_savedwrite(pmd))));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  248  	WARN_ON(pmd_savedwrite(pmd_clear_savedwrite(pmd_mk_savedwrite(pmd))));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  249  }
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  250  
399145f9eb6c67 Anshuman Khandual 2020-06-04  251  #ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
399145f9eb6c67 Anshuman Khandual 2020-06-04  252  static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot)
399145f9eb6c67 Anshuman Khandual 2020-06-04  253  {
399145f9eb6c67 Anshuman Khandual 2020-06-04  254  	pud_t pud = pfn_pud(pfn, prot);
399145f9eb6c67 Anshuman Khandual 2020-06-04  255  
787d563b8642f3 Aneesh Kumar K.V  2020-06-10  256  	if (!has_transparent_hugepage())
787d563b8642f3 Aneesh Kumar K.V  2020-06-10  257  		return;
787d563b8642f3 Aneesh Kumar K.V  2020-06-10  258  
6315df41afccf1 Anshuman Khandual 2020-08-06  259  	pr_debug("Validating PUD basic\n");
399145f9eb6c67 Anshuman Khandual 2020-06-04  260  	WARN_ON(!pud_same(pud, pud));
399145f9eb6c67 Anshuman Khandual 2020-06-04  261  	WARN_ON(!pud_young(pud_mkyoung(pud_mkold(pud))));
399145f9eb6c67 Anshuman Khandual 2020-06-04  262  	WARN_ON(!pud_write(pud_mkwrite(pud_wrprotect(pud))));
399145f9eb6c67 Anshuman Khandual 2020-06-04  263  	WARN_ON(pud_write(pud_wrprotect(pud_mkwrite(pud))));
399145f9eb6c67 Anshuman Khandual 2020-06-04  264  	WARN_ON(pud_young(pud_mkold(pud_mkyoung(pud))));
399145f9eb6c67 Anshuman Khandual 2020-06-04  265  
399145f9eb6c67 Anshuman Khandual 2020-06-04  266  	if (mm_pmd_folded(mm))
399145f9eb6c67 Anshuman Khandual 2020-06-04  267  		return;
399145f9eb6c67 Anshuman Khandual 2020-06-04  268  
399145f9eb6c67 Anshuman Khandual 2020-06-04  269  	/*
399145f9eb6c67 Anshuman Khandual 2020-06-04  270  	 * A huge page does not point to next level page table
399145f9eb6c67 Anshuman Khandual 2020-06-04  271  	 * entry. Hence this must qualify as pud_bad().
399145f9eb6c67 Anshuman Khandual 2020-06-04  272  	 */
399145f9eb6c67 Anshuman Khandual 2020-06-04  273  	WARN_ON(!pud_bad(pud_mkhuge(pud)));
399145f9eb6c67 Anshuman Khandual 2020-06-04  274  }
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  275  
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  276  static void __init pud_advanced_tests(struct mm_struct *mm,
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  277  				      struct vm_area_struct *vma, pud_t *pudp,
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  278  				      unsigned long pfn, unsigned long vaddr,
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  279  				      pgprot_t prot)
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  280  {
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  281  	pud_t pud = pfn_pud(pfn, prot);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  282  
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  283  	if (!has_transparent_hugepage())
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  284  		return;
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  285  
6315df41afccf1 Anshuman Khandual 2020-08-06  286  	pr_debug("Validating PUD advanced\n");
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  287  	/* Align the address wrt HPAGE_PUD_SIZE */
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  288  	vaddr = (vaddr & HPAGE_PUD_MASK) + HPAGE_PUD_SIZE;
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  289  
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  290  	set_pud_at(mm, vaddr, pudp, pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  291  	pudp_set_wrprotect(mm, vaddr, pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  292  	pud = READ_ONCE(*pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  293  	WARN_ON(pud_write(pud));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  294  
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  295  #ifndef __PAGETABLE_PMD_FOLDED
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  296  	pudp_huge_get_and_clear(mm, vaddr, pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  297  	pud = READ_ONCE(*pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  298  	WARN_ON(!pud_none(pud));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  299  #endif /* __PAGETABLE_PMD_FOLDED */
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  300  	pud = pfn_pud(pfn, prot);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  301  	pud = pud_wrprotect(pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  302  	pud = pud_mkclean(pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  303  	set_pud_at(mm, vaddr, pudp, pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  304  	pud = pud_mkwrite(pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  305  	pud = pud_mkdirty(pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  306  	pudp_set_access_flags(vma, vaddr, pudp, pud, 1);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  307  	pud = READ_ONCE(*pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  308  	WARN_ON(!(pud_write(pud) && pud_dirty(pud)));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  309  
c3824e18d3f394 Aneesh Kumar K.V  2020-10-15  310  #ifndef __PAGETABLE_PMD_FOLDED
c3824e18d3f394 Aneesh Kumar K.V  2020-10-15  311  	pudp_huge_get_and_clear_full(mm, vaddr, pudp, 1);
c3824e18d3f394 Aneesh Kumar K.V  2020-10-15  312  	pud = READ_ONCE(*pudp);
c3824e18d3f394 Aneesh Kumar K.V  2020-10-15  313  	WARN_ON(!pud_none(pud));
c3824e18d3f394 Aneesh Kumar K.V  2020-10-15  314  #endif /* __PAGETABLE_PMD_FOLDED */
c3824e18d3f394 Aneesh Kumar K.V  2020-10-15  315  
c3824e18d3f394 Aneesh Kumar K.V  2020-10-15  316  	pud = pfn_pud(pfn, prot);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  317  	pud = pud_mkyoung(pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  318  	set_pud_at(mm, vaddr, pudp, pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  319  	pudp_test_and_clear_young(vma, vaddr, pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  320  	pud = READ_ONCE(*pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  321  	WARN_ON(pud_young(pud));
13af0506303323 Aneesh Kumar K.V  2020-10-15  322  
13af0506303323 Aneesh Kumar K.V  2020-10-15  323  	pudp_huge_get_and_clear(mm, vaddr, pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  324  }
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  325  
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  326  static void __init pud_leaf_tests(unsigned long pfn, pgprot_t prot)
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  327  {
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  328  	pud_t pud = pfn_pud(pfn, prot);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  329  
6315df41afccf1 Anshuman Khandual 2020-08-06  330  	pr_debug("Validating PUD leaf\n");
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  331  	/*
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  332  	 * PUD based THP is a leaf entry.
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  333  	 */
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  334  	pud = pud_mkhuge(pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  335  	WARN_ON(!pud_leaf(pud));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  336  }
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  337  
85a144632dcc71 Aneesh Kumar K.V  2020-10-15  338  #ifdef CONFIG_HAVE_ARCH_HUGE_VMAP
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  339  static void __init pud_huge_tests(pud_t *pudp, unsigned long pfn, pgprot_t prot)
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  340  {
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  341  	pud_t pud;
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  342  
85a144632dcc71 Aneesh Kumar K.V  2020-10-15 @343  	if (!arch_ioremap_pud_supported())
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  344  		return;
6315df41afccf1 Anshuman Khandual 2020-08-06  345  
6315df41afccf1 Anshuman Khandual 2020-08-06  346  	pr_debug("Validating PUD huge\n");
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  347  	/*
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  348  	 * X86 defined pud_set_huge() verifies that the given
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  349  	 * PUD is not a populated non-leaf entry.
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  350  	 */
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  351  	WRITE_ONCE(*pudp, __pud(0));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  352  	WARN_ON(!pud_set_huge(pudp, __pfn_to_phys(pfn), prot));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  353  	WARN_ON(!pud_clear_huge(pudp));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  354  	pud = READ_ONCE(*pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  355  	WARN_ON(!pud_none(pud));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06  356  }
85a144632dcc71 Aneesh Kumar K.V  2020-10-15  357  #else /* !CONFIG_HAVE_ARCH_HUGE_VMAP */
85a144632dcc71 Aneesh Kumar K.V  2020-10-15  358  static void __init pud_huge_tests(pud_t *pudp, unsigned long pfn, pgprot_t prot) { }
85a144632dcc71 Aneesh Kumar K.V  2020-10-15  359  #endif /* !CONFIG_HAVE_ARCH_HUGE_VMAP */
85a144632dcc71 Aneesh Kumar K.V  2020-10-15  360  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email-masked]