Module Name: src Committed By: bouyer Date: Sat Jan 16 17:41:07 UTC 2010
Modified Files: src/sys/kern [netbsd-5-0]: kern_softint.c Log Message: Pull up following revision(s) (requested by rmind in ticket #1241): sys/kern/kern_softint.c: revision 1.30 softint_execute: release/re-acquire kernel-lock depending on SOFTINT_MPSAFE flag. Keeping it held for MP-safe cases break the lock order assumptions. Per discussion with <martin>. To generate a diff of this commit: cvs rdiff -u -r1.23.4.2 -r1.23.4.2.2.1 src/sys/kern/kern_softint.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_softint.c diff -u src/sys/kern/kern_softint.c:1.23.4.2 src/sys/kern/kern_softint.c:1.23.4.2.2.1 --- src/sys/kern/kern_softint.c:1.23.4.2 Mon Feb 2 03:40:11 2009 +++ src/sys/kern/kern_softint.c Sat Jan 16 17:41:07 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_softint.c,v 1.23.4.2 2009/02/02 03:40:11 snj Exp $ */ +/* $NetBSD: kern_softint.c,v 1.23.4.2.2.1 2010/01/16 17:41:07 bouyer Exp $ */ /*- * Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. @@ -176,7 +176,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_softint.c,v 1.23.4.2 2009/02/02 03:40:11 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_softint.c,v 1.23.4.2.2.1 2010/01/16 17:41:07 bouyer Exp $"); #include <sys/param.h> #include <sys/malloc.h> @@ -527,7 +527,12 @@ splx(s); /* Run the handler. */ - if ((sh->sh_flags & SOFTINT_MPSAFE) == 0 && !havelock) { + if (sh->sh_flags & SOFTINT_MPSAFE) { + if (havelock) { + KERNEL_UNLOCK_ONE(l); + havelock = false; + } + } else if (!havelock) { KERNEL_LOCK(1, l); havelock = true; }