[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Re: [Xen-changelog] [xen-3.4-testing] x86: Generalise BUGFRAME_dump mechanism to allow polled UART irq to
Builds for me! :-) K. On 24/02/2010 13:25, "Mark Johnson" <johnson.nh@xxxxxxxxx> wrote: > FYI, I see the following build error with this patch... > > MRJ > > > ---- new warnings/errors for xen ---- > keyhandler.c: In function `__dump_execstate': > keyhandler.c:96: warning: asm operand 1 probably doesn't match constraints > gmake[5]: *** [keyhandler.o] Error 1 > gmake[4]: *** [/tank/ws/xvm-3.4.3/xen.hg/xen/common/built_in.o] Error 2 > gmake[3]: *** [/tank/ws/xvm-3.4.3/xen.hg/xen/xen] Error 2 > > > static void __dump_execstate(void *unused) > { > dump_execution_state(); <==== keyhandler.c:96 > > >> +#define dump_execution_state() >> run_in_exception_handler(show_execution_state) > >> +#define run_in_exception_handler(fn) \ >> asm volatile ( \ >> - "ud2 ; ret $0" \ >> - : : "i" (BUGFRAME_dump) ) >> + "ud2 ; ret %0" BUG_STR(1) \ >> + : : "i" (BUGFRAME_run_fn), \ >> + "i" (fn) ) >> > > > > > On Wed, Feb 24, 2010 at 6:20 AM, Xen patchbot-3.4-testing > <patchbot-3.4-testing@xxxxxxxxxxxxxxxxxxx> wrote: >> # HG changeset patch >> # User Keir Fraser <keir.fraser@xxxxxxxxxx> >> # Date 1267009865 0 >> # Node ID 3ccf3e993d5ddc4e5dff15e464dc63d5485e984c >> # Parent cddd503fb25401fdaabe1344fdf5e060ca158e7a >> x86: Generalise BUGFRAME_dump mechanism to allow polled UART irq to >> get proper regs argument. >> >> Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> >> xen-unstable changeset: 20969:8cb6e7eff2ba >> xen-unstable date: Wed Feb 24 10:44:30 2010 +0000 >> --- >> xen/arch/x86/traps.c | 32 >> ++++++++++++++++++-------------- >> xen/drivers/acpi/utilities/utglobal.c | 1 + >> xen/drivers/char/ns16550.c | 22 +++++++++++++++++----- >> xen/include/asm-x86/bug.h | 9 +++++---- >> xen/include/asm-x86/processor.h | 1 + >> 5 files changed, 42 insertions(+), 23 deletions(-) >> >> diff -r cddd503fb254 -r 3ccf3e993d5d xen/arch/x86/traps.c >> --- a/xen/arch/x86/traps.c Wed Feb 24 11:10:09 2010 +0000 >> +++ b/xen/arch/x86/traps.c Wed Feb 24 11:11:05 2010 +0000 >> @@ -840,6 +840,7 @@ asmlinkage void do_invalid_op(struct cpu >> { >> struct bug_frame bug; >> struct bug_frame_str bug_str; >> + const void *p; >> const char *filename, *predicate, *eip = (char *)regs->eip; >> unsigned long fixup; >> int id, lineno; >> @@ -860,26 +861,29 @@ asmlinkage void do_invalid_op(struct cpu >> goto die; >> eip += sizeof(bug); >> >> - id = bug.id & 3; >> - >> - if ( id == BUGFRAME_dump ) >> - { >> - show_execution_state(regs); >> - regs->eip = (unsigned long)eip; >> - return; >> - } >> - >> - /* WARN, BUG or ASSERT: decode the filename pointer and line number. */ >> + /* Decode first pointer argument. */ >> if ( !is_kernel(eip) || >> __copy_from_user(&bug_str, eip, sizeof(bug_str)) || >> (bug_str.mov != 0xbc) ) >> goto die; >> - filename = bug_str(bug_str, eip); >> + p = bug_str(bug_str, eip); >> + if ( !is_kernel(p) ) >> + goto die; >> eip += sizeof(bug_str); >> >> - if ( !is_kernel(filename) ) >> - filename = "<unknown>"; >> - lineno = bug.id >> 2; >> + id = bug.id & 3; >> + >> + if ( id == BUGFRAME_run_fn ) >> + { >> + const void (*fn)(struct cpu_user_regs *) = p; >> + (*fn)(regs); >> + regs->eip = (unsigned long)eip; >> + return; >> + } >> + >> + /* WARN, BUG or ASSERT: decode the filename pointer and line number. */ >> + filename = p; >> + lineno = bug.id >> 2; >> >> if ( id == BUGFRAME_warn ) >> { >> diff -r cddd503fb254 -r 3ccf3e993d5d xen/drivers/acpi/utilities/utglobal.c >> --- a/xen/drivers/acpi/utilities/utglobal.c Wed Feb 24 11:10:09 2010 >> +0000 >> +++ b/xen/drivers/acpi/utilities/utglobal.c Wed Feb 24 11:11:05 2010 >> +0000 >> @@ -45,6 +45,7 @@ >> >> #include <xen/config.h> >> #include <xen/lib.h> >> +#include <asm/processor.h> >> #include <acpi/acpi.h> >> #include <acpi/acnamesp.h> >> >> diff -r cddd503fb254 -r 3ccf3e993d5d xen/drivers/char/ns16550.c >> --- a/xen/drivers/char/ns16550.c Wed Feb 24 11:10:09 2010 +0000 >> +++ b/xen/drivers/char/ns16550.c Wed Feb 24 11:11:05 2010 +0000 >> @@ -144,11 +144,13 @@ static void ns16550_interrupt( >> } >> } >> >> -static void ns16550_poll(void *data) >> -{ >> - struct serial_port *port = data; >> - struct ns16550 *uart = port->uart; >> - struct cpu_user_regs *regs = guest_cpu_user_regs(); >> +/* Safe: ns16550_poll() runs in softirq context so not reentrant on a given >> CPU. */ >> +static DEFINE_PER_CPU(struct serial_port *, poll_port); >> + >> +static void __ns16550_poll(struct cpu_user_regs *regs) >> +{ >> + struct serial_port *port = this_cpu(poll_port); >> + struct ns16550 *uart = port->uart; >> >> if ( uart->intr_works ) >> return; /* Interrupts work - no more polling */ >> @@ -166,6 +168,16 @@ static void ns16550_poll(void *data) >> serial_tx_interrupt(port, regs); >> >> set_timer(&uart->timer, NOW() + MILLISECS(uart->timeout_ms)); >> +} >> + >> +static void ns16550_poll(void *data) >> +{ >> + this_cpu(poll_port) = data; >> +#ifdef run_in_exception_handler >> + run_in_exception_handler(__ns16550_poll); >> +#else >> + __ns16550_poll(guest_cpu_user_regs()); >> +#endif >> } >> >> static int ns16550_tx_empty(struct serial_port *port) >> diff -r cddd503fb254 -r 3ccf3e993d5d xen/include/asm-x86/bug.h >> --- a/xen/include/asm-x86/bug.h Wed Feb 24 11:10:09 2010 +0000 >> +++ b/xen/include/asm-x86/bug.h Wed Feb 24 11:11:05 2010 +0000 >> @@ -13,15 +13,16 @@ struct bug_frame { >> unsigned short id; /* BUGFRAME_??? */ >> } __attribute__((packed)); >> >> -#define BUGFRAME_dump 0 >> +#define BUGFRAME_run_fn 0 >> #define BUGFRAME_warn 1 >> #define BUGFRAME_bug 2 >> #define BUGFRAME_assert 3 >> >> -#define dump_execution_state() \ >> +#define run_in_exception_handler(fn) \ >> asm volatile ( \ >> - "ud2 ; ret $0" \ >> - : : "i" (BUGFRAME_dump) ) >> + "ud2 ; ret %0" BUG_STR(1) \ >> + : : "i" (BUGFRAME_run_fn), \ >> + "i" (fn) ) >> >> #define WARN() \ >> asm volatile ( \ >> diff -r cddd503fb254 -r 3ccf3e993d5d xen/include/asm-x86/processor.h >> --- a/xen/include/asm-x86/processor.h Wed Feb 24 11:10:09 2010 +0000 >> +++ b/xen/include/asm-x86/processor.h Wed Feb 24 11:11:05 2010 +0000 >> @@ -532,6 +532,7 @@ void show_stack_overflow(unsigned int cp >> void show_stack_overflow(unsigned int cpu, unsigned long esp); >> void show_registers(struct cpu_user_regs *regs); >> void show_execution_state(struct cpu_user_regs *regs); >> +#define dump_execution_state() >> run_in_exception_handler(show_execution_state) >> void show_page_walk(unsigned long addr); >> asmlinkage void fatal_trap(int trapnr, struct cpu_user_regs *regs); >> >> >> _______________________________________________ >> Xen-changelog mailing list >> Xen-changelog@xxxxxxxxxxxxxxxxxxx >> http://lists.xensource.com/xen-changelog >> > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |