diff mbox

[Xen-devel] xen/arm: Panic when we receive an unexpected trap

Message ID 1403037868-18158-1-git-send-email-julien.grall@linaro.org
State Accepted, archived
Headers show

Commit Message

Julien Grall June 17, 2014, 8:44 p.m. UTC
The current implementation of do_unexpected_trap make Xen spin forever
on the current physical CPU. This may lead to stall guests VCPU and print
unhelpful message (RCU stall...).

Usually when Xen receives an unexpected trap, it means that something goes
wrong either in the hypervisor or in the CPU. In this case we should
directly panic to also stop the other CPUs.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
---
 xen/arch/arm/traps.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Ian Campbell June 18, 2014, 4:02 p.m. UTC | #1
On Tue, 2014-06-17 at 21:44 +0100, Julien Grall wrote:
> The current implementation of do_unexpected_trap make Xen spin forever
> on the current physical CPU. This may lead to stall guests VCPU and print
> unhelpful message (RCU stall...).
> 
> Usually when Xen receives an unexpected trap, it means that something goes
> wrong either in the hypervisor or in the CPU. In this case we should
> directly panic to also stop the other CPUs.
> 
> Signed-off-by: Julien Grall <julien.grall@linaro.org>

Ack + applied.

> ---
>  xen/arch/arm/traps.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
> index ac3fc70..0abb6ff 100644
> --- a/xen/arch/arm/traps.c
> +++ b/xen/arch/arm/traps.c
> @@ -999,7 +999,7 @@ void do_unexpected_trap(const char *msg, struct cpu_user_regs *regs)
>  {
>      printk("CPU%d: Unexpected Trap: %s\n", smp_processor_id(), msg);
>      show_execution_state(regs);
> -    while(1);
> +    panic("CPU%d: Unexpected Trap: %s\n", smp_processor_id(), msg);
>  }
>  
>  typedef register_t (*arm_hypercall_fn_t)(
Julien Grall June 18, 2014, 4:08 p.m. UTC | #2
On 06/18/2014 05:02 PM, Ian Campbell wrote:
> On Tue, 2014-06-17 at 21:44 +0100, Julien Grall wrote:
>> The current implementation of do_unexpected_trap make Xen spin forever
>> on the current physical CPU. This may lead to stall guests VCPU and print
>> unhelpful message (RCU stall...).
>>
>> Usually when Xen receives an unexpected trap, it means that something goes
>> wrong either in the hypervisor or in the CPU. In this case we should
>> directly panic to also stop the other CPUs.
>>
>> Signed-off-by: Julien Grall <julien.grall@linaro.org>
> 
> Ack + applied.

Thanks, I think this patch is a good candidate for backporting on Xen 4.4

It will avoid Xen to try to continue running when an unexpected trap occurs.

Regards,
Ian Campbell June 18, 2014, 4:41 p.m. UTC | #3
On Wed, 2014-06-18 at 17:08 +0100, Julien Grall wrote:
> On 06/18/2014 05:02 PM, Ian Campbell wrote:
> > On Tue, 2014-06-17 at 21:44 +0100, Julien Grall wrote:
> >> The current implementation of do_unexpected_trap make Xen spin forever
> >> on the current physical CPU. This may lead to stall guests VCPU and print
> >> unhelpful message (RCU stall...).
> >>
> >> Usually when Xen receives an unexpected trap, it means that something goes
> >> wrong either in the hypervisor or in the CPU. In this case we should
> >> directly panic to also stop the other CPUs.
> >>
> >> Signed-off-by: Julien Grall <julien.grall@linaro.org>
> > 
> > Ack + applied.
> 
> Thanks, I think this patch is a good candidate for backporting on Xen 4.4

Noted.

> 
> It will avoid Xen to try to continue running when an unexpected trap occurs.
> 
> Regards,
>
diff mbox

Patch

diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
index ac3fc70..0abb6ff 100644
--- a/xen/arch/arm/traps.c
+++ b/xen/arch/arm/traps.c
@@ -999,7 +999,7 @@  void do_unexpected_trap(const char *msg, struct cpu_user_regs *regs)
 {
     printk("CPU%d: Unexpected Trap: %s\n", smp_processor_id(), msg);
     show_execution_state(regs);
-    while(1);
+    panic("CPU%d: Unexpected Trap: %s\n", smp_processor_id(), msg);
 }
 
 typedef register_t (*arm_hypercall_fn_t)(