lkml.org 
[lkml]   [2020]   [May]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 10/45] powerpc/ptdump: Display size of BATs
    Date
    Display the size of areas mapped with BATs.

    For that, the size display for pages is refactorised.

    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    ---
    v2: Add missing include of linux/seq_file.h (Thanks to kbuild test robot)
    ---
    arch/powerpc/mm/ptdump/bats.c | 4 ++++
    arch/powerpc/mm/ptdump/ptdump.c | 23 ++++++++++++++---------
    arch/powerpc/mm/ptdump/ptdump.h | 3 +++
    3 files changed, 21 insertions(+), 9 deletions(-)

    diff --git a/arch/powerpc/mm/ptdump/bats.c b/arch/powerpc/mm/ptdump/bats.c
    index d3a5d6b318d1..d6c660f63d71 100644
    --- a/arch/powerpc/mm/ptdump/bats.c
    +++ b/arch/powerpc/mm/ptdump/bats.c
    @@ -10,6 +10,8 @@
    #include <asm/pgtable.h>
    #include <asm/cpu_has_feature.h>

    +#include "ptdump.h"
    +
    static char *pp_601(int k, int pp)
    {
    if (pp == 0)
    @@ -42,6 +44,7 @@ static void bat_show_601(struct seq_file *m, int idx, u32 lower, u32 upper)
    #else
    seq_printf(m, "0x%08x ", pbn);
    #endif
    + pt_dump_size(m, size);

    seq_printf(m, "Kernel %s User %s", pp_601(k & 2, pp), pp_601(k & 1, pp));

    @@ -88,6 +91,7 @@ static void bat_show_603(struct seq_file *m, int idx, u32 lower, u32 upper, bool
    #else
    seq_printf(m, "0x%08x ", brpn);
    #endif
    + pt_dump_size(m, size);

    if (k == 1)
    seq_puts(m, "User ");
    diff --git a/arch/powerpc/mm/ptdump/ptdump.c b/arch/powerpc/mm/ptdump/ptdump.c
    index d92bb8ea229c..1f97668853e3 100644
    --- a/arch/powerpc/mm/ptdump/ptdump.c
    +++ b/arch/powerpc/mm/ptdump/ptdump.c
    @@ -112,6 +112,19 @@ static struct addr_marker address_markers[] = {
    seq_putc(m, c); \
    })

    +void pt_dump_size(struct seq_file *m, unsigned long size)
    +{
    + static const char units[] = "KMGTPE";
    + const char *unit = units;
    +
    + /* Work out what appropriate unit to use */
    + while (!(size & 1023) && unit[1]) {
    + size >>= 10;
    + unit++;
    + }
    + pt_dump_seq_printf(m, "%9lu%c ", size, *unit);
    +}
    +
    static void dump_flag_info(struct pg_state *st, const struct flag_info
    *flag, u64 pte, int num)
    {
    @@ -146,8 +159,6 @@ static void dump_flag_info(struct pg_state *st, const struct flag_info

    static void dump_addr(struct pg_state *st, unsigned long addr)
    {
    - static const char units[] = "KMGTPE";
    - const char *unit = units;
    unsigned long delta;

    #ifdef CONFIG_PPC64
    @@ -164,13 +175,7 @@ static void dump_addr(struct pg_state *st, unsigned long addr)
    pt_dump_seq_printf(st->seq, " " REG " ", st->start_pa);
    delta = (addr - st->start_address) >> 10;
    }
    - /* Work out what appropriate unit to use */
    - while (!(delta & 1023) && unit[1]) {
    - delta >>= 10;
    - unit++;
    - }
    - pt_dump_seq_printf(st->seq, "%9lu%c", delta, *unit);
    -
    + pt_dump_size(st->seq, delta);
    }

    static void note_prot_wx(struct pg_state *st, unsigned long addr)
    diff --git a/arch/powerpc/mm/ptdump/ptdump.h b/arch/powerpc/mm/ptdump/ptdump.h
    index 5d513636de73..154efae96ae0 100644
    --- a/arch/powerpc/mm/ptdump/ptdump.h
    +++ b/arch/powerpc/mm/ptdump/ptdump.h
    @@ -1,5 +1,6 @@
    /* SPDX-License-Identifier: GPL-2.0 */
    #include <linux/types.h>
    +#include <linux/seq_file.h>

    struct flag_info {
    u64 mask;
    @@ -17,3 +18,5 @@ struct pgtable_level {
    };

    extern struct pgtable_level pg_level[5];
    +
    +void pt_dump_size(struct seq_file *m, unsigned long delta);
    --
    2.25.0
    \
     
     \ /
      Last update: 2020-05-11 13:28    [W:4.420 / U:0.264 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site