From: kernel test robot <lkp@intel.com>
To: cros-kernel-buildreports@googlegroups.com
Cc: oe-kbuild-all@lists.linux.dev
Subject: [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'?
Date: Thu, 13 Aug 2026 09:54:37 +0800 [thread overview]
Message-ID: <202608130925.rPdPazaf-lkp@intel.com> (raw)
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
reply other threads:[~2026-08-13 1:55 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=202608130925.rPdPazaf-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.