• Dmitrii Bundin's avatar
    scripts/gdb: add mm introspection utils · e36903b0
    Dmitrii Bundin authored
    This command provides a way to traverse the entire page hierarchy by a
    given virtual address on x86.  In addition to qemu's commands info
    tlb/info mem it provides the complete information about the paging
    structure for an arbitrary virtual address.  It supports 4KB/2MB/1GB and 5
    level paging.
    
    Here is an example output for 2MB success translation:
    
    (gdb) translate-vm address
    cr3:
        cr3 binary data                0x1085be003
        next entry physical address   0x1085be000
        ---
        bit  3          page level write through       False
        bit  4          page level cache disabled      False
    level 4:
        entry address                  0xffff8881085be7f8
        page entry binary data         0x800000010ac83067
        next entry physical address   0x10ac83000
        ---
        bit  0          entry present                  True
        bit  1          read/write access allowed      True
        bit  2          user access allowed            True
        bit  3          page level write through       False
        bit  4          page level cache disabled      False
        bit  5          entry has been accessed        True
        bit  7          page size                      False
        bit  11         restart to ordinary            False
        bit  63         execute disable                True
    level 3:
        entry address                  0xffff88810ac83a48
        page entry binary data         0x101af7067
        next entry physical address   0x101af7000
        ---
        bit  0          entry present                  True
        bit  1          read/write access allowed      True
        bit  2          user access allowed            True
        bit  3          page level write through       False
        bit  4          page level cache disabled      False
        bit  5          entry has been accessed        True
        bit  7          page size                      False
        bit  11         restart to ordinary            False
        bit  63         execute disable                False
    level 2:
        entry address                  0xffff888101af7368
        page entry binary data         0x80000001634008e7
        page size                      2MB
        page physical address         0x163400000
        ---
        bit  0          entry present                  True
        bit  1          read/write access allowed      True
        bit  2          user access allowed            True
        bit  3          page level write through       False
        bit  4          page level cache disabled      False
        bit  5          entry has been accessed        True
        bit  7          page size                      True
        bit  6          page dirty                     True
        bit  8          global translation             False
        bit  11         restart to ordinary            True
        bit  12         pat                            False
        bits (59, 62)   protection key                 0
        bit  63         execute disable                True
    
    [dmitrii.bundin.a@gmail.com: add SPDX line, other tweaks]
      Link: https://lkml.kernel.org/r/20230113175151.22278-1-dmitrii.bundin.a@gmail.com
    [akpm@linux-foundation.org: s/physicall/physical/]
    Link: https://lkml.kernel.org/r/20230102171014.31408-1-dmitrii.bundin.a@gmail.com
    
    Signed-off-by: default avatarDmitrii Bundin <dmitrii.bundin.a@gmail.com>
    Acked by: Mike Rapoport (IBM) <rppt@kernel.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jan Kiszka <jan.kiszka@siemens.com>
    Cc: Kieran Bingham <kbingham@kernel.org>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    e36903b0
vmlinux-gdb.py 901 Bytes