[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4 24/27] x86: move compat_show_guest_statck near its non-compat variant
And make it static, remove the declaration in header. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- xen/arch/x86/traps.c | 64 ++++++++++++++++++++++++++++++++++++++ xen/arch/x86/x86_64/compat/traps.c | 63 ------------------------------------- xen/include/asm-x86/processor.h | 3 -- 3 files changed, 64 insertions(+), 66 deletions(-) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 287503cd56..0cedd5159b 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -186,6 +186,70 @@ static void show_code(const struct cpu_user_regs *regs) printk("\n"); } +static void compat_show_guest_stack(struct vcpu *v, + const struct cpu_user_regs *regs, + int debug_stack_lines) +{ + unsigned int i, *stack, addr, mask = STACK_SIZE; + + stack = (unsigned int *)(unsigned long)regs->esp; + printk("Guest stack trace from esp=%08lx:\n ", (unsigned long)stack); + + if ( !__compat_access_ok(v->domain, stack, sizeof(*stack)) ) + { + printk("Guest-inaccessible memory.\n"); + return; + } + + if ( v != current ) + { + struct vcpu *vcpu; + unsigned long mfn; + + ASSERT(guest_kernel_mode(v, regs)); + mfn = read_cr3() >> PAGE_SHIFT; + for_each_vcpu( v->domain, vcpu ) + if ( pagetable_get_pfn(vcpu->arch.guest_table) == mfn ) + break; + if ( !vcpu ) + { + stack = do_page_walk(v, (unsigned long)stack); + if ( (unsigned long)stack < PAGE_SIZE ) + { + printk("Inaccessible guest memory.\n"); + return; + } + mask = PAGE_SIZE; + } + } + + for ( i = 0; i < debug_stack_lines * 8; i++ ) + { + if ( (((long)stack - 1) ^ ((long)(stack + 1) - 1)) & mask ) + break; + if ( __get_user(addr, stack) ) + { + if ( i != 0 ) + printk("\n "); + printk("Fault while accessing guest memory."); + i = 1; + break; + } + if ( (i != 0) && ((i % 8) == 0) ) + printk("\n "); + printk(" %08x", addr); + stack++; + } + if ( mask == PAGE_SIZE ) + { + BUILD_BUG_ON(PAGE_SIZE == STACK_SIZE); + unmap_domain_page(stack); + } + if ( i == 0 ) + printk("Stack empty."); + printk("\n"); +} + static void show_guest_stack(struct vcpu *v, const struct cpu_user_regs *regs) { int i; diff --git a/xen/arch/x86/x86_64/compat/traps.c b/xen/arch/x86/x86_64/compat/traps.c index 6e146a62a7..18cd2c017c 100644 --- a/xen/arch/x86/x86_64/compat/traps.c +++ b/xen/arch/x86/x86_64/compat/traps.c @@ -3,69 +3,6 @@ #include <compat/callback.h> #include <compat/arch-x86_32.h> -void compat_show_guest_stack(struct vcpu *v, const struct cpu_user_regs *regs, - int debug_stack_lines) -{ - unsigned int i, *stack, addr, mask = STACK_SIZE; - - stack = (unsigned int *)(unsigned long)regs->esp; - printk("Guest stack trace from esp=%08lx:\n ", (unsigned long)stack); - - if ( !__compat_access_ok(v->domain, stack, sizeof(*stack)) ) - { - printk("Guest-inaccessible memory.\n"); - return; - } - - if ( v != current ) - { - struct vcpu *vcpu; - unsigned long mfn; - - ASSERT(guest_kernel_mode(v, regs)); - mfn = read_cr3() >> PAGE_SHIFT; - for_each_vcpu( v->domain, vcpu ) - if ( pagetable_get_pfn(vcpu->arch.guest_table) == mfn ) - break; - if ( !vcpu ) - { - stack = do_page_walk(v, (unsigned long)stack); - if ( (unsigned long)stack < PAGE_SIZE ) - { - printk("Inaccessible guest memory.\n"); - return; - } - mask = PAGE_SIZE; - } - } - - for ( i = 0; i < debug_stack_lines * 8; i++ ) - { - if ( (((long)stack - 1) ^ ((long)(stack + 1) - 1)) & mask ) - break; - if ( __get_user(addr, stack) ) - { - if ( i != 0 ) - printk("\n "); - printk("Fault while accessing guest memory."); - i = 1; - break; - } - if ( (i != 0) && ((i % 8) == 0) ) - printk("\n "); - printk(" %08x", addr); - stack++; - } - if ( mask == PAGE_SIZE ) - { - BUILD_BUG_ON(PAGE_SIZE == STACK_SIZE); - unmap_domain_page(stack); - } - if ( i == 0 ) - printk("Stack empty."); - printk("\n"); -} - /* * Local variables: * mode: C diff --git a/xen/include/asm-x86/processor.h b/xen/include/asm-x86/processor.h index 6a335d3a61..5bf56b45e1 100644 --- a/xen/include/asm-x86/processor.h +++ b/xen/include/asm-x86/processor.h @@ -480,9 +480,6 @@ void show_execution_state(const struct cpu_user_regs *regs); void show_page_walk(unsigned long addr); void noreturn fatal_trap(const struct cpu_user_regs *regs, bool_t show_remote); -void compat_show_guest_stack(struct vcpu *v, - const struct cpu_user_regs *regs, int lines); - extern void mtrr_ap_init(void); extern void mtrr_bp_init(void); -- 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |