All of lore.kernel.org
 help / color / mirror / Atom feed
* [android-common:android17-6.18-kminext 1/1] mm/hmm.c:256:23: error: implicit declaration of function 'pte_to_swp_entry'; did you mean 'page_swap_entry'?
@ 2026-08-13  1:54 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-08-13  1:54 UTC (permalink / raw)
  To: cros-kernel-buildreports; +Cc: oe-kbuild-all

Hi Vamsidhar,

First bad commit (maybe != root cause):

tree:   https://android.googlesource.com/kernel/common android17-6.18-kminext
head:   10f6d538c651ab6dd44bb8679c8e2d6522f13a68
commit: ad36ecd6081db9827f1ebaa41671b0b336fd83bf [1/1] ANDROID: GKI: Enable HMM_MIRROR config for all arch
config: arm-randconfig-003-20260813 (https://download.01.org/0day-ci/archive/20260813/202608130925.rPdPazaf-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/20260813/202608130925.rPdPazaf-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/202608130925.rPdPazaf-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:247:6: error: implicit declaration of function 'pte_none_mostly'; did you mean 'pte_soft_dirty'? [-Werror=implicit-function-declaration]
     if (pte_none_mostly(pte)) {
         ^~~~~~~~~~~~~~~
         pte_soft_dirty
>> mm/hmm.c:256:23: error: implicit declaration of function 'pte_to_swp_entry'; did you mean 'page_swap_entry'? [-Werror=implicit-function-declaration]
      swp_entry_t entry = pte_to_swp_entry(pte);
                          ^~~~~~~~~~~~~~~~
                          page_swap_entry
   mm/hmm.c:256:23: error: invalid initializer
   mm/hmm.c:262:7: error: implicit declaration of function 'is_device_private_entry'; did you mean 'is_device_private_page'? [-Werror=implicit-function-declaration]
      if (is_device_private_entry(entry) &&
          ^~~~~~~~~~~~~~~~~~~~~~~
          is_device_private_page
>> mm/hmm.c:263:18: error: implicit declaration of function 'pfn_swap_entry_to_page'; did you mean 'swap_entry_swapped'? [-Werror=implicit-function-declaration]
          page_pgmap(pfn_swap_entry_to_page(entry))->owner ==
                     ^~~~~~~~~~~~~~~~~~~~~~
                     swap_entry_swapped
   mm/hmm.c:263:18: warning: passing argument 1 of 'page_pgmap' makes pointer from integer without a cast [-Wint-conversion]
          page_pgmap(pfn_swap_entry_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:1245: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:266:8: error: implicit declaration of function 'is_writable_device_private_entry'; did you mean 'is_device_private_page'? [-Werror=implicit-function-declaration]
       if (is_writable_device_private_entry(entry))
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           is_device_private_page
   mm/hmm.c:268:20: error: implicit declaration of function 'swp_offset_pfn'; did you mean 'pte_offset_map'? [-Werror=implicit-function-declaration]
       new_pfn_flags = swp_offset_pfn(entry) | cpu_flags;
                       ^~~~~~~~~~~~~~
                       pte_offset_map
>> mm/hmm.c:277:8: error: implicit declaration of function 'non_swap_entry'; did you mean 'page_swap_entry'? [-Werror=implicit-function-declaration]
      if (!non_swap_entry(entry))
           ^~~~~~~~~~~~~~
           page_swap_entry
>> mm/hmm.c:283:7: error: implicit declaration of function 'is_device_exclusive_entry'; did you mean 'wait_event_exclusive_cmd'? [-Werror=implicit-function-declaration]
      if (is_device_exclusive_entry(entry))
          ^~~~~~~~~~~~~~~~~~~~~~~~~
          wait_event_exclusive_cmd
   mm/hmm.c:286:7: error: implicit declaration of function 'is_migration_entry'; did you mean 'list_first_entry'? [-Werror=implicit-function-declaration]
      if (is_migration_entry(entry)) {
          ^~~~~~~~~~~~~~~~~~
          list_first_entry
   mm/hmm.c:287:4: error: implicit declaration of function 'pte_unmap'; did you mean 'memunmap'? [-Werror=implicit-function-declaration]
       pte_unmap(ptep);
       ^~~~~~~~~
       memunmap
   mm/hmm.c:289: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:309: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:406: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:407: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:410:35: error: implicit declaration of function 'is_pmd_migration_entry'; did you mean 'list_first_entry'? [-Werror=implicit-function-declaration]
     if (thp_migration_supported() && is_pmd_migration_entry(pmd)) {
                                      ^~~~~~~~~~~~~~~~~~~~~~
                                      list_first_entry
   mm/hmm.c:413: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:419: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:423:6: error: implicit declaration of function 'pmd_trans_huge'; did you mean 'pmd_trans_huge_lock'? [-Werror=implicit-function-declaration]
     if (pmd_trans_huge(pmd)) {
         ^~~~~~~~~~~~~~
         pmd_trans_huge_lock
   mm/hmm.c:446: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:667: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 USB_PHY
   Depends on [n]: USB_SUPPORT [=n]
   Selected by [y]:
   - GKI_HIDDEN_USB_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for SND_COMPRESS_ACCEL
   Depends on [n]: SOUND [=m] && SND [=n]
   Selected by [y]:
   - GKI_HIDDEN_SND_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for SND_JACK
   Depends on [n]: SOUND [=m] && SND [=n]
   Selected by [y]:
   - GKI_HIDDEN_SND_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for SND_VMASTER
   Depends on [n]: SOUND [=m] && SND [=n]
   Selected by [y]:
   - GKI_HIDDEN_SND_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 SND_JACK_INPUT_DEV
   Depends on [n]: SOUND [=m] && SND [=n] && SND_JACK [=y]
   Selected by [y]:
   - GKI_HIDDEN_SND_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for WEXT_PROC
   Depends on [n]: NET [=y] && WIRELESS [=n] && PROC_FS [=n] && WEXT_CORE [=y]
   Selected by [y]:
   - GKI_LEGACY_WEXT_ALLCONFIG [=y]
   WARNING: unmet direct dependencies detected for SND_PCM_ELD
   Depends on [n]: SOUND [=m] && SND [=n]
   Selected by [y]:
   - GKI_HIDDEN_SND_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for WEXT_PRIV
   Depends on [n]: NET [=y] && WIRELESS [=n]
   Selected by [y]:
   - GKI_LEGACY_WEXT_ALLCONFIG [=y]
   WARNING: unmet direct dependencies detected for HMM_MIRROR
   Depends on [n]: MMU [=n]
   Selected by [y]:
   - GKI_HIDDEN_DRM_CONFIGS [=y] && DRM [=y]
   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 BALLOON_COMPACTION
   Depends on [n]: COMPACTION [=n] && MEMORY_BALLOON [=y]
   Selected by [y]:
   - GKI_HIDDEN_MM_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for PHYLINK
   Depends on [n]: NETDEVICES [=n]
   Selected by [y]:
   - GKI_HIDDEN_ETHERNET_CONFIGS [=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 SND_PCM_IEC958
   Depends on [n]: SOUND [=m] && SND [=n]
   Selected by [y]:
   - GKI_HIDDEN_SND_SOC_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for IOMMU_SVA
   Depends on [n]: IOMMU_SUPPORT [=n]
   Selected by [y]:
   - GKI_HIDDEN_IOMMU_CONFIGS [=y]
   WARNING: unmet direct dependencies detected for WIRELESS_EXT
   Depends on [n]: NET [=y] && WIRELESS [=n]
   Selected by [y]:
   - GKI_LEGACY_WEXT_ALLCONFIG [=y]
   WARNING: unmet direct dependencies detected for WEXT_CORE
   Depends on [n]: NET [=y] && WIRELESS [=n] && (CFG80211_WEXT [=n] || WIRELESS_EXT [=y])
   Selected by [y]:
   - GKI_LEGACY_WEXT_ALLCONFIG [=y]


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

:::::: The code at line 256 was first introduced by commit
:::::: 8d63e4cd62b2583c7efe64f2ede406b3f44983f6 mm/hmm: fix uninitialized use of 'entry' in hmm_vma_walk_pmd()

:::::: TO: Ralph Campbell <rcampbell@nvidia.com>
:::::: CC: Linus Torvalds <torvalds@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-08-13  1:55 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-13  1:54 [android-common:android17-6.18-kminext 1/1] mm/hmm.c:256:23: error: implicit declaration of function 'pte_to_swp_entry'; did you mean 'page_swap_entry'? 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.