[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH RFC 6/6] xen: Add backtrace for serious issues.
From: |
Stefano Stabellini |
Subject: |
Re: [Qemu-devel] [PATCH RFC 6/6] xen: Add backtrace for serious issues. |
Date: |
Wed, 1 Jul 2015 14:06:30 +0100 |
User-agent: |
Alpine 2.02 (DEB 1266 2009-07-14) |
On Mon, 29 Jun 2015, Konrad Rzeszutek Wilk wrote:
> When debugging issues that caused the emulator to kill itself
> or skipping certain operations (unable to write to host
> registers) an stack trace will most definitly aid in debugging
> the problem.
>
> As such this patch uses the most basic backtrace to print out
> details.
>
> Signed-off-by: Konrad Rzeszutek Wilk <address@hidden>
I think it could be useful, but it cannot be done as a xen-hvm.c thing.
It should be somewhere generic, maybe under util? Stefan, any
suggestions?
> hw/xen/xen_pt.c | 3 +++
> include/hw/xen/xen_common.h | 1 +
> xen-hvm.c | 16 ++++++++++++++++
> 3 files changed, 20 insertions(+)
>
> diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
> index ea1ceda..1d256b9 100644
> --- a/hw/xen/xen_pt.c
> +++ b/hw/xen/xen_pt.c
> @@ -407,6 +407,7 @@ out:
>
> if (rc < 0) {
> XEN_PT_ERR(d, "xen_host_pci_set_block failed. return value:
> %d.\n", rc);
> + xen_dump_stack();
> }
> }
> }
> @@ -421,6 +422,7 @@ static uint64_t xen_pt_bar_read(void *o, hwaddr addr,
> * misconfiguration of the IOMMU. */
> XEN_PT_ERR(d, "Should not read BAR through QEMU. @0x"TARGET_FMT_plx"\n",
> addr);
> + xen_dump_stack();
> return 0;
> }
> static void xen_pt_bar_write(void *o, hwaddr addr, uint64_t val,
> @@ -430,6 +432,7 @@ static void xen_pt_bar_write(void *o, hwaddr addr,
> uint64_t val,
> /* Same comment as xen_pt_bar_read function */
> XEN_PT_ERR(d, "Should not write BAR through QEMU. @0x"TARGET_FMT_plx"\n",
> addr);
> + xen_dump_stack();
> }
>
> static const MemoryRegionOps ops = {
> diff --git a/include/hw/xen/xen_common.h b/include/hw/xen/xen_common.h
> index 38f29fb..3983cfb 100644
> --- a/include/hw/xen/xen_common.h
> +++ b/include/hw/xen/xen_common.h
> @@ -165,6 +165,7 @@ void destroy_hvm_domain(bool reboot);
>
> /* shutdown/destroy current domain because of an error */
> void xen_shutdown_fatal_error(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> +void xen_dump_stack(void);
>
> #ifdef HVM_PARAM_VMPORT_REGS_PFN
> static inline int xen_get_vmport_regs_pfn(XenXC xc, domid_t dom,
> diff --git a/xen-hvm.c b/xen-hvm.c
> index a92bc14..8bf4a57 100644
> --- a/xen-hvm.c
> +++ b/xen-hvm.c
> @@ -10,6 +10,7 @@
>
> #include <sys/mman.h>
>
> +#include <execinfo.h>
> #include "hw/pci/pci.h"
> #include "hw/i386/pc.h"
> #include "hw/xen/xen_common.h"
> @@ -1328,6 +1329,20 @@ void xen_register_framebuffer(MemoryRegion *mr)
> framebuffer = mr;
> }
>
> +void xen_dump_stack(void)
> +{
> + int nptrs;
> +#define SIZE 1024
> + void *buffer[SIZE];
> +
> + nptrs = backtrace(buffer, SIZE);
> + if (!nptrs)
> + return;
> +
> + backtrace_symbols_fd(buffer, nptrs, STDERR_FILENO);
> +#undef SIZE
> +}
> +
> void xen_shutdown_fatal_error(const char *fmt, ...)
> {
> va_list ap;
> @@ -1335,6 +1350,7 @@ void xen_shutdown_fatal_error(const char *fmt, ...)
> va_start(ap, fmt);
> vfprintf(stderr, fmt, ap);
> va_end(ap);
> + xen_dump_stack();
> fprintf(stderr, "Will destroy the domain.\n");
> /* destroy the domain */
> qemu_system_shutdown_request();
> --
> 2.1.0
>
- Re: [Qemu-devel] [PATCH RFC 6/6] xen: Add backtrace for serious issues.,
Stefano Stabellini <=