svn commit: r184071 - head/sys/i386/xen

Kip Macy kmacy at FreeBSD.org
Mon Oct 20 05:42:38 UTC 2008


Author: kmacy
Date: Mon Oct 20 05:42:38 2008
New Revision: 184071
URL: http://svn.freebsd.org/changeset/base/184071

Log:
  Import interrupt management defines from latest xenlinux

Modified:
  head/sys/i386/xen/exception.s

Modified: head/sys/i386/xen/exception.s
==============================================================================
--- head/sys/i386/xen/exception.s	Mon Oct 20 05:12:50 2008	(r184070)
+++ head/sys/i386/xen/exception.s	Mon Oct 20 05:42:38 2008	(r184071)
@@ -37,18 +37,37 @@
 #include <machine/psl.h>
 #include <machine/trap.h>
 
-
 #include "assym.s"
 
 #define	SEL_RPL_MASK	0x0002
 #define __HYPERVISOR_iret	23
 	
 /* Offsets into shared_info_t. */
+
 #define evtchn_upcall_pending /* 0 */
 #define evtchn_upcall_mask       1
-#define XEN_BLOCK_EVENTS(reg)     movb $1,evtchn_upcall_mask(reg)
-#define XEN_UNBLOCK_EVENTS(reg)   movb $0,evtchn_upcall_mask(reg)
-#define XEN_TEST_PENDING(reg)     testb $0x1,evtchn_upcall_pending(reg)
+
+#define	sizeof_vcpu_shift	6
+
+		
+#ifdef SMP
+#ifdef notyet	
+#define GET_VCPU_INFO		movl TI_cpu(%ebp),reg			; \
+				shl  $sizeof_vcpu_shift,reg		; \
+				addl HYPERVISOR_shared_info,reg
+#else
+#endif	
+
+#define GET_VCPU_INFO(reg)	movl HYPERVISOR_shared_info,reg
+#endif
+
+#define __DISABLE_INTERRUPTS(reg)	movb $1,evtchn_upcall_mask(reg)
+#define __ENABLE_INTERRUPTS(reg)	movb $0,evtchn_upcall_mask(reg)
+#define DISABLE_INTERRUPTS(reg)	GET_VCPU_INFO(reg)			; \
+				__DISABLE_INTERRUPTS(reg)
+#define ENABLE_INTERRUPTS(reg)	GET_VCPU_INFO(reg)			; \
+				__ENABLE_INTERRUPTS(reg)
+#define __TEST_PENDING(reg)	testb $0xFF,evtchn_upcall_pending(reg)
 
 #define POPA \
         popl %edi; \
@@ -163,8 +182,7 @@ call_evtchn_upcall:
 
 	
 hypervisor_callback_pending:
-	movl	HYPERVISOR_shared_info,%esi
-	XEN_BLOCK_EVENTS(%esi)				/*	cli */	
+	DISABLE_INTERRUPTS(%esi)				/*	cli */	
 	jmp	10b
 
 	/*
@@ -338,12 +356,11 @@ doreti_ast:
 	 * interrupts provides sufficient locking even in the SMP case,
 	 * since we will be informed of any new ASTs by an IPI.
 	 */
-	movl	HYPERVISOR_shared_info,%esi
-	XEN_BLOCK_EVENTS(%esi)				/*	cli */
+	DISABLE_INTERRUPTS(%esi)				/*	cli */
 	movl	PCPU(CURTHREAD),%eax
 	testl	$TDF_ASTPENDING | TDF_NEEDRESCHED,TD_FLAGS(%eax)
 	je	doreti_exit
-	XEN_UNBLOCK_EVENTS(%esi)	/* sti */
+	ENABLE_INTERRUPTS(%esi)	/* sti */
 	pushl	%esp			/* pass a pointer to the trapframe */
 	call	ast
 	add	$4,%esp
@@ -357,12 +374,11 @@ doreti_ast:
 	 *	registers.  The fault is handled in trap.c.
 	 */
 doreti_exit:
-	movl	HYPERVISOR_shared_info,%esi
-	XEN_UNBLOCK_EVENTS(%esi) # reenable event callbacks (sti)
+	ENABLE_INTERRUPTS(%esi) # reenable event callbacks (sti)
 
 	.globl	scrit
 scrit:
-	XEN_TEST_PENDING(%esi)
+	__TEST_PENDING(%esi)
         jnz	hypervisor_callback_pending	/* More to go  */
 
 	MEXITCOUNT


More information about the svn-src-head mailing list