From mboxrd@z Thu Jan 1 00:00:00 1970 From: Don Slutz Subject: Re: [PATCH v5 03/17] xenctx: Add -n (--display-stack-pages) option to output larger stack Date: Sat, 22 Mar 2014 16:49:55 -0400 Message-ID: <532DF773.4050103@terremark.com> References: <1395342425-16260-1-git-send-email-dslutz@verizon.com> <1395342425-16260-4-git-send-email-dslutz@verizon.com> <1395412141.19839.105.camel@kazak.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1395412141.19839.105.camel@kazak.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Campbell Cc: Stefano Stabellini , George Dunlap , Don Slutz , Ian Jackson , Don Slutz , xen-devel@lists.xen.org, Jan Beulich List-Id: xen-devel@lists.xenproject.org On 03/21/14 10:29, Ian Campbell wrote: > On Thu, 2014-03-20 at 15:06 -0400, Don Slutz wrote: >> From: Don Slutz >> >> Important: This is the stack size to display not the configured >> stack size. >> >> Note: use with caution (easy to get garbage). >> >> Below is various pictures of a configured 3 page stack, and where >> the SP currently is. Each box is a page. >> >> +------------------+ >> | | >> | | >> | | >> | | >> | | >> +------------------+ >> | | >> | | >> | | >> | | >> | | >> +------------------+ >> | | >> | | >> | | >> SP --> | | >> | | >> +------------------+ >> >> Display using "-n 1" since the used stack pages is 1. > Like George I am also confused by what these diagrams are trying to show > me, and even having read your response to him I'm confused. Let me try again. Here is real output for a kernel with 4 page stacks: tools/xentrace/xenctx -s ~/zzm 4 -n 1 rip: ffffffff81346876 io_serial_in+0x16 flags: 00000002 nz rsp: ffff8800385a5ab8 rax: 000000000000006f rcx: 0000000000000000 rdx: 00000000000003fd rbx: ffffffff81ff8f00 rsi: 0000000000000005 rdi: ffffffff81ff8f00 rbp: ffff8800385a5ab8 r8: ffffffff81c03a10 r9: 0000000000000080 r10: 0000000000000005 r11: 0000000000000046 r12: 000000000000270f r13: 0000000000000020 r14: 0000000000000025 r15: ffffffff81346f20 cs: 0010 ss: 0018 ds: 0000 es: 0000 fs: 0000 @ 00007f07972f3700 gs: 0000 @ ffff88000b400000/0000000000000000/ Code (instr addr ffffffff81346876) 48 89 e5 0f 1f 44 00 00 0f b6 4f 41 0f b7 57 08 d3 e6 01 f2 ec <0f> b6 c0 c9 c3 0f 1f 44 00 00 55 Stack: ffff8800385a5ae8 ffffffff81346e64 ffffffff81ff8f00 0000000000000072 0000000000000064 0000000000000025 ffff8800385a5b08 ffffffff81346f46 ffffffff81e3e430 ffffffff81ff8f00 ffff8800385a5b48 ffffffff813428de ffffffff8100bc0e 0000000000000000 ffffffff81ff8f00 0000000000000001 0000000000000064 ffffffff81e3e40c ffff8800385a5b98 ffffffff813472ad Call Trace: [] io_serial_in+0x16 <-- [] wait_for_xmitr+0x24 [] serial8250_console_putchar+0x26 [] uart_console_write+0x3e [] apic_timer_interrupt+0xe [] serial8250_console_write+0xbd [] __call_console_drivers+0x75 [] _call_console_drivers+0x4a [] release_console_sem+0x4e [] vprintk+0x248 [] printk+0x41 tools/xentrace/xenctx -s ~/zzm 4 -n 2 rip: ffffffff81346876 io_serial_in+0x16 flags: 00000002 nz rsp: ffff8800385a5ab8 rax: 000000000000006f rcx: 0000000000000000 rdx: 00000000000003fd rbx: ffffffff81ff8f00 rsi: 0000000000000005 rdi: ffffffff81ff8f00 rbp: ffff8800385a5ab8 r8: ffffffff81c03a10 r9: 0000000000000080 r10: 0000000000000005 r11: 0000000000000046 r12: 000000000000270f r13: 0000000000000020 r14: 0000000000000025 r15: ffffffff81346f20 cs: 0010 ss: 0018 ds: 0000 es: 0000 fs: 0000 @ 00007f07972f3700 gs: 0000 @ ffff88000b400000/0000000000000000/ Code (instr addr ffffffff81346876) 48 89 e5 0f 1f 44 00 00 0f b6 4f 41 0f b7 57 08 d3 e6 01 f2 ec <0f> b6 c0 c9 c3 0f 1f 44 00 00 55 Stack: ffff8800385a5ae8 ffffffff81346e64 ffffffff81ff8f00 0000000000000072 0000000000000064 0000000000000025 ffff8800385a5b08 ffffffff81346f46 ffffffff81e3e430 ffffffff81ff8f00 ffff8800385a5b48 ffffffff813428de ffffffff8100bc0e 0000000000000000 ffffffff81ff8f00 0000000000000001 0000000000000064 ffffffff81e3e40c ffff8800385a5b98 ffffffff813472ad Call Trace: [] io_serial_in+0x16 <-- [] wait_for_xmitr+0x24 [] serial8250_console_putchar+0x26 [] uart_console_write+0x3e [] apic_timer_interrupt+0xe [] serial8250_console_write+0xbd [] __call_console_drivers+0x75 [] _call_console_drivers+0x4a [] release_console_sem+0x4e [] vprintk+0x248 [] printk+0x41 tools/xentrace/xenctx -s ~/zzm 4 -n 3 rip: ffffffff81346876 io_serial_in+0x16 flags: 00000002 nz rsp: ffff8800385a5ab8 rax: 000000000000006f rcx: 0000000000000000 rdx: 00000000000003fd rbx: ffffffff81ff8f00 rsi: 0000000000000005 rdi: ffffffff81ff8f00 rbp: ffff8800385a5ab8 r8: ffffffff81c03a10 r9: 0000000000000080 r10: 0000000000000005 r11: 0000000000000046 r12: 000000000000270f r13: 0000000000000020 r14: 0000000000000025 r15: ffffffff81346f20 cs: 0010 ss: 0018 ds: 0000 es: 0000 fs: 0000 @ 00007f07972f3700 gs: 0000 @ ffff88000b400000/0000000000000000/ Code (instr addr ffffffff81346876) 48 89 e5 0f 1f 44 00 00 0f b6 4f 41 0f b7 57 08 d3 e6 01 f2 ec <0f> b6 c0 c9 c3 0f 1f 44 00 00 55 Stack: ffff8800385a5ae8 ffffffff81346e64 ffffffff81ff8f00 0000000000000072 0000000000000064 0000000000000025 ffff8800385a5b08 ffffffff81346f46 ffffffff81e3e430 ffffffff81ff8f00 ffff8800385a5b48 ffffffff813428de ffffffff8100bc0e 0000000000000000 ffffffff81ff8f00 0000000000000001 0000000000000064 ffffffff81e3e40c ffff8800385a5b98 ffffffff813472ad Call Trace: [] io_serial_in+0x16 <-- [] wait_for_xmitr+0x24 [] serial8250_console_putchar+0x26 [] uart_console_write+0x3e [] apic_timer_interrupt+0xe [] serial8250_console_write+0xbd [] __call_console_drivers+0x75 [] _call_console_drivers+0x4a [] release_console_sem+0x4e [] vprintk+0x248 [] printk+0x41 [] do_one_initcall+0x3c [] sys_init_module+0xe1 [] system_call_fastpath+0x16 As you can see from above, only the last 3 lines show up for "-n 3" > > Why is the SP moving around in these pictures? I understood that this > option was changing what was considered to be the limit of the stack, > not the stack pointer itself, so shouldn't it be the base of the stack > which is moving around? These are pictures of the same stack at 3 different times. And as you can see from above, this option does change the stack limit. > > Perhaps if you had the diagram once and along side it had columns > showing what is printed for each -n value as a range > > e.g. > None -n 1 > +------------------+ + > | | | > | | | > | | | > | | | > | | | > +------------------+ + | > | | | | > SP --> | | + + > | | > | | > | | > +------------------+ > > (or whatever the reality is) > > [...] I will add this. And some statement about each picture is for a different time. >> Signed-off-by: Don Slutz > Out of date? Yes, and no. Both email continue to work. I will update it. >> --- >> v5: Adjust option to -n, --display-stack-pages. Adjust usage message. >> >> tools/xentrace/xenctx.c | 12 +++++++++++- >> 1 file changed, 11 insertions(+), 1 deletion(-) >> >> diff --git a/tools/xentrace/xenctx.c b/tools/xentrace/xenctx.c >> index 42a47f3..caa8899 100644 >> --- a/tools/xentrace/xenctx.c >> +++ b/tools/xentrace/xenctx.c >> @@ -35,6 +35,7 @@ static struct xenctx { >> int frame_ptrs; >> int stack_trace; >> int disp_all; >> + int multiple_pages; >> int all_vcpus; >> int self_paused; >> xc_dominfo_t dominfo; >> @@ -664,6 +665,8 @@ static int print_stack(vcpu_guest_context_any_t *ctx, int vcpu, int width) >> >> stack_limit = ((stack_pointer(ctx) + XC_PAGE_SIZE) >> & ~((guest_word_t) XC_PAGE_SIZE - 1)); >> + if ( xenctx.multiple_pages > 1 ) >> + stack_limit += (xenctx.multiple_pages - 1) * XC_PAGE_SIZE; > "multiple_pages" sounds like a boolean to me, you seem to use it as > "extra_pages", but why not just call it nr_stack_pages, initialise it to > 1 and override it with --display-stack-pages. I will adjust the internal name also. No idea why I did not do so when to option name was changed. -Don Slutz > Ian. >