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

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

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] Re: [Xen-changelog] [xen-3.4-testing] x86: Generalise BUGFRAME_dump mechanism to allow polled UART irq to
From: Mark Johnson <johnson.nh@xxxxxxxxx>
Date: Wed, 24 Feb 2010 08:25:07 -0500
Delivery-date: Wed, 24 Feb 2010 05:25:38 -0800
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=SVTBSvxukE7MiyKwmoCWgU5lu+Bn3DWp3vX0SqruDPg=; b=tPX0YhtLQ1BldrzxwVTShZ00P9g/hP13OVV6l6LM5kVN//LKPN//kDMDyB2n4ot5x8 8SxsQ2dImMa0XC/Eq6kkkKi/ILcSxXshms8eOAzt7tbO0tx93pSNfWpVhpdr/Tc82Zov PSQgAkgRv4sfLis76IvJddgZHSvJLULlEzz7c=
Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=PNHqdOyDNTCu3Z8Yt/AXZ2NE+tzdyihvCssA5Ftvhiv0YIubEawbLv+wLZ8EIc1fum m3oOAogzsJ/Hhsn6igH72gM7E7dcLLQVGwg5q/eL4pzFiElhuR6TUxxa10SvTaZefl5c tM1NJBEU41FjVxvUDKwnORD5FH+0vo0NpxIyQ=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <201002241120.o1OBKqR6023638@xxxxxxxxxxxxxxxxxxxxx>
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>
References: <201002241120.o1OBKqR6023638@xxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
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