Module Name:    src
Committed By:   martin
Date:           Tue Feb 19 11:20:17 UTC 2013

Modified Files:
        src/sys/kern: subr_xcall.c

Log Message:
Oops, accidently did not commit this part of pooka's change.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/kern/subr_xcall.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/subr_xcall.c
diff -u src/sys/kern/subr_xcall.c:1.13 src/sys/kern/subr_xcall.c:1.14
--- src/sys/kern/subr_xcall.c:1.13	Fri May 13 22:16:44 2011
+++ src/sys/kern/subr_xcall.c	Tue Feb 19 11:20:17 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_xcall.c,v 1.13 2011/05/13 22:16:44 rmind Exp $	*/
+/*	$NetBSD: subr_xcall.c,v 1.14 2013/02/19 11:20:17 martin Exp $	*/
 
 /*-
  * Copyright (c) 2007-2010 The NetBSD Foundation, Inc.
@@ -74,7 +74,7 @@
  */
  
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_xcall.c,v 1.13 2011/05/13 22:16:44 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_xcall.c,v 1.14 2013/02/19 11:20:17 martin Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -85,6 +85,10 @@ __KERNEL_RCSID(0, "$NetBSD: subr_xcall.c
 #include <sys/kthread.h>
 #include <sys/cpu.h>
 
+#ifdef _RUMPKERNEL
+#include "rump_private.h"
+#endif
+
 /* Cross-call state box. */
 typedef struct {
 	kmutex_t	xc_lock;
@@ -113,7 +117,6 @@ static struct evcnt	xc_broadcast_ev	__ca
 
 static void		xc_init(void);
 static void		xc_thread(void *);
-static void		xc_highpri_intr(void *);
 
 static inline uint64_t	xc_highpri(xcfunc_t, void *, void *, struct cpu_info *);
 static inline uint64_t	xc_lowpri(xcfunc_t, void *, void *, struct cpu_info *);
@@ -137,7 +140,7 @@ xc_init(void)
 	mutex_init(&xchi->xc_lock, MUTEX_DEFAULT, IPL_SOFTCLOCK);
 	cv_init(&xchi->xc_busy, "xchicv");
 	xc_sih = softint_establish(SOFTINT_CLOCK | SOFTINT_MPSAFE,
-	    xc_highpri_intr, NULL);
+	    xc__highpri_intr, NULL);
 	KASSERT(xc_sih != NULL);
 
 	evcnt_attach_dynamic(&xc_unicast_ev, EVCNT_TYPE_MISC, NULL,
@@ -329,23 +332,23 @@ xc_thread(void *cookie)
 void
 xc_ipi_handler(void)
 {
-	/* Executes xc_highpri_intr() via software interrupt. */
+	/* Executes xc__highpri_intr() via software interrupt. */
 	softint_schedule(xc_sih);
 }
 
 /*
- * xc_highpri_intr:
+ * xc__highpri_intr:
  *
  *	A software interrupt handler for high priority calls.
  */
-static void
-xc_highpri_intr(void *dummy)
+void
+xc__highpri_intr(void *dummy)
 {
 	xc_state_t *xc = &xc_high_pri;
 	void *arg1, *arg2;
 	xcfunc_t func;
 
-	KASSERT(cpu_softintr_p());
+	KASSERT(!cpu_intr_p());
 	/*
 	 * Lock-less fetch of function and its arguments.
 	 * Safe since it cannot change at this point.
@@ -396,6 +399,9 @@ xc_highpri(xcfunc_t func, void *arg1, vo
 	 * Note: it will handle the local CPU case.
 	 */
 
+#ifdef _RUMPKERNEL
+	rump_xc_highpri(ci);
+#else
 #ifdef MULTIPROCESSOR
 	kpreempt_disable();
 	if (curcpu() == ci) {
@@ -414,6 +420,7 @@ xc_highpri(xcfunc_t func, void *arg1, vo
 	KASSERT(curcpu() == ci);
 	xc_ipi_handler();
 #endif
+#endif
 
 	/* Indicate a high priority ticket. */
 	return (where | XC_PRI_BIT);

Reply via email to