From owner-svn-src-head@freebsd.org Sat Jan 4 19:29:26 2020 Return-Path: Delivered-To: svn-src-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7DCE41F1BD3; Sat, 4 Jan 2020 19:29:26 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 47qsKL2p7Fz4Wbd; Sat, 4 Jan 2020 19:29:26 +0000 (UTC) (envelope-from jeff@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 5B5C819B37; Sat, 4 Jan 2020 19:29:26 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 004JTQov032619; Sat, 4 Jan 2020 19:29:26 GMT (envelope-from jeff@FreeBSD.org) Received: (from jeff@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 004JTQ7M032617; Sat, 4 Jan 2020 19:29:26 GMT (envelope-from jeff@FreeBSD.org) Message-Id: <202001041929.004JTQ7M032617@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jeff set sender to jeff@FreeBSD.org using -f From: Jeff Roberson Date: Sat, 4 Jan 2020 19:29:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r356353 - head/sys/vm X-SVN-Group: head X-SVN-Commit-Author: jeff X-SVN-Commit-Paths: head/sys/vm X-SVN-Commit-Revision: 356353 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.29 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: Sat, 04 Jan 2020 19:29:26 -0000 Author: jeff Date: Sat Jan 4 19:29:25 2020 New Revision: 356353 URL: https://svnweb.freebsd.org/changeset/base/356353 Log: Fix an assertion introduced in r356348. On architectures without UMA_MD_SMALL_ALLOC vmem has a more complicated startup sequence that violated the new assert. Resolve this by rewriting the COLD asserts to look at the per-cpu allocation counts for evidence of api activity. Discussed with: rlibby Reviewed by: markj Reported by: lwhsu Modified: head/sys/vm/uma_core.c head/sys/vm/uma_int.h Modified: head/sys/vm/uma_core.c ============================================================================== --- head/sys/vm/uma_core.c Sat Jan 4 18:59:46 2020 (r356352) +++ head/sys/vm/uma_core.c Sat Jan 4 19:29:25 2020 (r356353) @@ -294,7 +294,10 @@ static int sysctl_handle_uma_zone_flags(SYSCTL_HANDLER static int sysctl_handle_uma_slab_efficiency(SYSCTL_HANDLER_ARGS); static int sysctl_handle_uma_zone_items(SYSCTL_HANDLER_ARGS); +static uint64_t uma_zone_get_allocs(uma_zone_t zone); + #ifdef INVARIANTS +static uint64_t uma_keg_get_allocs(uma_keg_t zone); static inline struct noslabbits *slab_dbg_bits(uma_slab_t slab, uma_keg_t keg); static bool uma_dbg_kskip(uma_keg_t keg, void *mem); @@ -4184,6 +4187,22 @@ uma_zone_get_frees(uma_zone_t zone) return (nitems); } + +#ifdef INVARIANTS +/* Used only for KEG_ASSERT_COLD(). */ +static uint64_t +uma_keg_get_allocs(uma_keg_t keg) +{ + uma_zone_t z; + uint64_t nitems; + + nitems = 0; + LIST_FOREACH(z, &keg->uk_zones, uz_link) + nitems += uma_zone_get_allocs(z); + + return (nitems); +} +#endif /* See uma.h */ void Modified: head/sys/vm/uma_int.h ============================================================================== --- head/sys/vm/uma_int.h Sat Jan 4 18:59:46 2020 (r356352) +++ head/sys/vm/uma_int.h Sat Jan 4 19:29:25 2020 (r356353) @@ -305,7 +305,7 @@ typedef struct uma_keg * uma_keg_t; #ifdef _KERNEL #define KEG_ASSERT_COLD(k) \ - KASSERT((k)->uk_domain[0].ud_pages == 0, \ + KASSERT(uma_keg_get_allocs((k)) == 0, \ ("keg %s initialization after use.", (k)->uk_name)) /* @@ -529,7 +529,7 @@ struct uma_zone { #define UZ_ITEMS_SLEEPER (1LL << UZ_ITEMS_SLEEPER_SHIFT) #define ZONE_ASSERT_COLD(z) \ - KASSERT((z)->uz_bkt_count == 0, \ + KASSERT(uma_zone_get_allocs((z)) == 0, \ ("zone %s initialization after use.", (z)->uz_name)) #undef UMA_ALIGN