From nobody Fri Jan 9 14:16:17 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4dnkN16LJVz62YjM for ; Fri, 09 Jan 2026 14:16:17 +0000 (UTC) (envelope-from git@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) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dnkN15CbPz3YNy for ; Fri, 09 Jan 2026 14:16:17 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1767968177; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Ziqk6iy1b/n3wWoSuu66i6Pl9qpXfUq5JZjqG9/Aq+Y=; b=BEZNu4nCsT30lmPNDflfilIKKipWroiryOdf0uei6qJGZnaPRIeJPe0r6E6vXFQbTTaWIk Sn1/E+SJcnK18uYA73ZZP/Ia8LvPHHfhzfZIye2XATVTLKEAb7OqH7efFx25cUIW1TNjsj Y05Krx5kiQUnK/QAhF5UVUzjQb1FHAGi06iJBQJ2z96dG9P14AsH9zE8cNqOpvsMsbyESt VNDO0nqIAg5IoGvoNhLN2XdwYnWoXScGGQqqDW4yR9bPS3lRFIae0DAoS5Q77wnR13A7lY ujS7AlvehV50vDsOQN5NdRPTlsuZLNIhNjglOGVWm2T2XYR93ycC+ZormFYysQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1767968177; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Ziqk6iy1b/n3wWoSuu66i6Pl9qpXfUq5JZjqG9/Aq+Y=; b=VBr+tc9hI/ddx+tm8dTJGWFvoDR8u8DUJ4R/NLyswm42/YGQiHqLRP8wy6pJMf6AEnNq5v hXE649mzxXJ85FgehsXMx3nw7bkJVx/Q8tK7U9SgmwHOesP560nvNnDHYi80Pr6q5M8qP6 FJ58SiCcTlB3X6ImWQD6Ny8BXFiSyRede8oDiG8hG9IEl82OAb5tJQkdXyREeL1xi3xW2j o3/p3CbqJ9ZDR7KmzRkVtGqvObLfZ/6MD3hei5FVOc2MOrJbn7IjxPpIr12XgjpMHa3kWe hDEd59SXXQmrtQ3h2Z3EZ4oXNX6XRyi3dVHaqcZ02/dfcvVThLQYGeqcBFSmkw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1767968177; a=rsa-sha256; cv=none; b=n3SCbT9VoLC/c9XDP1+rvsjWS9XztamzKMGte6hxZlhiBtN5uylJDPBWpvch+c1/WNZfJ9 +Z8f7I6GyWGudhmJ26clTrzYkTYyZE+zeb2jMy/tAFt1zKyU3ttmPZZkX9UrgHUma+imVz k87N6465bFCYwYy+equR5A6fHXrM61lGXetYDX+c4cEKaGlSZ3u9Co1POliZwqpg74SrOY tuBMYaGE2cNrW4scT0HaSdKs5CP/+gyspnPnosl0xy/GxHgmy5MZewWXqSXvdKiSQyAYkI lrabKhZlqXnYl1sfd1U1wKLaGd/eObL+O8/h6godHtsVa5u9Oi95Rqa8BpzzMA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dnkN13xFnz1QpK for ; Fri, 09 Jan 2026 14:16:17 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id b641 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 09 Jan 2026 14:16:17 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Brooks Davis Subject: git: fb0bdbea2ed4 - main - cache: avoid hardcoded zone alignment List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: brooks X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: fb0bdbea2ed4f63ef07061313f8cef89a3d73579 Auto-Submitted: auto-generated Date: Fri, 09 Jan 2026 14:16:17 +0000 Message-Id: <69610db1.b641.135d9243@gitrepo.freebsd.org> The branch main has been updated by brooks: URL: https://cgit.FreeBSD.org/src/commit/?id=fb0bdbea2ed4f63ef07061313f8cef89a3d73579 commit fb0bdbea2ed4f63ef07061313f8cef89a3d73579 Author: Brooks Davis AuthorDate: 2026-01-09 14:15:22 +0000 Commit: Brooks Davis CommitDate: 2026-01-09 14:15:22 +0000 cache: avoid hardcoded zone alignment Previously, this was underaligned on CHERI system where pointers are larger than time_t. Use the alignment of struct namecache_ts which picks up time_t via strut timespec and pointers via struct namecache. This arguably overaligns cache_zone_small and cache_zone_large on i386 kernels, but I suspect the actual microarchitectures most i386 binaries are run on do better with 64-bit alignment. Reviewed by: olce, markj Effort: CHERI upstreaming Sponsored by: Innovate UK Fixes: cf8ac0de8150 ("cache: reduce zone alignment to 8 bytes") Differential Revision: https://reviews.freebsd.org/D54376 --- sys/kern/vfs_cache.c | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/sys/kern/vfs_cache.c b/sys/kern/vfs_cache.c index 557e451f9a45..c5abc1c8b9b7 100644 --- a/sys/kern/vfs_cache.c +++ b/sys/kern/vfs_cache.c @@ -384,14 +384,10 @@ struct namecache { }; /* - * struct namecache_ts repeats struct namecache layout up to the - * nc_nlen member. * struct namecache_ts is used in place of struct namecache when time(s) need * to be stored. The nc_dotdottime field is used when a cache entry is mapping * both a non-dotdot directory name plus dotdot for the directory's * parent. - * - * See below for alignment requirement. */ struct namecache_ts { struct timespec nc_time; /* timespec provided by fs */ @@ -404,12 +400,10 @@ struct namecache_ts { TAILQ_HEAD(cache_freebatch, namecache); /* - * At least mips n32 performs 64-bit accesses to timespec as found - * in namecache_ts and requires them to be aligned. Since others - * may be in the same spot suffer a little bit and enforce the - * alignment for everyone. Note this is a nop for 64-bit platforms. + * Ensure all zones are sufficently aligned to hold both + * struct namecache and struct namecache_ts. */ -#define CACHE_ZONE_ALIGNMENT UMA_ALIGNOF(time_t) +#define CACHE_ZONE_ALIGN_MASK UMA_ALIGNOF(struct namecache_ts) /* * TODO: the initial value of CACHE_PATH_CUTOFF was inherited from the @@ -432,15 +426,23 @@ TAILQ_HEAD(cache_freebatch, namecache); #define CACHE_LARGE_PAD 2 #endif -#define CACHE_ZONE_SMALL_SIZE (offsetof(struct namecache, nc_name) + CACHE_PATH_CUTOFF + 1) -#define CACHE_ZONE_SMALL_TS_SIZE (offsetof(struct namecache_ts, nc_nc) + CACHE_ZONE_SMALL_SIZE) -#define CACHE_ZONE_LARGE_SIZE (offsetof(struct namecache, nc_name) + NAME_MAX + 1 + CACHE_LARGE_PAD) -#define CACHE_ZONE_LARGE_TS_SIZE (offsetof(struct namecache_ts, nc_nc) + CACHE_ZONE_LARGE_SIZE) - -_Static_assert((CACHE_ZONE_SMALL_SIZE % (CACHE_ZONE_ALIGNMENT + 1)) == 0, "bad zone size"); -_Static_assert((CACHE_ZONE_SMALL_TS_SIZE % (CACHE_ZONE_ALIGNMENT + 1)) == 0, "bad zone size"); -_Static_assert((CACHE_ZONE_LARGE_SIZE % (CACHE_ZONE_ALIGNMENT + 1)) == 0, "bad zone size"); -_Static_assert((CACHE_ZONE_LARGE_TS_SIZE % (CACHE_ZONE_ALIGNMENT + 1)) == 0, "bad zone size"); +#define CACHE_ZONE_SMALL_SIZE \ + (offsetof(struct namecache, nc_name) + CACHE_PATH_CUTOFF + 1) +#define CACHE_ZONE_SMALL_TS_SIZE \ + (offsetof(struct namecache_ts, nc_nc) + CACHE_ZONE_SMALL_SIZE) +#define CACHE_ZONE_LARGE_SIZE \ + (offsetof(struct namecache, nc_name) + NAME_MAX + 1 + CACHE_LARGE_PAD) +#define CACHE_ZONE_LARGE_TS_SIZE \ + (offsetof(struct namecache_ts, nc_nc) + CACHE_ZONE_LARGE_SIZE) + +_Static_assert((CACHE_ZONE_SMALL_SIZE % (CACHE_ZONE_ALIGN_MASK + 1)) == 0, + "bad zone size"); +_Static_assert((CACHE_ZONE_SMALL_TS_SIZE % (CACHE_ZONE_ALIGN_MASK + 1)) == 0, + "bad zone size"); +_Static_assert((CACHE_ZONE_LARGE_SIZE % (CACHE_ZONE_ALIGN_MASK + 1)) == 0, + "bad zone size"); +_Static_assert((CACHE_ZONE_LARGE_TS_SIZE % (CACHE_ZONE_ALIGN_MASK + 1)) == 0, + "bad zone size"); #define nc_vp n_un.nu_vp #define nc_neg n_un.nu_neg @@ -2785,13 +2787,13 @@ nchinit(void *dummy __unused) u_int i; cache_zone_small = uma_zcreate("S VFS Cache", CACHE_ZONE_SMALL_SIZE, - NULL, NULL, NULL, NULL, CACHE_ZONE_ALIGNMENT, UMA_ZONE_ZINIT); + NULL, NULL, NULL, NULL, CACHE_ZONE_ALIGN_MASK, UMA_ZONE_ZINIT); cache_zone_small_ts = uma_zcreate("STS VFS Cache", CACHE_ZONE_SMALL_TS_SIZE, - NULL, NULL, NULL, NULL, CACHE_ZONE_ALIGNMENT, UMA_ZONE_ZINIT); + NULL, NULL, NULL, NULL, CACHE_ZONE_ALIGN_MASK, UMA_ZONE_ZINIT); cache_zone_large = uma_zcreate("L VFS Cache", CACHE_ZONE_LARGE_SIZE, - NULL, NULL, NULL, NULL, CACHE_ZONE_ALIGNMENT, UMA_ZONE_ZINIT); + NULL, NULL, NULL, NULL, CACHE_ZONE_ALIGN_MASK, UMA_ZONE_ZINIT); cache_zone_large_ts = uma_zcreate("LTS VFS Cache", CACHE_ZONE_LARGE_TS_SIZE, - NULL, NULL, NULL, NULL, CACHE_ZONE_ALIGNMENT, UMA_ZONE_ZINIT); + NULL, NULL, NULL, NULL, CACHE_ZONE_ALIGN_MASK, UMA_ZONE_ZINIT); VFS_SMR_ZONE_SET(cache_zone_small); VFS_SMR_ZONE_SET(cache_zone_small_ts);