|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen: arm: increase priority of SGIs used as IPIs
On Tue, 2014-01-28 at 16:51 +0000, Ian Campbell wrote:
> Tested with "HACK: dump pcpu state keyhandler" which I'll post for
> completeness.
From 7975fb2a9a27e738d3b551fa2258d65a8c4b0d9a Mon Sep 17 00:00:00 2001
From: Ian Campbell <ian.campbell@xxxxxxxxxx>
Date: Tue, 28 Jan 2014 15:57:33 +0000
Subject: [PATCH] HACK: dump pcpu state keyhandler
---
xen/arch/arm/gic.c | 3 +++
xen/common/keyhandler.c | 20 ++++++++++++++++++++
xen/include/asm-arm/gic.h | 1 +
3 files changed, 24 insertions(+)
diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
index e6257a7..dcf9cd4 100644
--- a/xen/arch/arm/gic.c
+++ b/xen/arch/arm/gic.c
@@ -811,6 +811,9 @@ static void do_sgi(struct cpu_user_regs *regs, int
othercpu, enum gic_sgi sgi)
case GIC_SGI_CALL_FUNCTION:
smp_call_function_interrupt();
break;
+ case GIC_SGI_DUMP_HOST_STATE:
+ show_execution_state(regs);
+ break;
default:
panic("Unhandled SGI %d on CPU%d", sgi, smp_processor_id());
break;
diff --git a/xen/common/keyhandler.c b/xen/common/keyhandler.c
index 8e4b3f8..52f0916 100644
--- a/xen/common/keyhandler.c
+++ b/xen/common/keyhandler.c
@@ -20,6 +20,7 @@
#include <xen/init.h>
#include <asm/debugger.h>
#include <asm/div64.h>
+#include <asm/gic.h>
static struct keyhandler *key_table[256];
static unsigned char keypress_key;
@@ -149,6 +150,24 @@ static struct keyhandler dump_registers_keyhandler = {
.desc = "dump registers"
};
+static void dump_pcpus(unsigned char key, struct cpu_user_regs *regs)
+{
+ printk("'%c' pressed -> dumping PCPU state\n\n", key);
+
+ send_SGI_self(GIC_SGI_DUMP_HOST_STATE);
+
+ dsb(); /* Wait for SGI write to occur, or else it might be delayed
+ * until later, meaning we don't make a point of having an
+ * IPI interrupting an interrupt. */
+}
+
+static struct keyhandler dump_pcpus_keyhandler = {
+ .irq_callback = 1,
+ .diagnostic = 1,
+ .u.irq_fn = dump_pcpus,
+ .desc = "dump pcpus"
+};
+
static DECLARE_TASKLET(dump_dom0_tasklet, NULL, 0);
static void dump_dom0_action(unsigned long arg)
@@ -539,6 +558,7 @@ void __init initialize_keytable(void)
}
register_keyhandler('A', &toggle_alt_keyhandler);
register_keyhandler('d', &dump_registers_keyhandler);
+ register_keyhandler('P', &dump_pcpus_keyhandler);
register_keyhandler('h', &show_handlers_keyhandler);
register_keyhandler('q', &dump_domains_keyhandler);
register_keyhandler('r', &dump_runq_keyhandler);
diff --git a/xen/include/asm-arm/gic.h b/xen/include/asm-arm/gic.h
index 87f4298..9c6f9bb 100644
--- a/xen/include/asm-arm/gic.h
+++ b/xen/include/asm-arm/gic.h
@@ -183,6 +183,7 @@ enum gic_sgi {
GIC_SGI_EVENT_CHECK = 0,
GIC_SGI_DUMP_STATE = 1,
GIC_SGI_CALL_FUNCTION = 2,
+ GIC_SGI_DUMP_HOST_STATE = 3,
};
extern void send_SGI_mask(const cpumask_t *cpumask, enum gic_sgi sgi);
extern void send_SGI_one(unsigned int cpu, enum gic_sgi sgi);
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |