From owner-svn-src-head@freebsd.org Mon May 14 00:14:01 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DE05AFDC00A; Mon, 14 May 2018 00:14:01 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8488473B2C; Mon, 14 May 2018 00:14:01 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5FCC214AA6; Mon, 14 May 2018 00:14:01 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w4E0E1JO023240; Mon, 14 May 2018 00:14:01 GMT (envelope-from mmacy@FreeBSD.org) Received: (from mmacy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4E0E17W023239; Mon, 14 May 2018 00:14:01 GMT (envelope-from mmacy@FreeBSD.org) Message-Id: <201805140014.w4E0E17W023239@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmacy set sender to mmacy@FreeBSD.org using -f From: Matt Macy Date: Mon, 14 May 2018 00:14:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333595 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: mmacy X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 333595 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 May 2018 00:14:02 -0000 Author: mmacy Date: Mon May 14 00:14:00 2018 New Revision: 333595 URL: https://svnweb.freebsd.org/changeset/base/333595 Log: epoch(9): allow sx locks to be held across epoch_wait() The INVARIANTS checks in epoch_wait() were intended to prevent the block handler from returning with locks held. What it in fact did was preventing anything except Giant from being held across it. Check that the number of locks held has not changed instead. Approved by: sbruno@ Modified: head/sys/kern/subr_epoch.c Modified: head/sys/kern/subr_epoch.c ============================================================================== --- head/sys/kern/subr_epoch.c Sun May 13 23:56:43 2018 (r333594) +++ head/sys/kern/subr_epoch.c Mon May 14 00:14:00 2018 (r333595) @@ -469,7 +469,11 @@ epoch_wait(epoch_t epoch) int old_cpu; int old_pinned; u_char old_prio; +#ifdef INVARIANTS + int locks; + locks = curthread->td_locks; +#endif INIT_CHECK(epoch); WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL, @@ -506,9 +510,9 @@ epoch_wait(epoch_t epoch) /* restore thread priority */ sched_prio(td, old_prio); thread_unlock(td); - KASSERT(td->td_locks == 0, - ("%d locks held", td->td_locks)); PICKUP_GIANT(); + KASSERT(td->td_locks == locks, + ("%d residual locks held", td->td_locks - locks)); } void