Module Name: src Committed By: rmind Date: Sat Dec 18 01:13:37 UTC 2010
Modified Files: src/sys/kern: kern_synch.c Log Message: mi_switch: remove invalid assert and add a note that preemption/interrupt may happen while migrating LWP is set. Reported by Manuel Bouyer. To generate a diff of this commit: cvs rdiff -u -r1.284 -r1.285 src/sys/kern/kern_synch.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/kern_synch.c diff -u src/sys/kern/kern_synch.c:1.284 src/sys/kern/kern_synch.c:1.285 --- src/sys/kern/kern_synch.c:1.284 Tue Nov 2 15:17:37 2010 +++ src/sys/kern/kern_synch.c Sat Dec 18 01:13:36 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_synch.c,v 1.284 2010/11/02 15:17:37 pooka Exp $ */ +/* $NetBSD: kern_synch.c,v 1.285 2010/12/18 01:13:36 rmind Exp $ */ /*- * Copyright (c) 1999, 2000, 2004, 2006, 2007, 2008, 2009 @@ -69,7 +69,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_synch.c,v 1.284 2010/11/02 15:17:37 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_synch.c,v 1.285 2010/12/18 01:13:36 rmind Exp $"); #include "opt_kstack.h" #include "opt_perfctrs.h" @@ -654,9 +654,13 @@ l->l_stat = LSRUN; lwp_setlock(l, spc->spc_mutex); sched_enqueue(l, true); - /* Handle migration case */ - KASSERT(spc->spc_migrating == NULL); - if (l->l_target_cpu != NULL) { + /* + * Handle migration. Note that "migrating LWP" may + * be reset here, if interrupt/preemption happens + * early in idle LWP. + */ + if (l->l_target_cpu != NULL) { + KASSERT((l->l_pflag & LP_INTR) == 0); spc->spc_migrating = l; } } else