Skip to content

Commit a15c90b

Browse files
Sia Jee Hengpalmer-dabbelt
authored andcommitted
RISC-V: mm: Enable huge page support to kernel_page_present() function
Currently kernel_page_present() function doesn't support huge page detection causes the function to mistakenly return false to the hibernation core. Add huge page detection to the function to solve the problem. Fixes: 9e953cd ("riscv: Introduce huge page support for 32/64bit kernel") Signed-off-by: Sia Jee Heng <jeeheng.sia@starfivetech.com> Reviewed-by: Ley Foon Tan <leyfoon.tan@starfivetech.com> Reviewed-by: Mason Huo <mason.huo@starfivetech.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com> Link: https://lore.kernel.org/r/20230330064321.1008373-4-jeeheng.sia@starfivetech.com Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
1 parent fcb8986 commit a15c90b

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

arch/riscv/mm/pageattr.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,18 +217,26 @@ bool kernel_page_present(struct page *page)
217217
pgd = pgd_offset_k(addr);
218218
if (!pgd_present(*pgd))
219219
return false;
220+
if (pgd_leaf(*pgd))
221+
return true;
220222

221223
p4d = p4d_offset(pgd, addr);
222224
if (!p4d_present(*p4d))
223225
return false;
226+
if (p4d_leaf(*p4d))
227+
return true;
224228

225229
pud = pud_offset(p4d, addr);
226230
if (!pud_present(*pud))
227231
return false;
232+
if (pud_leaf(*pud))
233+
return true;
228234

229235
pmd = pmd_offset(pud, addr);
230236
if (!pmd_present(*pmd))
231237
return false;
238+
if (pmd_leaf(*pmd))
239+
return true;
232240

233241
pte = pte_offset_kernel(pmd, addr);
234242
return pte_present(*pte);

0 commit comments

Comments
 (0)