On 7/13/26 06:55, Yeoreum Yun wrote:
> @@ -134,11 +129,12 @@ static inline void
> resume_init_first_level_page_table(pgd_t *pg_dir)
> {
> #ifdef CONFIG_X86_PAE
> int i;
> + pud_t *pud = pud_offset(p4d_offset(pg_dir, 0), 0);
>
> /* Init entries of the first-level page table to the zero page */
> for (i = 0; i < PTRS_PER_PGD; i++)
> - set_pgd(pg_dir + i,
> - __pgd(__pa(empty_zero_page) | _PAGE_PRESENT));
> + set_pud(pud + i,
> + __pud(__pa(empty_zero_page) | _PAGE_PRESENT));
> #endif
> }
If this is the way forward, it's going to require the retraining of some
awfully old brain cells.
It also doesn't really read correctly. Loop over each PGD entry:
for (i = 0; i < PTRS_PER_PGD; i++)
... and set a pud?
set_pud(...)
I'm not sure how I'd ever learn the rules to write this code from
scratch. Right now, the code says: "The pgd_t is the top level of the
page tables. I know there are PTRS_PER_PGD of those top level entries
entries I need to 'zero'."
You don't have to know what is folded, just that you're dealing with the
top level.
But *this* code says:
1. The pgd_t is the top level of the page tables. Start there.
2. "Walk" down *two* (folded) levels
3. Set the third-level (pud) entries to 'zero'
So the code now *has* to know how the folding occurs.
This seems really hard to work with to me.