aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include
diff options
context:
space:
mode:
authorAndrew Cooper <andrew.cooper3@citrix.com>2013-10-04 12:58:20 +0200
committerJan Beulich <jbeulich@suse.com>2013-10-04 12:58:20 +0200
commit8e0da8c07f4f80e14314977a11f738bd74a5b62b (patch)
treed3452ba8506a6d9bfe12a412489215dbaa24c316 /xen/include
parentfe06795e82922f8d8c8910da545ef1215cbb1b8c (diff)
downloadxen-8e0da8c07f4f80e14314977a11f738bd74a5b62b.tar.gz
xen-8e0da8c07f4f80e14314977a11f738bd74a5b62b.tar.bz2
xen-8e0da8c07f4f80e14314977a11f738bd74a5b62b.zip
x86: Improve information from domain_crash_synchronous
As it currently stands, the string "domain_crash_sync called from entry.S" is not helpful at identifying why the domain was crashed, and a debug build of Xen doesn't help the matter This patch improves the information printed, by pointing to where the crash decision was made. Specific improvements include: * Moving the ascii string "domain_crash_sync called from entry.S\n" away from some semi-hot code cache lines. * Moving the printk into C code (especially as this_cpu() is miserable to use in assembly code) * Undo the previous confusing situation of having the domain_crash_synchronous() as a macro in C code, yet a global symbol in assembly code. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/include')
-rw-r--r--xen/include/asm-x86/asm_defns.h4
-rw-r--r--xen/include/xen/sched.h7
2 files changed, 11 insertions, 0 deletions
diff --git a/xen/include/asm-x86/asm_defns.h b/xen/include/asm-x86/asm_defns.h
index 25032d55eb..a4601bab32 100644
--- a/xen/include/asm-x86/asm_defns.h
+++ b/xen/include/asm-x86/asm_defns.h
@@ -35,10 +35,14 @@ void ret_from_intr(void);
#ifdef __ASSEMBLY__
#define UNLIKELY_START(cond, tag) \
+ .Ldispatch.tag: \
j##cond .Lunlikely.tag; \
.subsection 1; \
.Lunlikely.tag:
+#define UNLIKELY_DISPATCH_LABEL(tag) \
+ .Ldispatch.tag
+
#define UNLIKELY_DONE(cond, tag) \
j##cond .Llikely.tag
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index 0013a8d8ce..1765e18269 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -547,6 +547,13 @@ void __domain_crash_synchronous(void) __attribute__((noreturn));
__domain_crash_synchronous(); \
} while (0)
+/*
+ * Called from assembly code, with an optional address to help indicate why
+ * the crash occured. If addr is 0, look up address from last extable
+ * redirection.
+ */
+void asm_domain_crash_synchronous(unsigned long addr) __attribute__((noreturn));
+
#define set_current_state(_s) do { current->state = (_s); } while (0)
void scheduler_init(void);
int sched_init_vcpu(struct vcpu *v, unsigned int processor);