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);