* [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.