From nobody Tue Dec 9 15:59:55 2025 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 4dQk7v5wFRz6Kq54 for ; Tue, 09 Dec 2025 15:59:55 +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 "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dQk7v1Nfnz45nf for ; Tue, 09 Dec 2025 15:59:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1765295995; 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=A7H+o+epioIgWPDWCYeGIT1iiXcuGiMIiAxNZfHnrw0=; b=lCQfXY2fn02BgCIQGb8fBdAEZW8HyOmKi5HoFxUGwe3vDfl076v4YtPk821QypQqJgqHnz 7O9xdKgVtbmuovgc2EZtfOviL4TcvJnjx5U15jp/6Gfqj+3b9gn4mtO6Y92w81kP2FRqN1 k6hQEHzj5/JE/hivVgoPN1slSD9jC6TS3jxfM6mSLzbBT68Thtt1JL6mr95ZRlLoork1xY //uwEwXkA+fTeRXwWYt7X/bxbz5wb9iiXqRsgIJsqqqRiRs4M3B8xs9wT7ZSDYKB/vZxzf AHroyEVrzTuweOLn3YGC9cgKVnfCLHIxldtG9QsFdMPw3LKudNVf2KDsM9tSew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1765295995; 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=A7H+o+epioIgWPDWCYeGIT1iiXcuGiMIiAxNZfHnrw0=; b=u+mQdRL5sbcBZI21nvyMp01kbdW2SgUgCTAXLB/ysALJumgf3ifBzTZrZPOl3wgSoZ0zS5 Zt5o/TU7n7lPUgA//OOj28xuEJGAPstHdJD3BzzTM+L/GrOljsopsIY/S375EJXx40wtIz 7vJT4XAJBdrgR00UROm8tdy8/10go09n3h7WEW9J8qYpD8nNLXvLkUfQMkAupc5nxv8IJ4 uArleEeVeiLdkyc1SMuGlAlv4ERWm8xmMvNQIxXBWg91yYXDvXJC8U2FNKobW0mNuv8xeO 9Pk45SaBUzC6nozW22VVJKONJf0sPvHueUDS15JE7QjuQIQLQKlwJTBZY4zOTg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1765295995; a=rsa-sha256; cv=none; b=DHin0sB53TIgel2/mj0MNCbHvYJYqP/Map/69TOVsFRHl1gj20zPCftZFI+vxeAcQCUY8h LPTFyKH77bbin1uR6K1SNMm7Wh7+Y+m887ySEGGYdIbHRzmp5HDKxTuKSdxZatlY2xNv6Y 8Q8k2f0M+OCx6wFGt85Zx4uLmBqT5ViNhAR1/k5HdPkunbRv4EUhUK7ySyanDJhiZGVT9K hkfzdmfX0btjHszr7Gt1dFaCuqudCKi9GyG1Um7mQK2BEN2j1w6Bnit7SIybS27F9VY1t6 GSUDOxuk7pL4MJIoF12A2m2DEI+bMeTtRDvxrwDXqeG3+jhnJ/yD+GmFGkDx+g== 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 4dQk7v0w6Sz14Wv for ; Tue, 09 Dec 2025 15:59:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 350ae by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 09 Dec 2025 15:59:55 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: John Baldwin Subject: git: 305f85a3d6f2 - main - rman: Embed the mutex in struct rman instead of using a separate allocation 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: jhb X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 305f85a3d6f2ec32ee8178413a716de7c0a73eaa Auto-Submitted: auto-generated Date: Tue, 09 Dec 2025 15:59:55 +0000 Message-Id: <6938477b.350ae.527f6dd@gitrepo.freebsd.org> The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=305f85a3d6f2ec32ee8178413a716de7c0a73eaa commit 305f85a3d6f2ec32ee8178413a716de7c0a73eaa Author: John Baldwin AuthorDate: 2025-12-09 15:59:30 +0000 Commit: John Baldwin CommitDate: 2025-12-09 15:59:30 +0000 rman: Embed the mutex in struct rman instead of using a separate allocation This used a separate allocation when rman was first imported (back when the lock was a pre-SMPng "simplelock" instead of a mutex). Reported by: des Reviewed by: des Differential Revision: https://reviews.freebsd.org/D54143 --- sys/kern/subr_rman.c | 68 +++++++++++++++++++++++++--------------------------- sys/sys/rman.h | 3 ++- 2 files changed, 34 insertions(+), 37 deletions(-) diff --git a/sys/kern/subr_rman.c b/sys/kern/subr_rman.c index b8528104ba28..e09ca10f0a2e 100644 --- a/sys/kern/subr_rman.c +++ b/sys/kern/subr_rman.c @@ -131,10 +131,7 @@ rman_init(struct rman *rm) panic("implement RMAN_GAUGE"); TAILQ_INIT(&rm->rm_list); - rm->rm_mtx = malloc(sizeof *rm->rm_mtx, M_RMAN, M_NOWAIT | M_ZERO); - if (rm->rm_mtx == NULL) - return ENOMEM; - mtx_init(rm->rm_mtx, "rman", NULL, MTX_DEF); + mtx_init(&rm->rm_mtx, "rman", NULL, MTX_DEF); mtx_lock(&rman_mtx); TAILQ_INSERT_TAIL(&rman_head, rm, rm_link); @@ -159,7 +156,7 @@ rman_manage_region(struct rman *rm, rman_res_t start, rman_res_t end) r->r_end = end; r->r_rm = rm; - mtx_lock(rm->rm_mtx); + mtx_lock(&rm->rm_mtx); /* Skip entries before us. */ TAILQ_FOREACH(s, &rm->rm_list, r_link) { @@ -216,7 +213,7 @@ rman_manage_region(struct rman *rm, rman_res_t start, rman_res_t end) } } out: - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); return rv; } @@ -235,10 +232,10 @@ rman_fini(struct rman *rm) { struct resource_i *r; - mtx_lock(rm->rm_mtx); + mtx_lock(&rm->rm_mtx); TAILQ_FOREACH(r, &rm->rm_list, r_link) { if (r->r_flags & RF_ALLOCATED) { - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); return EBUSY; } } @@ -252,12 +249,11 @@ rman_fini(struct rman *rm) TAILQ_REMOVE(&rm->rm_list, r, r_link); free(r, M_RMAN); } - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); mtx_lock(&rman_mtx); TAILQ_REMOVE(&rman_head, rm, rm_link); mtx_unlock(&rman_mtx); - mtx_destroy(rm->rm_mtx); - free(rm->rm_mtx, M_RMAN); + mtx_destroy(&rm->rm_mtx); return 0; } @@ -267,16 +263,16 @@ rman_first_free_region(struct rman *rm, rman_res_t *start, rman_res_t *end) { struct resource_i *r; - mtx_lock(rm->rm_mtx); + mtx_lock(&rm->rm_mtx); TAILQ_FOREACH(r, &rm->rm_list, r_link) { if (!(r->r_flags & RF_ALLOCATED)) { *start = r->r_start; *end = r->r_end; - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); return (0); } } - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); return (ENOENT); } @@ -285,16 +281,16 @@ rman_last_free_region(struct rman *rm, rman_res_t *start, rman_res_t *end) { struct resource_i *r; - mtx_lock(rm->rm_mtx); + mtx_lock(&rm->rm_mtx); TAILQ_FOREACH_REVERSE(r, &rm->rm_list, resource_head, r_link) { if (!(r->r_flags & RF_ALLOCATED)) { *start = r->r_start; *end = r->r_end; - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); return (0); } } - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); return (ENOENT); } @@ -323,7 +319,7 @@ rman_adjust_resource(struct resource *rr, rman_res_t start, rman_res_t end) * allocated resource. */ rm = r->r_rm; - mtx_lock(rm->rm_mtx); + mtx_lock(&rm->rm_mtx); #ifdef INVARIANTS TAILQ_FOREACH(s, &rm->rm_list, r_link) { if (s == r) @@ -345,12 +341,12 @@ rman_adjust_resource(struct resource *rr, rman_res_t start, rman_res_t end) */ if (start < r->r_start && (s == NULL || (s->r_flags & RF_ALLOCATED) || s->r_start > start)) { - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); return (EBUSY); } if (end > r->r_end && (t == NULL || (t->r_flags & RF_ALLOCATED) || t->r_end < end)) { - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); return (EBUSY); } @@ -380,7 +376,7 @@ rman_adjust_resource(struct resource *rr, rman_res_t start, rman_res_t end) } else t->r_start = end + 1; } - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); /* * Handle the shrinking cases that require allocating a new @@ -392,7 +388,7 @@ rman_adjust_resource(struct resource *rr, rman_res_t start, rman_res_t end) new->r_start = r->r_start; new->r_end = start - 1; new->r_rm = rm; - mtx_lock(rm->rm_mtx); + mtx_lock(&rm->rm_mtx); r->r_start = start; s = TAILQ_PREV(r, resource_head, r_link); if (s != NULL && !(s->r_flags & RF_ALLOCATED)) { @@ -400,14 +396,14 @@ rman_adjust_resource(struct resource *rr, rman_res_t start, rman_res_t end) free(new, M_RMAN); } else TAILQ_INSERT_BEFORE(r, new, r_link); - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); } if (end < r->r_end) { new = int_alloc_resource(M_WAITOK); new->r_start = end + 1; new->r_end = r->r_end; new->r_rm = rm; - mtx_lock(rm->rm_mtx); + mtx_lock(&rm->rm_mtx); r->r_end = end; t = TAILQ_NEXT(r, r_link); if (t != NULL && !(t->r_flags & RF_ALLOCATED)) { @@ -415,7 +411,7 @@ rman_adjust_resource(struct resource *rr, rman_res_t start, rman_res_t end) free(new, M_RMAN); } else TAILQ_INSERT_AFTER(&rm->rm_list, r, new, r_link); - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); } return (0); } @@ -441,7 +437,7 @@ rman_reserve_resource(struct rman *rm, rman_res_t start, rman_res_t end, ("invalid flags %#x", flags)); new_rflags = (flags & ~RF_FIRSTSHARE) | RF_ALLOCATED; - mtx_lock(rm->rm_mtx); + mtx_lock(&rm->rm_mtx); r = TAILQ_FIRST(&rm->rm_list); if (r == NULL) @@ -628,7 +624,7 @@ rman_reserve_resource(struct rman *rm, rman_res_t start, rman_res_t end, */ out: - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); return (rv == NULL ? NULL : &rv->r_r); } @@ -640,9 +636,9 @@ rman_activate_resource(struct resource *re) r = re->__r_i; rm = r->r_rm; - mtx_lock(rm->rm_mtx); + mtx_lock(&rm->rm_mtx); r->r_flags |= RF_ACTIVE; - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); return 0; } @@ -652,9 +648,9 @@ rman_deactivate_resource(struct resource *r) struct rman *rm; rm = r->__r_i->r_rm; - mtx_lock(rm->rm_mtx); + mtx_lock(&rm->rm_mtx); r->__r_i->r_flags &= ~RF_ACTIVE; - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); return 0; } @@ -761,9 +757,9 @@ rman_release_resource(struct resource *re) r = re->__r_i; rm = r->r_rm; - mtx_lock(rm->rm_mtx); + mtx_lock(&rm->rm_mtx); rv = int_rman_release_resource(rm, r); - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); return (rv); } @@ -991,7 +987,7 @@ sysctl_rman(SYSCTL_HANDLER_ARGS) /* * Find the indexed resource and return it. */ - mtx_lock(rm->rm_mtx); + mtx_lock(&rm->rm_mtx); TAILQ_FOREACH(res, &rm->rm_list, r_link) { if (res->r_sharehead != NULL) { LIST_FOREACH(sres, res->r_sharehead, r_sharelink) @@ -1003,7 +999,7 @@ sysctl_rman(SYSCTL_HANDLER_ARGS) else if (res_idx-- == 0) goto found; } - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); return (ENOENT); found: @@ -1028,7 +1024,7 @@ found: ures.r_size = res->r_end - res->r_start + 1; ures.r_flags = res->r_flags; - mtx_unlock(rm->rm_mtx); + mtx_unlock(&rm->rm_mtx); error = SYSCTL_OUT(req, &ures, sizeof(ures)); return (error); } diff --git a/sys/sys/rman.h b/sys/sys/rman.h index 323da4a62201..2479942c3217 100644 --- a/sys/sys/rman.h +++ b/sys/sys/rman.h @@ -35,6 +35,7 @@ #ifndef _KERNEL #include #else +#include #include #include #endif @@ -112,7 +113,7 @@ TAILQ_HEAD(resource_head, resource_i); struct rman { struct resource_head rm_list; - struct mtx *rm_mtx; /* mutex used to protect rm_list */ + struct mtx rm_mtx; /* mutex used to protect rm_list */ TAILQ_ENTRY(rman) rm_link; /* link in list of all rmans */ rman_res_t rm_start; /* index of globally first entry */ rman_res_t rm_end; /* index of globally last entry */