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