x86: Support PAT bit in pagetable dump for lower levels
[cascardo/linux.git] / arch / x86 / mm / dump_pagetables.c
index 95a427e..6c2ca03 100644 (file)
@@ -126,7 +126,7 @@ static void printk_prot(struct seq_file *m, pgprot_t prot, int level, bool dmsg)
 
        if (!pgprot_val(prot)) {
                /* Not present */
-               pt_dump_cont_printf(m, dmsg, "                          ");
+               pt_dump_cont_printf(m, dmsg, "                              ");
        } else {
                if (pr & _PAGE_USER)
                        pt_dump_cont_printf(m, dmsg, "USR ");
@@ -145,18 +145,16 @@ static void printk_prot(struct seq_file *m, pgprot_t prot, int level, bool dmsg)
                else
                        pt_dump_cont_printf(m, dmsg, "    ");
 
-               /* Bit 9 has a different meaning on level 3 vs 4 */
-               if (level <= 3) {
-                       if (pr & _PAGE_PSE)
-                               pt_dump_cont_printf(m, dmsg, "PSE ");
-                       else
-                               pt_dump_cont_printf(m, dmsg, "    ");
-               } else {
-                       if (pr & _PAGE_PAT)
-                               pt_dump_cont_printf(m, dmsg, "pat ");
-                       else
-                               pt_dump_cont_printf(m, dmsg, "    ");
-               }
+               /* Bit 7 has a different meaning on level 3 vs 4 */
+               if (level <= 3 && pr & _PAGE_PSE)
+                       pt_dump_cont_printf(m, dmsg, "PSE ");
+               else
+                       pt_dump_cont_printf(m, dmsg, "    ");
+               if ((level == 4 && pr & _PAGE_PAT) ||
+                   ((level == 3 || level == 2) && pr & _PAGE_PAT_LARGE))
+                       pt_dump_cont_printf(m, dmsg, "pat ");
+               else
+                       pt_dump_cont_printf(m, dmsg, "    ");
                if (pr & _PAGE_GLOBAL)
                        pt_dump_cont_printf(m, dmsg, "GLB ");
                else