lkml.org 
[lkml]   [2021]   [Jul]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 3/4] powerpc/ptdump: Reduce level numbers by 1 in note_page() and add p4d level
    Date
    Do the same as commit f8f0d0b6fa20 ("mm: ptdump: reduce level numbers
    by 1 in note_page()") and add missing p4d level.

    This will align powerpc to the users of generic ptdump.

    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    ---
    arch/powerpc/mm/ptdump/8xx.c | 6 ++++--
    arch/powerpc/mm/ptdump/book3s64.c | 6 ++++--
    arch/powerpc/mm/ptdump/ptdump.c | 17 +++++++++--------
    arch/powerpc/mm/ptdump/shared.c | 6 ++++--
    4 files changed, 21 insertions(+), 14 deletions(-)

    diff --git a/arch/powerpc/mm/ptdump/8xx.c b/arch/powerpc/mm/ptdump/8xx.c
    index 86da2a669680..fac932eb8f9a 100644
    --- a/arch/powerpc/mm/ptdump/8xx.c
    +++ b/arch/powerpc/mm/ptdump/8xx.c
    @@ -75,8 +75,10 @@ static const struct flag_info flag_array[] = {
    };

    struct pgtable_level pg_level[5] = {
    - {
    - }, { /* pgd */
    + { /* pgd */
    + .flag = flag_array,
    + .num = ARRAY_SIZE(flag_array),
    + }, { /* p4d */
    .flag = flag_array,
    .num = ARRAY_SIZE(flag_array),
    }, { /* pud */
    diff --git a/arch/powerpc/mm/ptdump/book3s64.c b/arch/powerpc/mm/ptdump/book3s64.c
    index 14f73868db66..5ad92d9dc5d1 100644
    --- a/arch/powerpc/mm/ptdump/book3s64.c
    +++ b/arch/powerpc/mm/ptdump/book3s64.c
    @@ -103,8 +103,10 @@ static const struct flag_info flag_array[] = {
    };

    struct pgtable_level pg_level[5] = {
    - {
    - }, { /* pgd */
    + { /* pgd */
    + .flag = flag_array,
    + .num = ARRAY_SIZE(flag_array),
    + }, { /* p4d */
    .flag = flag_array,
    .num = ARRAY_SIZE(flag_array),
    }, { /* pud */
    diff --git a/arch/powerpc/mm/ptdump/ptdump.c b/arch/powerpc/mm/ptdump/ptdump.c
    index 3eb8732641da..fb531bc64fc5 100644
    --- a/arch/powerpc/mm/ptdump/ptdump.c
    +++ b/arch/powerpc/mm/ptdump/ptdump.c
    @@ -58,7 +58,7 @@ struct pg_state {
    const struct addr_marker *marker;
    unsigned long start_address;
    unsigned long start_pa;
    - unsigned int level;
    + int level;
    u64 current_flags;
    bool check_wx;
    unsigned long wx_pages;
    @@ -188,10 +188,9 @@ static void note_prot_wx(struct pg_state *st, unsigned long addr)
    st->wx_pages += (addr - st->start_address) / PAGE_SIZE;
    }

    -static void note_page_update_state(struct pg_state *st, unsigned long addr,
    - unsigned int level, u64 val)
    +static void note_page_update_state(struct pg_state *st, unsigned long addr, int level, u64 val)
    {
    - u64 flag = val & pg_level[level].mask;
    + u64 flag = level >= 0 ? val & pg_level[level].mask : 0;
    u64 pa = val & PTE_RPN_MASK;

    st->level = level;
    @@ -206,12 +205,12 @@ static void note_page_update_state(struct pg_state *st, unsigned long addr,
    }

    static void note_page(struct pg_state *st, unsigned long addr,
    - unsigned int level, u64 val, unsigned long page_size)
    + int level, u64 val, unsigned long page_size)
    {
    - u64 flag = val & pg_level[level].mask;
    + u64 flag = level >= 0 ? val & pg_level[level].mask : 0;

    /* At first no level is set */
    - if (!st->level) {
    + if (st->level == -1) {
    pt_dump_seq_printf(st->seq, "---[ %s ]---\n", st->marker->name);
    note_page_update_state(st, addr, level, val);
    /*
    @@ -383,6 +382,7 @@ static int ptdump_show(struct seq_file *m, void *v)
    struct pg_state st = {
    .seq = m,
    .marker = address_markers,
    + .level = -1,
    .start_address = IS_ENABLED(CONFIG_PPC64) ? PAGE_OFFSET : TASK_SIZE,
    };

    @@ -393,7 +393,7 @@ static int ptdump_show(struct seq_file *m, void *v)

    /* Traverse kernel page tables */
    walk_pagetables(&st);
    - note_page(&st, 0, 0, 0, 0);
    + note_page(&st, 0, -1, 0, 0);
    return 0;
    }

    @@ -415,6 +415,7 @@ void ptdump_check_wx(void)
    struct pg_state st = {
    .seq = NULL,
    .marker = address_markers,
    + .level = -1,
    .check_wx = true,
    .start_address = IS_ENABLED(CONFIG_PPC64) ? PAGE_OFFSET : TASK_SIZE,
    };
    diff --git a/arch/powerpc/mm/ptdump/shared.c b/arch/powerpc/mm/ptdump/shared.c
    index c005fe041c18..03607ab90c66 100644
    --- a/arch/powerpc/mm/ptdump/shared.c
    +++ b/arch/powerpc/mm/ptdump/shared.c
    @@ -68,8 +68,10 @@ static const struct flag_info flag_array[] = {
    };

    struct pgtable_level pg_level[5] = {
    - {
    - }, { /* pgd */
    + { /* pgd */
    + .flag = flag_array,
    + .num = ARRAY_SIZE(flag_array),
    + }, { /* p4d */
    .flag = flag_array,
    .num = ARRAY_SIZE(flag_array),
    }, { /* pud */
    --
    2.25.0
    \
     
     \ /
      Last update: 2021-07-05 09:51    [W:4.218 / U:0.336 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site