Subject: Re: [PATCH] powerpc/xmon: Allow limiting the size of the paca display

From: Anshuman Khandual <[email-masked]>
Date: Wed, 12 Aug 2015 13:24:46 +0530

On 08/12/2015 12:27 PM, Michael Ellerman wrote:
> The paca display is already more than 24 lines, which can be problematic
> if you have an old school 80x24 terminal, or more likely you are on a
> virtual terminal which does not scroll for whatever reason.
> 
> We'd like to expand the paca display even more, so add a way to limit
> the number of lines that are displayed.
> 
> This adds a third form of 'dp' which is 'dp # #', where the first number
> is the cpu, and the second is the number of lines to display.
> 
> Example output:
> 
>   5:mon> dp 3 6
>   paca for cpu 0x3 @ c00000000fdc0d80:
>    possible         = yes
>    present          = yes
>    online           = yes
>    lock_token       = 0x8000            	(0xa)
>    paca_index       = 0x3               	(0x8)
> 
> Signed-off-by: Michael Ellerman <[email-masked]>
> ---
>  arch/powerpc/xmon/xmon.c | 23 +++++++++++++++--------
>  1 file changed, 15 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
> index e599259d84fc..6f44e9c07f34 100644
> --- a/arch/powerpc/xmon/xmon.c
> +++ b/arch/powerpc/xmon/xmon.c
> @@ -205,6 +205,7 @@ Commands:\n\
>  #ifdef CONFIG_PPC64
>    "\
>    dp[#]	dump paca for current cpu, or cpu #\n\
> +  dp##  dump paca for cpu #, only # lines\n\
>    dpa	dump paca for all possible cpus\n"
>  #endif
>    "\
> @@ -2070,9 +2071,10 @@ static void xmon_rawdump (unsigned long adrs, long ndump)
>  }
>  
>  #ifdef CONFIG_PPC64
> -static void dump_one_paca(int cpu)
> +static void dump_one_paca(int cpu, int num_lines)
>  {
>  	struct paca_struct *p;
> +	int i;
>  
>  	if (setjmp(bus_error_jmp) != 0) {
>  		printf("*** Error dumping paca for cpu 0x%x!\n", cpu);
> @@ -2090,9 +2092,12 @@ static void dump_one_paca(int cpu)
>  	printf(" %-*s = %s\n", 16, "present", cpu_present(cpu) ? "yes" : "no");
>  	printf(" %-*s = %s\n", 16, "online", cpu_online(cpu) ? "yes" : "no");
>  
> +	i = 4; /* We always print the first four lines */
> +
>  #define DUMP(paca, name, format) \
> -	printf(" %-*s = %#-*"format"\t(0x%lx)\n", 16, #name, 18, paca->name, \
> -		offsetof(struct paca_struct, name));
> +	if (!num_lines || i++ < num_lines)

All look good except the fact that we are using 0 to signify that
there is no limit to the number of lines. Is not it bit confusing ?