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.