[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.


  • To: xen-changelog@xxxxxxxxxxxxxxxxxxx
  • From: Xen patchbot-unstable <patchbot@xxxxxxx>
  • Date: Wed, 16 Jan 2013 08:22:26 +0000
  • Delivery-date: Wed, 16 Jan 2013 08:25:18 +0000
  • List-id: "Change log for Mercurial \(receive only\)" <xen-changelog.lists.xen.org>

# 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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.