All of lore.kernel.org
 help / color / mirror / Atom feed
* [android-common:android-mainline-riscv64 1/1] mm/hmm.c:252:23: error: implicit declaration of function 'pte_is_uffd_wp_marker'; did you mean 'pte_swp_uffd_wp_any'?
@ 2026-07-10  8:57 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-07-10  8:57 UTC (permalink / raw)
  To: cros-kernel-buildreports; +Cc: oe-kbuild-all

Hi Carlos,

FYI, the error/warning still remains.

tree:   https://android.googlesource.com/kernel/common android-mainline-riscv64
head:   c8bd194f277ae6d43833ef16baa205e4c67629b4
commit: 82d9be76e213a0fb22f8f20586b020b6a91a5c01 [1/1] Merge 7203ca412fc8 ("Merge tag 'mm-stable-2025-12-03-21-26' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm") into android-mainline
config: arm-randconfig-001-20260710 (https://download.01.org/0day-ci/archive/20260710/202607101616.9KVdFRh3-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260710/202607101616.9KVdFRh3-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202607101616.9KVdFRh3-lkp@intel.com/

All errors (new ones prefixed by >>):

   mm/hmm.c: In function 'pte_to_hmm_pfn_flags':
   mm/hmm.c:230:6: error: implicit declaration of function 'pte_none'; did you mean 'p4d_none'? [-Werror=implicit-function-declaration]
     if (pte_none(pte) || !pte_present(pte) || pte_protnone(pte))
         ^~~~~~~~
         p4d_none
   mm/hmm.c:230:24: error: implicit declaration of function 'pte_present'; did you mean 'p4d_present'? [-Werror=implicit-function-declaration]
     if (pte_none(pte) || !pte_present(pte) || pte_protnone(pte))
                           ^~~~~~~~~~~
                           p4d_present
   mm/hmm.c:230:44: error: implicit declaration of function 'pte_protnone'; did you mean 'p4d_none'? [-Werror=implicit-function-declaration]
     if (pte_none(pte) || !pte_present(pte) || pte_protnone(pte))
                                               ^~~~~~~~~~~~
                                               p4d_none
   mm/hmm.c:232:9: error: implicit declaration of function 'pte_write'; did you mean 'pgd_write'? [-Werror=implicit-function-declaration]
     return pte_write(pte) ? (HMM_PFN_VALID | HMM_PFN_WRITE) : HMM_PFN_VALID;
            ^~~~~~~~~
            pgd_write
   mm/hmm.c: In function 'hmm_vma_handle_pte':
   mm/hmm.c:243:14: error: implicit declaration of function 'ptep_get'; did you mean 'kset_get'? [-Werror=implicit-function-declaration]
     pte_t pte = ptep_get(ptep);
                 ^~~~~~~~
                 kset_get
>> mm/hmm.c:252:23: error: implicit declaration of function 'pte_is_uffd_wp_marker'; did you mean 'pte_swp_uffd_wp_any'? [-Werror=implicit-function-declaration]
     if (pte_none(pte) || pte_is_uffd_wp_marker(pte)) {
                          ^~~~~~~~~~~~~~~~~~~~~
                          pte_swp_uffd_wp_any
   mm/hmm.c:261:28: error: implicit declaration of function 'softleaf_from_pte' [-Werror=implicit-function-declaration]
      const softleaf_t entry = softleaf_from_pte(pte);
                               ^~~~~~~~~~~~~~~~~
   mm/hmm.c:261:28: error: invalid initializer
>> mm/hmm.c:267:7: error: implicit declaration of function 'softleaf_is_device_private'; did you mean 'folio_is_device_private'? [-Werror=implicit-function-declaration]
      if (softleaf_is_device_private(entry) &&
          ^~~~~~~~~~~~~~~~~~~~~~~~~~
          folio_is_device_private
>> mm/hmm.c:268:18: error: implicit declaration of function 'softleaf_to_page'; did you mean 'kmap_to_page'? [-Werror=implicit-function-declaration]
          page_pgmap(softleaf_to_page(entry))->owner ==
                     ^~~~~~~~~~~~~~~~
                     kmap_to_page
   mm/hmm.c:268:18: warning: passing argument 1 of 'page_pgmap' makes pointer from integer without a cast [-Wint-conversion]
          page_pgmap(softleaf_to_page(entry))->owner ==
                     ^~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/gfp.h:7,
                    from include/linux/mm.h:7,
                    from include/linux/pagewalk.h:5,
                    from mm/hmm.c:11:
   include/linux/mmzone.h:1241:65: note: expected 'const struct page *' but argument is of type 'int'
    static inline struct dev_pagemap *page_pgmap(const struct page *page)
                                                 ~~~~~~~~~~~~~~~~~~~^~~~
   mm/hmm.c:271:8: error: implicit declaration of function 'softleaf_is_device_private_write'; did you mean 'folio_is_device_private'? [-Werror=implicit-function-declaration]
       if (softleaf_is_device_private_write(entry))
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           folio_is_device_private
   mm/hmm.c:273:20: error: implicit declaration of function 'softleaf_to_pfn'; did you mean 'vmalloc_to_pfn'? [-Werror=implicit-function-declaration]
       new_pfn_flags = softleaf_to_pfn(entry) | cpu_flags;
                       ^~~~~~~~~~~~~~~
                       vmalloc_to_pfn
>> mm/hmm.c:282:7: error: implicit declaration of function 'softleaf_is_swap'; did you mean 'folio_swap'? [-Werror=implicit-function-declaration]
      if (softleaf_is_swap(entry))
          ^~~~~~~~~~~~~~~~
          folio_swap
   mm/hmm.c:288:7: error: implicit declaration of function 'softleaf_is_device_exclusive'; did you mean 'swait_event_exclusive'? [-Werror=implicit-function-declaration]
      if (softleaf_is_device_exclusive(entry))
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
          swait_event_exclusive
   mm/hmm.c:291:7: error: implicit declaration of function 'softleaf_is_migration' [-Werror=implicit-function-declaration]
      if (softleaf_is_migration(entry)) {
          ^~~~~~~~~~~~~~~~~~~~~
   mm/hmm.c:292:4: error: implicit declaration of function 'pte_unmap'; did you mean 'memunmap'? [-Werror=implicit-function-declaration]
       pte_unmap(ptep);
       ^~~~~~~~~
       memunmap
   mm/hmm.c:294:4: error: implicit declaration of function 'migration_entry_wait'; did you mean 'memalloc_retry_wait'? [-Werror=implicit-function-declaration]
       migration_entry_wait(walk->mm, pmdp, addr);
       ^~~~~~~~~~~~~~~~~~~~
       memalloc_retry_wait
   mm/hmm.c:314:19: error: implicit declaration of function 'pte_pfn'; did you mean 'pud_pfn'? [-Werror=implicit-function-declaration]
         !is_zero_pfn(pte_pfn(pte))) {
                      ^~~~~~~
                      pud_pfn
   mm/hmm.c: In function 'hmm_vma_walk_pmd':
   mm/hmm.c:411:8: error: implicit declaration of function 'pmdp_get_lockless'; did you mean 'pmd_offset_lockless'? [-Werror=implicit-function-declaration]
     pmd = pmdp_get_lockless(pmdp);
           ^~~~~~~~~~~~~~~~~
           pmd_offset_lockless
   mm/hmm.c:412:6: error: implicit declaration of function 'pmd_none'; did you mean 'p4d_none'? [-Werror=implicit-function-declaration]
     if (pmd_none(pmd))
         ^~~~~~~~
         p4d_none
>> mm/hmm.c:415:35: error: implicit declaration of function 'pmd_is_migration_entry'; did you mean 'list_first_entry'? [-Werror=implicit-function-declaration]
     if (thp_migration_supported() && pmd_is_migration_entry(pmd)) {
                                      ^~~~~~~~~~~~~~~~~~~~~~
                                      list_first_entry
   mm/hmm.c:418:4: error: implicit declaration of function 'pmd_migration_entry_wait'; did you mean 'memalloc_retry_wait'? [-Werror=implicit-function-declaration]
       pmd_migration_entry_wait(walk->mm, pmdp);
       ^~~~~~~~~~~~~~~~~~~~~~~~
       memalloc_retry_wait
   mm/hmm.c:424:7: error: implicit declaration of function 'pmd_present'; did you mean 'p4d_present'? [-Werror=implicit-function-declaration]
     if (!pmd_present(pmd))
          ^~~~~~~~~~~
          p4d_present
   mm/hmm.c:428:6: error: implicit declaration of function 'pmd_trans_huge'; did you mean 'pmd_is_huge'? [-Werror=implicit-function-declaration]
     if (pmd_trans_huge(pmd)) {
         ^~~~~~~~~~~~~~
         pmd_is_huge
   mm/hmm.c:451:6: error: implicit declaration of function 'pmd_bad'; did you mean 'p4d_bad'? [-Werror=implicit-function-declaration]
     if (pmd_bad(pmd)) {
         ^~~~~~~
         p4d_bad
   mm/hmm.c: In function 'hmm_range_fault':
   mm/hmm.c:672:7: error: implicit declaration of function 'mmu_interval_check_retry'; did you mean 'vma_interval_tree_remove'? [-Werror=implicit-function-declaration]
      if (mmu_interval_check_retry(range->notifier,
          ^~~~~~~~~~~~~~~~~~~~~~~~
          vma_interval_tree_remove
   cc1: some warnings being treated as errors

Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for DRM_GEM_SHMEM_HELPER
   Depends on [n]: HAS_IOMEM [=y] && DRM [=y] && MMU [=n]
   Selected by [y]:
   - GKI_HIDDEN_DRM_CONFIGS [=y] && DRM [=y]
   WARNING: unmet direct dependencies detected for DRM_TTM
   Depends on [n]: HAS_IOMEM [=y] && DRM [=y] && MMU [=n]
   Selected by [y]:
   - GKI_HIDDEN_DRM_CONFIGS [=y] && HAS_IOMEM [=y] && DRM [=y]
   WARNING: unmet direct dependencies detected for PAGE_POOL
   Depends on [n]: NET [=n]
   Selected by [y]:
   - GKI_HIDDEN_NET_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for CAN_RX_OFFLOAD
   Depends on [n]: NETDEVICES [=n] && CAN_DEV [=n] && CAN_NETLINK [=n]
   Selected by [y]:
   - GKI_HIDDEN_MCP251XFD_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for NET_DEVLINK
   Depends on [n]: NET [=n]
   Selected by [y]:
   - GKI_HIDDEN_NET_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for DIMLIB
   Depends on [n]: NET [=n]
   Selected by [y]:
   - GKI_HIDDEN_VIRTUAL_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for NET_PTP_CLASSIFY
   Depends on [n]: NET [=n]
   Selected by [y]:
   - GKI_HIDDEN_NET_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for HMM_MIRROR
   Depends on [n]: MMU [=n]
   Selected by [y]:
   - GKI_HIDDEN_DRM_CONFIGS [=y] && DRM [=y]


vim +252 mm/hmm.c

2aee09d8c116421 Jérôme Glisse   2018-04-10  234  
53f5c3f489ecddc Jérôme Glisse   2018-04-10  235  static int hmm_vma_handle_pte(struct mm_walk *walk, unsigned long addr,
53f5c3f489ecddc Jérôme Glisse   2018-04-10  236  			      unsigned long end, pmd_t *pmdp, pte_t *ptep,
2733ea144dcce78 Jason Gunthorpe 2020-05-01  237  			      unsigned long *hmm_pfn)
53f5c3f489ecddc Jérôme Glisse   2018-04-10  238  {
53f5c3f489ecddc Jérôme Glisse   2018-04-10  239  	struct hmm_vma_walk *hmm_vma_walk = walk->private;
f88a1e90c665408 Jérôme Glisse   2018-04-10  240  	struct hmm_range *range = hmm_vma_walk->range;
a3eb13c1579ba97 Jason Gunthorpe 2020-03-27  241  	unsigned int required_fault;
2733ea144dcce78 Jason Gunthorpe 2020-05-01  242  	unsigned long cpu_flags;
c33c794828f2121 Ryan Roberts    2023-06-12  243  	pte_t pte = ptep_get(ptep);
2733ea144dcce78 Jason Gunthorpe 2020-05-01  244  	uint64_t pfn_req_flags = *hmm_pfn;
285e871884ff3dc Leon Romanovsky 2025-04-28  245  	uint64_t new_pfn_flags = 0;
da4c3c735ea4dcc Jérôme Glisse   2017-09-08  246  
c093cf451094a9a Lorenzo Stoakes 2025-11-10  247  	/*
c093cf451094a9a Lorenzo Stoakes 2025-11-10  248  	 * Any other marker than a UFFD WP marker will result in a fault error
c093cf451094a9a Lorenzo Stoakes 2025-11-10  249  	 * that will be correctly handled, so we need only check for UFFD WP
c093cf451094a9a Lorenzo Stoakes 2025-11-10  250  	 * here.
c093cf451094a9a Lorenzo Stoakes 2025-11-10  251  	 */
68aa2fdbf57f769 Lorenzo Stoakes 2025-11-10 @252  	if (pte_none(pte) || pte_is_uffd_wp_marker(pte)) {
2733ea144dcce78 Jason Gunthorpe 2020-05-01  253  		required_fault =
2733ea144dcce78 Jason Gunthorpe 2020-05-01  254  			hmm_pte_need_fault(hmm_vma_walk, pfn_req_flags, 0);
a3eb13c1579ba97 Jason Gunthorpe 2020-03-27  255  		if (required_fault)
74eee180b935fcb Jérôme Glisse   2017-09-08  256  			goto fault;
285e871884ff3dc Leon Romanovsky 2025-04-28  257  		goto out;
74eee180b935fcb Jérôme Glisse   2017-09-08  258  	}
74eee180b935fcb Jérôme Glisse   2017-09-08  259  
74eee180b935fcb Jérôme Glisse   2017-09-08  260  	if (!pte_present(pte)) {
9ff30bb9ab40b34 Lorenzo Stoakes 2025-11-10  261  		const softleaf_t entry = softleaf_from_pte(pte);
74eee180b935fcb Jérôme Glisse   2017-09-08  262  
74eee180b935fcb Jérôme Glisse   2017-09-08  263  		/*
8a295dbbaf7292c Ralph Campbell  2022-07-25  264  		 * Don't fault in device private pages owned by the caller,
8a295dbbaf7292c Ralph Campbell  2022-07-25  265  		 * just report the PFN.
74eee180b935fcb Jérôme Glisse   2017-09-08  266  		 */
9ff30bb9ab40b34 Lorenzo Stoakes 2025-11-10 @267  		if (softleaf_is_device_private(entry) &&
9ff30bb9ab40b34 Lorenzo Stoakes 2025-11-10 @268  		    page_pgmap(softleaf_to_page(entry))->owner ==
8a295dbbaf7292c Ralph Campbell  2022-07-25  269  		    range->dev_private_owner) {
2733ea144dcce78 Jason Gunthorpe 2020-05-01  270  			cpu_flags = HMM_PFN_VALID;
9ff30bb9ab40b34 Lorenzo Stoakes 2025-11-10  271  			if (softleaf_is_device_private_write(entry))
2733ea144dcce78 Jason Gunthorpe 2020-05-01  272  				cpu_flags |= HMM_PFN_WRITE;
93976a20345b4af Lorenzo Stoakes 2025-11-10  273  			new_pfn_flags = softleaf_to_pfn(entry) | cpu_flags;
285e871884ff3dc Leon Romanovsky 2025-04-28  274  			goto out;
53f5c3f489ecddc Jérôme Glisse   2018-04-10  275  		}
53f5c3f489ecddc Jérôme Glisse   2018-04-10  276  
2733ea144dcce78 Jason Gunthorpe 2020-05-01  277  		required_fault =
2733ea144dcce78 Jason Gunthorpe 2020-05-01  278  			hmm_pte_need_fault(hmm_vma_walk, pfn_req_flags, 0);
285e871884ff3dc Leon Romanovsky 2025-04-28  279  		if (!required_fault)
285e871884ff3dc Leon Romanovsky 2025-04-28  280  			goto out;
76612d6ce4ccd21 Jason Gunthorpe 2020-02-28  281  
9ff30bb9ab40b34 Lorenzo Stoakes 2025-11-10 @282  		if (softleaf_is_swap(entry))
76612d6ce4ccd21 Jason Gunthorpe 2020-02-28  283  			goto fault;
76612d6ce4ccd21 Jason Gunthorpe 2020-02-28  284  
9ff30bb9ab40b34 Lorenzo Stoakes 2025-11-10  285  		if (softleaf_is_device_private(entry))
8a295dbbaf7292c Ralph Campbell  2022-07-25  286  			goto fault;
8a295dbbaf7292c Ralph Campbell  2022-07-25  287  
9ff30bb9ab40b34 Lorenzo Stoakes 2025-11-10  288  		if (softleaf_is_device_exclusive(entry))
b756a3b5e7ead8f Alistair Popple 2021-06-30  289  			goto fault;
b756a3b5e7ead8f Alistair Popple 2021-06-30  290  
9ff30bb9ab40b34 Lorenzo Stoakes 2025-11-10  291  		if (softleaf_is_migration(entry)) {
74eee180b935fcb Jérôme Glisse   2017-09-08  292  			pte_unmap(ptep);
74eee180b935fcb Jérôme Glisse   2017-09-08  293  			hmm_vma_walk->last = addr;
d2e8d551165ccb6 Ralph Campbell  2019-07-25  294  			migration_entry_wait(walk->mm, pmdp, addr);
73231612dc7c907 Jérôme Glisse   2019-05-13  295  			return -EBUSY;
74eee180b935fcb Jérôme Glisse   2017-09-08  296  		}
53f5c3f489ecddc Jérôme Glisse   2018-04-10  297  
53f5c3f489ecddc Jérôme Glisse   2018-04-10  298  		/* Report error for everything else */
dfdc22078f3f064 Jason Gunthorpe 2020-02-28  299  		pte_unmap(ptep);
53f5c3f489ecddc Jérôme Glisse   2018-04-10  300  		return -EFAULT;
da4c3c735ea4dcc Jérôme Glisse   2017-09-08  301  	}
da4c3c735ea4dcc Jérôme Glisse   2017-09-08  302  
76612d6ce4ccd21 Jason Gunthorpe 2020-02-28  303  	cpu_flags = pte_to_hmm_pfn_flags(range, pte);
2733ea144dcce78 Jason Gunthorpe 2020-05-01  304  	required_fault =
2733ea144dcce78 Jason Gunthorpe 2020-05-01  305  		hmm_pte_need_fault(hmm_vma_walk, pfn_req_flags, cpu_flags);
a3eb13c1579ba97 Jason Gunthorpe 2020-03-27  306  	if (required_fault)
74eee180b935fcb Jérôme Glisse   2017-09-08  307  		goto fault;
74eee180b935fcb Jérôme Glisse   2017-09-08  308  
ac541f250372294 Ralph Campbell  2019-10-23  309  	/*
405506274922910 Jason Gunthorpe 2020-03-05  310  	 * Since each architecture defines a struct page for the zero page, just
405506274922910 Jason Gunthorpe 2020-03-05  311  	 * fall through and treat it like a normal page.
ac541f250372294 Ralph Campbell  2019-10-23  312  	 */
87c01d57fa23de8 Alistair Popple 2022-01-14  313  	if (!vm_normal_page(walk->vma, addr, pte) &&
4b42fb213678d2b Li Zhijian      2021-09-08  314  	    !is_zero_pfn(pte_pfn(pte))) {
2733ea144dcce78 Jason Gunthorpe 2020-05-01  315  		if (hmm_pte_need_fault(hmm_vma_walk, pfn_req_flags, 0)) {
405506274922910 Jason Gunthorpe 2020-03-05  316  			pte_unmap(ptep);
405506274922910 Jason Gunthorpe 2020-03-05  317  			return -EFAULT;
405506274922910 Jason Gunthorpe 2020-03-05  318  		}
285e871884ff3dc Leon Romanovsky 2025-04-28  319  		new_pfn_flags = HMM_PFN_ERROR;
285e871884ff3dc Leon Romanovsky 2025-04-28  320  		goto out;
ac541f250372294 Ralph Campbell  2019-10-23  321  	}
992de9a8b751167 Jérôme Glisse   2019-05-13  322  
285e871884ff3dc Leon Romanovsky 2025-04-28  323  	new_pfn_flags = pte_pfn(pte) | cpu_flags;
285e871884ff3dc Leon Romanovsky 2025-04-28  324  out:
285e871884ff3dc Leon Romanovsky 2025-04-28  325  	*hmm_pfn = (*hmm_pfn & HMM_PFN_INOUT_FLAGS) | new_pfn_flags;
53f5c3f489ecddc Jérôme Glisse   2018-04-10  326  	return 0;
74eee180b935fcb Jérôme Glisse   2017-09-08  327  
74eee180b935fcb Jérôme Glisse   2017-09-08  328  fault:
74eee180b935fcb Jérôme Glisse   2017-09-08  329  	pte_unmap(ptep);
5504ed29692faad Jérôme Glisse   2018-04-10  330  	/* Fault any virtual address we were asked to fault */
a3eb13c1579ba97 Jason Gunthorpe 2020-03-27  331  	return hmm_vma_fault(addr, end, required_fault, walk);
53f5c3f489ecddc Jérôme Glisse   2018-04-10  332  }
53f5c3f489ecddc Jérôme Glisse   2018-04-10  333  
10b9feee2d0dc81 Francois Dugast 2025-09-08  334  #ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION
10b9feee2d0dc81 Francois Dugast 2025-09-08  335  static int hmm_vma_handle_absent_pmd(struct mm_walk *walk, unsigned long start,
10b9feee2d0dc81 Francois Dugast 2025-09-08  336  				     unsigned long end, unsigned long *hmm_pfns,
10b9feee2d0dc81 Francois Dugast 2025-09-08  337  				     pmd_t pmd)
10b9feee2d0dc81 Francois Dugast 2025-09-08  338  {
10b9feee2d0dc81 Francois Dugast 2025-09-08  339  	struct hmm_vma_walk *hmm_vma_walk = walk->private;
10b9feee2d0dc81 Francois Dugast 2025-09-08  340  	struct hmm_range *range = hmm_vma_walk->range;
10b9feee2d0dc81 Francois Dugast 2025-09-08  341  	unsigned long npages = (end - start) >> PAGE_SHIFT;
0ac881efe164685 Lorenzo Stoakes 2025-11-10  342  	const softleaf_t entry = softleaf_from_pmd(pmd);
10b9feee2d0dc81 Francois Dugast 2025-09-08  343  	unsigned long addr = start;
10b9feee2d0dc81 Francois Dugast 2025-09-08  344  	unsigned int required_fault;
10b9feee2d0dc81 Francois Dugast 2025-09-08  345  
0ac881efe164685 Lorenzo Stoakes 2025-11-10  346  	if (softleaf_is_device_private(entry) &&
0ac881efe164685 Lorenzo Stoakes 2025-11-10  347  	    softleaf_to_folio(entry)->pgmap->owner ==
10b9feee2d0dc81 Francois Dugast 2025-09-08  348  	    range->dev_private_owner) {
10b9feee2d0dc81 Francois Dugast 2025-09-08  349  		unsigned long cpu_flags = HMM_PFN_VALID |
10b9feee2d0dc81 Francois Dugast 2025-09-08  350  			hmm_pfn_flags_order(PMD_SHIFT - PAGE_SHIFT);
0ac881efe164685 Lorenzo Stoakes 2025-11-10  351  		unsigned long pfn = softleaf_to_pfn(entry);
10b9feee2d0dc81 Francois Dugast 2025-09-08  352  		unsigned long i;
10b9feee2d0dc81 Francois Dugast 2025-09-08  353  
0ac881efe164685 Lorenzo Stoakes 2025-11-10  354  		if (softleaf_is_device_private_write(entry))
10b9feee2d0dc81 Francois Dugast 2025-09-08  355  			cpu_flags |= HMM_PFN_WRITE;
10b9feee2d0dc81 Francois Dugast 2025-09-08  356  
10b9feee2d0dc81 Francois Dugast 2025-09-08  357  		/*
10b9feee2d0dc81 Francois Dugast 2025-09-08  358  		 * Fully populate the PFN list though subsequent PFNs could be
10b9feee2d0dc81 Francois Dugast 2025-09-08  359  		 * inferred, because drivers which are not yet aware of large
10b9feee2d0dc81 Francois Dugast 2025-09-08  360  		 * folios probably do not support sparsely populated PFN lists.
10b9feee2d0dc81 Francois Dugast 2025-09-08  361  		 */
10b9feee2d0dc81 Francois Dugast 2025-09-08  362  		for (i = 0; addr < end; addr += PAGE_SIZE, i++, pfn++) {
10b9feee2d0dc81 Francois Dugast 2025-09-08  363  			hmm_pfns[i] &= HMM_PFN_INOUT_FLAGS;
10b9feee2d0dc81 Francois Dugast 2025-09-08  364  			hmm_pfns[i] |= pfn | cpu_flags;
10b9feee2d0dc81 Francois Dugast 2025-09-08  365  		}
10b9feee2d0dc81 Francois Dugast 2025-09-08  366  
10b9feee2d0dc81 Francois Dugast 2025-09-08  367  		return 0;
10b9feee2d0dc81 Francois Dugast 2025-09-08  368  	}
10b9feee2d0dc81 Francois Dugast 2025-09-08  369  
10b9feee2d0dc81 Francois Dugast 2025-09-08  370  	required_fault = hmm_range_need_fault(hmm_vma_walk, hmm_pfns,
10b9feee2d0dc81 Francois Dugast 2025-09-08  371  					      npages, 0);
10b9feee2d0dc81 Francois Dugast 2025-09-08  372  	if (required_fault) {
0ac881efe164685 Lorenzo Stoakes 2025-11-10  373  		if (softleaf_is_device_private(entry))
10b9feee2d0dc81 Francois Dugast 2025-09-08  374  			return hmm_vma_fault(addr, end, required_fault, walk);
10b9feee2d0dc81 Francois Dugast 2025-09-08  375  		else
10b9feee2d0dc81 Francois Dugast 2025-09-08  376  			return -EFAULT;
10b9feee2d0dc81 Francois Dugast 2025-09-08  377  	}
10b9feee2d0dc81 Francois Dugast 2025-09-08  378  
10b9feee2d0dc81 Francois Dugast 2025-09-08  379  	return hmm_pfns_fill(start, end, range, HMM_PFN_ERROR);
10b9feee2d0dc81 Francois Dugast 2025-09-08  380  }
10b9feee2d0dc81 Francois Dugast 2025-09-08  381  #else
10b9feee2d0dc81 Francois Dugast 2025-09-08  382  static int hmm_vma_handle_absent_pmd(struct mm_walk *walk, unsigned long start,
10b9feee2d0dc81 Francois Dugast 2025-09-08  383  				     unsigned long end, unsigned long *hmm_pfns,
10b9feee2d0dc81 Francois Dugast 2025-09-08  384  				     pmd_t pmd)
10b9feee2d0dc81 Francois Dugast 2025-09-08  385  {
10b9feee2d0dc81 Francois Dugast 2025-09-08  386  	struct hmm_vma_walk *hmm_vma_walk = walk->private;
10b9feee2d0dc81 Francois Dugast 2025-09-08  387  	struct hmm_range *range = hmm_vma_walk->range;
10b9feee2d0dc81 Francois Dugast 2025-09-08  388  	unsigned long npages = (end - start) >> PAGE_SHIFT;
10b9feee2d0dc81 Francois Dugast 2025-09-08  389  
10b9feee2d0dc81 Francois Dugast 2025-09-08  390  	if (hmm_range_need_fault(hmm_vma_walk, hmm_pfns, npages, 0))
10b9feee2d0dc81 Francois Dugast 2025-09-08  391  		return -EFAULT;
10b9feee2d0dc81 Francois Dugast 2025-09-08  392  	return hmm_pfns_fill(start, end, range, HMM_PFN_ERROR);
10b9feee2d0dc81 Francois Dugast 2025-09-08  393  }
10b9feee2d0dc81 Francois Dugast 2025-09-08  394  #endif  /* CONFIG_ARCH_ENABLE_THP_MIGRATION */
10b9feee2d0dc81 Francois Dugast 2025-09-08  395  
53f5c3f489ecddc Jérôme Glisse   2018-04-10  396  static int hmm_vma_walk_pmd(pmd_t *pmdp,
53f5c3f489ecddc Jérôme Glisse   2018-04-10  397  			    unsigned long start,
53f5c3f489ecddc Jérôme Glisse   2018-04-10  398  			    unsigned long end,
53f5c3f489ecddc Jérôme Glisse   2018-04-10  399  			    struct mm_walk *walk)
53f5c3f489ecddc Jérôme Glisse   2018-04-10  400  {
53f5c3f489ecddc Jérôme Glisse   2018-04-10  401  	struct hmm_vma_walk *hmm_vma_walk = walk->private;
53f5c3f489ecddc Jérôme Glisse   2018-04-10  402  	struct hmm_range *range = hmm_vma_walk->range;
2733ea144dcce78 Jason Gunthorpe 2020-05-01  403  	unsigned long *hmm_pfns =
2733ea144dcce78 Jason Gunthorpe 2020-05-01  404  		&range->hmm_pfns[(start - range->start) >> PAGE_SHIFT];
2288a9a68175cec Jason Gunthorpe 2020-03-05  405  	unsigned long npages = (end - start) >> PAGE_SHIFT;
2288a9a68175cec Jason Gunthorpe 2020-03-05  406  	unsigned long addr = start;
53f5c3f489ecddc Jérôme Glisse   2018-04-10  407  	pte_t *ptep;
d08faca018c4618 Jérôme Glisse   2018-10-30  408  	pmd_t pmd;
53f5c3f489ecddc Jérôme Glisse   2018-04-10  409  
53f5c3f489ecddc Jérôme Glisse   2018-04-10  410  again:
26e1a0c3277d7f4 Hugh Dickins    2023-06-08  411  	pmd = pmdp_get_lockless(pmdp);
d08faca018c4618 Jérôme Glisse   2018-10-30  412  	if (pmd_none(pmd))
b7a16c7ad790d0e Steven Price    2020-02-03  413  		return hmm_vma_walk_hole(start, end, -1, walk);
53f5c3f489ecddc Jérôme Glisse   2018-04-10  414  
0ac881efe164685 Lorenzo Stoakes 2025-11-10 @415  	if (thp_migration_supported() && pmd_is_migration_entry(pmd)) {
2733ea144dcce78 Jason Gunthorpe 2020-05-01  416  		if (hmm_range_need_fault(hmm_vma_walk, hmm_pfns, npages, 0)) {
d08faca018c4618 Jérôme Glisse   2018-10-30  417  			hmm_vma_walk->last = addr;
d2e8d551165ccb6 Ralph Campbell  2019-07-25  418  			pmd_migration_entry_wait(walk->mm, pmdp);
73231612dc7c907 Jérôme Glisse   2019-05-13  419  			return -EBUSY;
d08faca018c4618 Jérôme Glisse   2018-10-30  420  		}
2733ea144dcce78 Jason Gunthorpe 2020-05-01  421  		return hmm_pfns_fill(start, end, range, 0);
2288a9a68175cec Jason Gunthorpe 2020-03-05  422  	}
2288a9a68175cec Jason Gunthorpe 2020-03-05  423  
10b9feee2d0dc81 Francois Dugast 2025-09-08  424  	if (!pmd_present(pmd))
10b9feee2d0dc81 Francois Dugast 2025-09-08  425  		return hmm_vma_handle_absent_pmd(walk, start, end, hmm_pfns,
10b9feee2d0dc81 Francois Dugast 2025-09-08  426  						 pmd);
d08faca018c4618 Jérôme Glisse   2018-10-30  427  
8a6a984c2e0ea40 Alistair Popple 2025-06-19  428  	if (pmd_trans_huge(pmd)) {
53f5c3f489ecddc Jérôme Glisse   2018-04-10  429  		/*
d2e8d551165ccb6 Ralph Campbell  2019-07-25  430  		 * No need to take pmd_lock here, even if some other thread
53f5c3f489ecddc Jérôme Glisse   2018-04-10  431  		 * is splitting the huge pmd we will get that event through
53f5c3f489ecddc Jérôme Glisse   2018-04-10  432  		 * mmu_notifier callback.
53f5c3f489ecddc Jérôme Glisse   2018-04-10  433  		 *
d2e8d551165ccb6 Ralph Campbell  2019-07-25  434  		 * So just read pmd value and check again it's a transparent
53f5c3f489ecddc Jérôme Glisse   2018-04-10  435  		 * huge or device mapping one and compute corresponding pfn
53f5c3f489ecddc Jérôme Glisse   2018-04-10  436  		 * values.
53f5c3f489ecddc Jérôme Glisse   2018-04-10  437  		 */
dab6e717429e5ec Peter Zijlstra  2020-11-26  438  		pmd = pmdp_get_lockless(pmdp);
8a6a984c2e0ea40 Alistair Popple 2025-06-19  439  		if (!pmd_trans_huge(pmd))
53f5c3f489ecddc Jérôme Glisse   2018-04-10  440  			goto again;
53f5c3f489ecddc Jérôme Glisse   2018-04-10  441  
2733ea144dcce78 Jason Gunthorpe 2020-05-01  442  		return hmm_vma_handle_pmd(walk, addr, end, hmm_pfns, pmd);
53f5c3f489ecddc Jérôme Glisse   2018-04-10  443  	}
53f5c3f489ecddc Jérôme Glisse   2018-04-10  444  
d08faca018c4618 Jérôme Glisse   2018-10-30  445  	/*
d2e8d551165ccb6 Ralph Campbell  2019-07-25  446  	 * We have handled all the valid cases above ie either none, migration,
d08faca018c4618 Jérôme Glisse   2018-10-30  447  	 * huge or transparent huge. At this point either it is a valid pmd
d08faca018c4618 Jérôme Glisse   2018-10-30  448  	 * entry pointing to pte directory or it is a bad pmd that will not
d08faca018c4618 Jérôme Glisse   2018-10-30  449  	 * recover.
d08faca018c4618 Jérôme Glisse   2018-10-30  450  	 */
2288a9a68175cec Jason Gunthorpe 2020-03-05  451  	if (pmd_bad(pmd)) {
2733ea144dcce78 Jason Gunthorpe 2020-05-01  452  		if (hmm_range_need_fault(hmm_vma_walk, hmm_pfns, npages, 0))
2288a9a68175cec Jason Gunthorpe 2020-03-05  453  			return -EFAULT;
d28c2c9a487708b Ralph Campbell  2019-11-04  454  		return hmm_pfns_fill(start, end, range, HMM_PFN_ERROR);
2288a9a68175cec Jason Gunthorpe 2020-03-05  455  	}
53f5c3f489ecddc Jérôme Glisse   2018-04-10  456  
53f5c3f489ecddc Jérôme Glisse   2018-04-10  457  	ptep = pte_offset_map(pmdp, addr);
6ec1905f6ec7f9f Hugh Dickins    2023-06-08  458  	if (!ptep)
6ec1905f6ec7f9f Hugh Dickins    2023-06-08  459  		goto again;
2733ea144dcce78 Jason Gunthorpe 2020-05-01  460  	for (; addr < end; addr += PAGE_SIZE, ptep++, hmm_pfns++) {
53f5c3f489ecddc Jérôme Glisse   2018-04-10  461  		int r;
53f5c3f489ecddc Jérôme Glisse   2018-04-10  462  
2733ea144dcce78 Jason Gunthorpe 2020-05-01  463  		r = hmm_vma_handle_pte(walk, addr, end, pmdp, ptep, hmm_pfns);
53f5c3f489ecddc Jérôme Glisse   2018-04-10  464  		if (r) {
dfdc22078f3f064 Jason Gunthorpe 2020-02-28  465  			/* hmm_vma_handle_pte() did pte_unmap() */
53f5c3f489ecddc Jérôme Glisse   2018-04-10  466  			return r;
53f5c3f489ecddc Jérôme Glisse   2018-04-10  467  		}
da4c3c735ea4dcc Jérôme Glisse   2017-09-08  468  	}
da4c3c735ea4dcc Jérôme Glisse   2017-09-08  469  	pte_unmap(ptep - 1);
da4c3c735ea4dcc Jérôme Glisse   2017-09-08  470  	return 0;
da4c3c735ea4dcc Jérôme Glisse   2017-09-08  471  }
da4c3c735ea4dcc Jérôme Glisse   2017-09-08  472  

:::::: The code at line 252 was first introduced by commit
:::::: 68aa2fdbf57f769e552f472ddb762aba028a207e mm: introduce leaf entry type and use to simplify leaf entry logic

:::::: TO: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
:::::: CC: Andrew Morton <akpm@linux-foundation.org>

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-07-10  8:58 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-10  8:57 [android-common:android-mainline-riscv64 1/1] mm/hmm.c:252:23: error: implicit declaration of function 'pte_is_uffd_wp_marker'; did you mean 'pte_swp_uffd_wp_any'? kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.