All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: cros-kernel-buildreports@googlegroups.com
Cc: oe-kbuild-all@lists.linux.dev
Subject: [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'?
Date: Fri, 10 Jul 2026 16:57:37 +0800	[thread overview]
Message-ID: <202607101616.9KVdFRh3-lkp@intel.com> (raw)

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

                 reply	other threads:[~2026-07-10  8:58 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202607101616.9KVdFRh3-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=cros-kernel-buildreports@googlegroups.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.