Message ID | 77516a018529fe23ca466db2ea513f7f03d820ec.1444265419.git.sam.bobroff@au1.ibm.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On Thu, 2015-10-08 at 11:50 +1100, Sam Bobroff 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. > > This patch adds a new command ".", which takes a single (hex) numeric > argument: lines per page. It will cause the output of "dp" and "dpa" > to be broken into pages, if necessary. > > Sample output: > > 0:mon> .10 So what about making it "#" rather than "." ? cheers
On Wed, Oct 14, 2015 at 08:39:09PM +1100, Michael Ellerman wrote: > On Thu, 2015-10-08 at 11:50 +1100, Sam Bobroff 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. > > > > This patch adds a new command ".", which takes a single (hex) numeric > > argument: lines per page. It will cause the output of "dp" and "dpa" > > to be broken into pages, if necessary. > > > > Sample output: > > > > 0:mon> .10 > > So what about making it "#" rather than "." ? > > cheers Sure, although we'll have to do a better job than the other commands in the help text ;-) (They use "#" to indicate a hex number and "##" is just going to be confusing.) Do you want me to respin? (I'm happy for you to just adjust the patch.) Cheers, Sam.
On Thu, 2015-08-10 at 00:50:23 UTC, Sam bobroff 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. ... > Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com> Series applied to powerpc next, thanks. https://git.kernel.org/powerpc/c/958b7c80507a6eb847777b0d cheers
diff --git a/arch/powerpc/xmon/nonstdio.c b/arch/powerpc/xmon/nonstdio.c index c987486..18819d7 100644 --- a/arch/powerpc/xmon/nonstdio.c +++ b/arch/powerpc/xmon/nonstdio.c @@ -11,10 +11,25 @@ #include <asm/time.h> #include "nonstdio.h" +int paginating = 0, paginate_skipping = 0; +unsigned long paginate_lpp = 0 /* Lines Per Page */; +unsigned long paginate_pos; -static int xmon_write(const void *ptr, int nb) +void xmon_start_pagination(void) { - return udbg_write(ptr, nb); + paginating = 1; + paginate_skipping = 0; + paginate_pos = 0; +} + +void xmon_end_pagination(void) +{ + paginating = 0; +} + +void xmon_set_pagination_lpp(unsigned long lpp) +{ + paginate_lpp = lpp; } static int xmon_readchar(void) @@ -24,6 +39,44 @@ static int xmon_readchar(void) return -1; } +static int xmon_write(const char *ptr, int nb) +{ + int rv = 0; + const char *p = ptr, *q; + const char msg[] = "[Hit a key (a:all, q:truncate, any:next page)]"; + + if (nb <= 0) + return rv; + if (paginating && paginate_skipping) + return nb; + if (paginate_lpp) { + while (paginating && (q = strchr(p, '\n'))) { + rv += udbg_write(p, q - p + 1); + p = q + 1; + paginate_pos++; + if (paginate_pos >= paginate_lpp) { + udbg_write(msg, strlen(msg)); + switch (xmon_readchar()) { + case 'a': + paginating = 0; + break; + case 'q': + paginate_skipping = 1; + break; + default: + /* nothing */ + break; + } + paginate_pos = 0; + udbg_write("\r\n", 2); + if (paginate_skipping) + return nb; + } + } + } + return rv + udbg_write(p, nb - (p - ptr)); +} + int xmon_putchar(int c) { char ch = c; diff --git a/arch/powerpc/xmon/nonstdio.h b/arch/powerpc/xmon/nonstdio.h index 18a51de..f865336 100644 --- a/arch/powerpc/xmon/nonstdio.h +++ b/arch/powerpc/xmon/nonstdio.h @@ -3,6 +3,9 @@ #define printf xmon_printf #define putchar xmon_putchar +extern void xmon_set_pagination_lpp(unsigned long lpp); +extern void xmon_start_pagination(void); +extern void xmon_end_pagination(void); extern int xmon_putchar(int c); extern void xmon_puts(const char *); extern char *xmon_gets(char *, int); diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c index 6ef1231..cc070c3 100644 --- a/arch/powerpc/xmon/xmon.c +++ b/arch/powerpc/xmon/xmon.c @@ -242,6 +242,9 @@ Commands:\n\ " u dump TLB\n" #endif " ? help\n" +#ifdef CONFIG_PPC64 +" .# limit output to # lines per page (dump paca only)\n" +#endif " zr reboot\n\ zh halt\n" ; @@ -833,6 +836,16 @@ static void remove_cpu_bpts(void) write_ciabr(0); } +static void set_lpp_cmd(void) +{ + unsigned long lpp; + + if (!scanhex(&lpp)) { + printf("Invalid number.\n"); + lpp = 0; + } + xmon_set_pagination_lpp(lpp); +} /* Command interpreting routine */ static char *last_cmd; @@ -924,6 +937,9 @@ cmds(struct pt_regs *excp) case '?': xmon_puts(help_string); break; + case '.': + set_lpp_cmd(); + break; case 'b': bpt_cmds(); break; @@ -2166,7 +2182,9 @@ dump(void) #ifdef CONFIG_PPC64 if (c == 'p') { + xmon_start_pagination(); dump_pacas(); + xmon_end_pagination(); return; } #endif
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. This patch adds a new command ".", which takes a single (hex) numeric argument: lines per page. It will cause the output of "dp" and "dpa" to be broken into pages, if necessary. Sample output: 0:mon> .10 0:mon> dp1 paca for cpu 0x1 @ c00000000fdc0480: possible = yes present = yes online = yes lock_token = 0x8000 (0x8) paca_index = 0x1 (0xa) kernel_toc = 0xc000000000eb2400 (0x10) kernelbase = 0xc000000000000000 (0x18) kernel_msr = 0xb000000000001032 (0x20) emergency_sp = 0xc00000003ffe8000 (0x28) mc_emergency_sp = 0xc00000003ffe4000 (0x2e0) in_mce = 0x0 (0x2e8) data_offset = 0x7f170000 (0x30) hw_cpu_id = 0x8 (0x38) cpu_start = 0x1 (0x3a) kexec_state = 0x0 (0x3b) [Hit a key (a:all, q:truncate, any:next page)] 0:mon> __current = 0xc00000007e696620 (0x290) kstack = 0xc00000007e6ebe30 (0x298) stab_rr = 0xb (0x2a0) saved_r1 = 0xc00000007ef37860 (0x2a8) trap_save = 0x0 (0x2b8) soft_enabled = 0x0 (0x2ba) irq_happened = 0x1 (0x2bb) io_sync = 0x0 (0x2bc) irq_work_pending = 0x0 (0x2bd) nap_state_lost = 0x0 (0x2be) 0:mon> (Based on a similar patch by Michael Ellerman <mpe@ellerman.id.au> "[v2] powerpc/xmon: Allow limiting the size of the paca display". This patch is an alternative and cannot coexist with the original.) Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com> --- arch/powerpc/xmon/nonstdio.c | 57 ++++++++++++++++++++++++++++++++++++++++++-- arch/powerpc/xmon/nonstdio.h | 3 +++ arch/powerpc/xmon/xmon.c | 18 ++++++++++++++ 3 files changed, 76 insertions(+), 2 deletions(-)