Hi Andrew,
Le 18/12/2025 à 17:21, Andrew Donnellan a écrit :
In set_huge_pte_at(), replace the existing open coded pte value
calculation with the new helper pte_advance_pfn().
Signed-off-by: Andrew Donnellan <[email protected]>
---
arch/powerpc/mm/pgtable.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/powerpc/mm/pgtable.c b/arch/powerpc/mm/pgtable.c
index
56d7e8960e77d877390d6bcbf0d8a305cc222101..9073e373e1e8a88f904cae592e1e8c34707545e6
100644
--- a/arch/powerpc/mm/pgtable.c
+++ b/arch/powerpc/mm/pgtable.c
@@ -365,7 +365,7 @@ void set_huge_pte_at(struct mm_struct *mm, unsigned long
addr, pte_t *ptep,
for (i = 0; i < sz / pdsize; i++, ptep++, addr += pdsize) {
__set_pte_at(mm, addr, ptep, pte, 0);
- pte = __pte(pte_val(pte) + ((unsigned long long)pdsize / PAGE_SIZE
<< PFN_PTE_SHIFT));
+ pte = pte_advance_pfn(pte, pdsize / PAGE_SIZE);
How can this work ?
pdsize is 4M, PAGE_SIZE is 4k so pdsize/PAGE_SIZE is 0x400.
PFN_PTE_SHIFT is 24.
0x400 << 24 is more than what an unsigned long can contain in
pte_advance_pfn()
Christophe
}
}
#endif
---
base-commit: ea1013c1539270e372fc99854bc6e4d94eaeff66
change-id: 20251219-set_huge_pte_at_pte_advance_pfn-0ae18078fcca
--
Andrew Donnellan OzLabs, ADL Canberra
[email protected] IBM Australia Limited