|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86: Assert !in_atomic() before exiting to guest context.
# HG changeset patch
# User Keir Fraser <keir@xxxxxxx>
# Date 1358171745 0
# Node ID e6f74afc78d26e0201c64d08b8a3ed089c2120ff
# Parent 5db9c4e12fbf1c1ae8d50d6e3676521c06b1183c
x86: Assert !in_atomic() before exiting to guest context.
Signed-off-by: Keir Fraser <keir@xxxxxxx>
---
diff -r 5db9c4e12fbf -r e6f74afc78d2 xen/arch/x86/hvm/svm/entry.S
--- a/xen/arch/x86/hvm/svm/entry.S Sun Jan 13 10:20:52 2013 +0000
+++ b/xen/arch/x86/hvm/svm/entry.S Mon Jan 14 13:55:45 2013 +0000
@@ -42,6 +42,7 @@
ENTRY(svm_asm_do_resume)
call svm_intr_assist
call_with_regs(nsvm_vcpu_switch)
+ ASSERT_NOT_IN_ATOMIC
get_current(bx)
CLGI
diff -r 5db9c4e12fbf -r e6f74afc78d2 xen/arch/x86/hvm/vmx/entry.S
--- a/xen/arch/x86/hvm/vmx/entry.S Sun Jan 13 10:20:52 2013 +0000
+++ b/xen/arch/x86/hvm/vmx/entry.S Mon Jan 14 13:55:45 2013 +0000
@@ -98,6 +98,7 @@ vmx_asm_vmexit_handler:
vmx_asm_do_vmentry:
call vmx_intr_assist
call nvmx_switch_guest
+ ASSERT_NOT_IN_ATOMIC
get_current(bx)
cli
diff -r 5db9c4e12fbf -r e6f74afc78d2 xen/arch/x86/x86_64/compat/entry.S
--- a/xen/arch/x86/x86_64/compat/entry.S Sun Jan 13 10:20:52 2013 +0000
+++ b/xen/arch/x86/x86_64/compat/entry.S Mon Jan 14 13:55:45 2013 +0000
@@ -92,6 +92,7 @@ compat_skip_clobber:
/* %rbx: struct vcpu */
ENTRY(compat_test_all_events)
+ ASSERT_NOT_IN_ATOMIC
cli # tests must not race interrupts
/*compat_test_softirqs:*/
movl VCPU_processor(%rbx),%eax
diff -r 5db9c4e12fbf -r e6f74afc78d2 xen/arch/x86/x86_64/entry.S
--- a/xen/arch/x86/x86_64/entry.S Sun Jan 13 10:20:52 2013 +0000
+++ b/xen/arch/x86/x86_64/entry.S Mon Jan 14 13:55:45 2013 +0000
@@ -190,6 +190,7 @@ skip_clobber:
/* %rbx: struct vcpu */
test_all_events:
+ ASSERT_NOT_IN_ATOMIC
cli # tests must not race interrupts
/*test_softirqs:*/
movl VCPU_processor(%rbx),%eax
diff -r 5db9c4e12fbf -r e6f74afc78d2 xen/common/preempt.c
--- a/xen/common/preempt.c Sun Jan 13 10:20:52 2013 +0000
+++ b/xen/common/preempt.c Mon Jan 14 13:55:45 2013 +0000
@@ -30,3 +30,9 @@ bool_t in_atomic(void)
{
return preempt_count() || in_irq() || !local_irq_is_enabled();
}
+
+/* asm helper */
+void bug_if_in_atomic(void)
+{
+ BUG_ON(in_atomic());
+}
diff -r 5db9c4e12fbf -r e6f74afc78d2 xen/include/asm-x86/asm_defns.h
--- a/xen/include/asm-x86/asm_defns.h Sun Jan 13 10:20:52 2013 +0000
+++ b/xen/include/asm-x86/asm_defns.h Mon Jan 14 13:55:45 2013 +0000
@@ -59,6 +59,14 @@ void ret_from_intr(void);
GET_STACK_BASE(reg); \
__GET_CURRENT(reg)
+#ifndef NDEBUG
+#define ASSERT_NOT_IN_ATOMIC \
+ sti; /* sometimes called with interrupts disabled: safe to enable */ \
+ call bug_if_in_atomic
+#else
+#define ASSERT_NOT_IN_ATOMIC
+#endif
+
#endif
#endif /* __X86_ASM_DEFNS_H__ */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |