WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] Re: [Xen-changelog] [xen-3.4-testing] x86: Generalise BU

To: Mark Johnson <johnson.nh@xxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: Re: [Xen-devel] Re: [Xen-changelog] [xen-3.4-testing] x86: Generalise BUGFRAME_dump mechanism to allow polled UART irq to
From: Keir Fraser <keir.fraser@xxxxxxxxxxxxx>
Date: Wed, 24 Feb 2010 14:04:42 +0000
Cc:
Delivery-date: Wed, 24 Feb 2010 06:05:27 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <521a4d121002240525n39524bbds3149fcac8f373f13@xxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: Acq1VN+/pHXUSLufTCasDsyZNiiZAAABW/S5
Thread-topic: [Xen-devel] Re: [Xen-changelog] [xen-3.4-testing] x86: Generalise BUGFRAME_dump mechanism to allow polled UART irq to
User-agent: Microsoft-Entourage/12.23.0.091001
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