Module Name:    src
Committed By:   pooka
Date:           Wed Apr 22 16:01:07 UTC 2015

Modified Files:
        src/sys/rump/librump/rumpkern: scheduler.c

Log Message:
track cpu_onproc


To generate a diff of this commit:
cvs rdiff -u -r1.39 -r1.40 src/sys/rump/librump/rumpkern/scheduler.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/rump/librump/rumpkern/scheduler.c
diff -u src/sys/rump/librump/rumpkern/scheduler.c:1.39 src/sys/rump/librump/rumpkern/scheduler.c:1.40
--- src/sys/rump/librump/rumpkern/scheduler.c:1.39	Sat Jun  7 11:08:09 2014
+++ src/sys/rump/librump/rumpkern/scheduler.c	Wed Apr 22 16:01:07 2015
@@ -1,4 +1,4 @@
-/*      $NetBSD: scheduler.c,v 1.39 2014/06/07 11:08:09 rmind Exp $	*/
+/*      $NetBSD: scheduler.c,v 1.40 2015/04/22 16:01:07 pooka Exp $	*/
 
 /*
  * Copyright (c) 2010, 2011 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: scheduler.c,v 1.39 2014/06/07 11:08:09 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: scheduler.c,v 1.40 2015/04/22 16:01:07 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -280,6 +280,7 @@ void
 rump_schedule_cpu_interlock(struct lwp *l, void *interlock)
 {
 	struct rumpcpu *rcpu;
+	struct cpu_info *ci;
 	void *old;
 	bool domigrate;
 	bool bound = l->l_pflag & LP_BOUND;
@@ -354,12 +355,19 @@ rump_schedule_cpu_interlock(struct lwp *
 	rumpuser_mutex_exit(rcpu->rcpu_mtx);
 
  fastlane:
-	l->l_cpu = l->l_target_cpu = rcpu->rcpu_ci;
+	ci = rcpu->rcpu_ci;
+	l->l_cpu = l->l_target_cpu = ci;
 	l->l_mutex = rcpu->rcpu_ci->ci_schedstate.spc_mutex;
 	l->l_ncsw++;
 	l->l_stat = LSONPROC;
 
-	rcpu->rcpu_ci->ci_curlwp = l;
+	/*
+	 * No interrupts, so ci_curlwp === cpu_onproc.
+	 * Okay, we could make an attempt to not set cpu_onproc
+	 * in the case that an interrupt is scheduled immediately
+	 * after a user proc, but leave that for later.
+	 */
+	ci->ci_curlwp = ci->ci_data.cpu_onproc = l;
 }
 
 void
@@ -431,7 +439,7 @@ rump_unschedule_cpu1(struct lwp *l, void
 	void *old;
 
 	ci = l->l_cpu;
-	ci->ci_curlwp = NULL;
+	ci->ci_curlwp = ci->ci_data.cpu_onproc = NULL;
 	rcpu = &rcpu_storage[ci-&rump_cpus[0]];
 
 	KASSERT(rcpu->rcpu_ci == ci);

Reply via email to