@@ -207,6 +207,7 @@ struct pg_level {
207207static struct pg_level pg_level [] = {
208208 {
209209 }, { /* pgd */
210+ }, { /* p4d */
210211 }, { /* pud */
211212 }, { /* pmd */
212213 .bits = section_bits ,
@@ -308,7 +309,7 @@ static void walk_pte(struct pg_state *st, pmd_t *pmd, unsigned long start,
308309
309310 for (i = 0 ; i < PTRS_PER_PTE ; i ++ , pte ++ ) {
310311 addr = start + i * PAGE_SIZE ;
311- note_page (st , addr , 4 , pte_val (* pte ), domain );
312+ note_page (st , addr , 5 , pte_val (* pte ), domain );
312313 }
313314}
314315
@@ -350,14 +351,14 @@ static void walk_pmd(struct pg_state *st, pud_t *pud, unsigned long start)
350351 addr += SECTION_SIZE ;
351352 pmd ++ ;
352353 domain = get_domain_name (pmd );
353- note_page (st , addr , 3 , pmd_val (* pmd ), domain );
354+ note_page (st , addr , 4 , pmd_val (* pmd ), domain );
354355 }
355356 }
356357}
357358
358- static void walk_pud (struct pg_state * st , pgd_t * pgd , unsigned long start )
359+ static void walk_pud (struct pg_state * st , p4d_t * p4d , unsigned long start )
359360{
360- pud_t * pud = pud_offset (pgd , 0 );
361+ pud_t * pud = pud_offset (p4d , 0 );
361362 unsigned long addr ;
362363 unsigned i ;
363364
@@ -366,7 +367,23 @@ static void walk_pud(struct pg_state *st, pgd_t *pgd, unsigned long start)
366367 if (!pud_none (* pud )) {
367368 walk_pmd (st , pud , addr );
368369 } else {
369- note_page (st , addr , 2 , pud_val (* pud ), NULL );
370+ note_page (st , addr , 3 , pud_val (* pud ), NULL );
371+ }
372+ }
373+ }
374+
375+ static void walk_p4d (struct pg_state * st , pgd_t * pgd , unsigned long start )
376+ {
377+ p4d_t * p4d = p4d_offset (pgd , 0 );
378+ unsigned long addr ;
379+ unsigned i ;
380+
381+ for (i = 0 ; i < PTRS_PER_P4D ; i ++ , p4d ++ ) {
382+ addr = start + i * P4D_SIZE ;
383+ if (!p4d_none (* p4d )) {
384+ walk_pud (st , p4d , addr );
385+ } else {
386+ note_page (st , addr , 2 , p4d_val (* p4d ), NULL );
370387 }
371388 }
372389}
@@ -381,7 +398,7 @@ static void walk_pgd(struct pg_state *st, struct mm_struct *mm,
381398 for (i = 0 ; i < PTRS_PER_PGD ; i ++ , pgd ++ ) {
382399 addr = start + i * PGDIR_SIZE ;
383400 if (!pgd_none (* pgd )) {
384- walk_pud (st , pgd , addr );
401+ walk_p4d (st , pgd , addr );
385402 } else {
386403 note_page (st , addr , 1 , pgd_val (* pgd ), NULL );
387404 }
0 commit comments