From nobody Mon Feb 16 15:44:20 2026 X-Original-To: dev-commits-src-branches@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 4fF6X50MFnz6Rxjt for ; Mon, 16 Feb 2026 15:44:21 +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 4fF6X46N0xz4PM8 for ; Mon, 16 Feb 2026 15:44:20 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1771256660; 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=kpr4TuBD3CAs3x28y/NysdrFjlzEah3wTJ4wO6ICcLs=; b=oz78xmUCC6XPEkxfdP4HDF4dBKx4PEr+4hFNeAB9KSeZkADqV7dV1Sy5vRyRPdVP5RBXys tKWGCGD9ytgy8zZpOkuXGk0HyvaI7CUpROTwRbYyKD0QWP1meFTMqIQhp+OlR1HP8tzLHC pdiSTN0TXt7aYUU6eIHKFf1BIXljBSxvXfTsDTMxRZeZK2V5VEGzgqzfZ5dtTnHFQ8f7h3 J+hEmUrIuq7V93r8PYFihgH3dBx9wIHtjagni/0elqteBZYBUWt8WzzxqqEER742HNDVKh UFZrFKaaMhl44PUHFEOAtk6Dz1K756Ns7fGRHKWqytQbsJtzluPH//dkQ4C2tQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1771256660; a=rsa-sha256; cv=none; b=bB12yCly5B54Gt7Xlx7Odd7ZHaLa5kKjUHM+FFkrQp4mBXKOAXEWvoKv27Xnpm4/4E6LTn 3vBGAsJGj4iCQuKovSEL/DvNMDQ+uddtD/qUjyHLN20Od5TzMijfgMB6BGubBOVVl77D76 T4k7Vc040tNYnL0505Bw/5AmoVYQVek7vCXbpg4KIxnWmabJFr0zSvvUmQVwuKFfexn824 Wdfob9BJgNbpVxQztCuYwRkOjIM5c6vWFK9puZOVOHxUVYwraxhGvTaxwtbY4JDPC3JT2+ ZokIDvWtlydcmqaHbF8MmnU4E/xFhWwfOy+BoKl9i1/M69bRI0FIvbrJ0YFrVw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1771256660; 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=kpr4TuBD3CAs3x28y/NysdrFjlzEah3wTJ4wO6ICcLs=; b=AO5L28vYSyITkmvY3Tr3OybxZCc4lbDKjelYt/kUGt2RrHbqof2wlRad+rRAE4nBYc8ENl HA5/aVlj1YklSlLr1u3VkLraQcsGRChtMoAEjyogUIQWFkmbymF7j1PtUUkmNb9GNBv6eF 7nAmf7ubY4KBJeRcxLlwza99GvyBaEZYgdDj13VE/Mg7Dyji5l/ZKH1efhrcsp3beHeeEd IlbNyTOo7rzVyx9E45BGKcnlNqFY9Neq4IOcU7vYCoRvY8t1+dfewbiI0Y01C+A4j8RbO6 m7Qb7B00kjveZf3H6XkwB3UuGO5ZcMQ1USjFkZ8lbsJPb/tP/Fcm39MfpEmjHg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fF6X45rNHzTvg for ; Mon, 16 Feb 2026 15:44:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1fdfe by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 16 Feb 2026 15:44:20 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Mark Johnston Subject: git: 8bc4cbacd1dc - stable/15 - ip_mroute: Convert to using a regular mutex List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 8bc4cbacd1dcca986645a4497c41bf61ed9248fe Auto-Submitted: auto-generated Date: Mon, 16 Feb 2026 15:44:20 +0000 Message-Id: <69933b54.1fdfe.72109eee@gitrepo.freebsd.org> The branch stable/15 has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=8bc4cbacd1dcca986645a4497c41bf61ed9248fe commit 8bc4cbacd1dcca986645a4497c41bf61ed9248fe Author: Mark Johnston AuthorDate: 2026-01-27 14:58:02 +0000 Commit: Mark Johnston CommitDate: 2026-02-16 13:42:10 +0000 ip_mroute: Convert to using a regular mutex The multicast routing code was using spin mutexes for packet counting, but there is no reason to use them instead of regular mutexes, given that none of this code runs in an interrupt context. Convert to using default mutexes. Reviewed by: glebius MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D54603 (cherry picked from commit a265c8b4a5a7c8fdd33e27b8f74bd2a514f82c70) --- sys/netinet/ip_mroute.c | 35 ++++++++++++++++++----------------- sys/netinet/ip_mroute.h | 10 +++++----- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/sys/netinet/ip_mroute.c b/sys/netinet/ip_mroute.c index 267d76111780..73f17adf5728 100644 --- a/sys/netinet/ip_mroute.c +++ b/sys/netinet/ip_mroute.c @@ -607,12 +607,12 @@ get_vif_cnt(struct sioc_vif_req *req) return EINVAL; } - mtx_lock_spin(&V_viftable[vifi].v_spin); + mtx_lock(&V_viftable[vifi].v_mtx); req->icount = V_viftable[vifi].v_pkt_in; req->ocount = V_viftable[vifi].v_pkt_out; req->ibytes = V_viftable[vifi].v_bytes_in; req->obytes = V_viftable[vifi].v_bytes_out; - mtx_unlock_spin(&V_viftable[vifi].v_spin); + mtx_unlock(&V_viftable[vifi].v_mtx); MRW_RUNLOCK(); return 0; @@ -1005,8 +1005,8 @@ add_vif(struct vifctl *vifcp) vifp->v_pkt_out = 0; vifp->v_bytes_in = 0; vifp->v_bytes_out = 0; - sprintf(vifp->v_spin_name, "BM[%d] spin", vifcp->vifc_vifi); - mtx_init(&vifp->v_spin, vifp->v_spin_name, NULL, MTX_SPIN); + sprintf(vifp->v_mtx_name, "BM[%d] mtx", vifcp->vifc_vifi); + mtx_init(&vifp->v_mtx, vifp->v_mtx_name, NULL, MTX_DEF); /* Adjust numvifs up if the vifi is higher than numvifs */ if (V_numvifs <= vifcp->vifc_vifi) @@ -1054,7 +1054,7 @@ del_vif_locked(vifi_t vifi, struct ifnet **ifp_multi_leave, struct ifnet **ifp_f } } - mtx_destroy(&vifp->v_spin); + mtx_destroy(&vifp->v_mtx); bzero((caddr_t)vifp, sizeof (*vifp)); @@ -1660,7 +1660,7 @@ ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif) } /* If I sourced this packet, it counts as output, else it was input. */ - mtx_lock_spin(&V_viftable[vifi].v_spin); + mtx_lock(&V_viftable[vifi].v_mtx); if (in_hosteq(ip->ip_src, V_viftable[vifi].v_lcl_addr)) { V_viftable[vifi].v_pkt_out++; V_viftable[vifi].v_bytes_out += plen; @@ -1668,7 +1668,7 @@ ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif) V_viftable[vifi].v_pkt_in++; V_viftable[vifi].v_bytes_in += plen; } - mtx_unlock_spin(&V_viftable[vifi].v_spin); + mtx_unlock(&V_viftable[vifi].v_mtx); rt->mfc_pkt_cnt++; rt->mfc_byte_cnt += plen; @@ -1705,14 +1705,14 @@ ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif) for (x = rt->mfc_bw_meter_leq; x != NULL; x = x->bm_mfc_next) { /* * Record that a packet is received. - * Spin lock has to be taken as callout context + * A lock has to be taken as callout context * (expire_bw_meter_leq) might modify these fields * as well */ - mtx_lock_spin(&x->bm_spin); + mtx_lock(&x->bm_mtx); x->bm_measured.b_packets++; x->bm_measured.b_bytes += plen; - mtx_unlock_spin(&x->bm_spin); + mtx_unlock(&x->bm_mtx); } } @@ -1895,13 +1895,14 @@ expire_bw_meter_leq(void *arg) /* Reset counters */ x->bm_start_time = now; - /* Spin lock has to be taken as ip_forward context + /* + * The lock has to be taken as ip_forward context * might modify these fields as well */ - mtx_lock_spin(&x->bm_spin); + mtx_lock(&x->bm_mtx); x->bm_measured.b_bytes = 0; x->bm_measured.b_packets = 0; - mtx_unlock_spin(&x->bm_spin); + mtx_unlock(&x->bm_mtx); callout_schedule(&x->bm_meter_callout, tvtohz(&x->bm_threshold.b_time)); @@ -1987,8 +1988,8 @@ add_bw_upcall(struct bw_upcall *req) x->bm_time_next = NULL; x->bm_mfc = mfc; x->arg = curvnet; - sprintf(x->bm_spin_name, "BM spin %p", x); - mtx_init(&x->bm_spin, x->bm_spin_name, NULL, MTX_SPIN); + sprintf(x->bm_mtx_name, "BM mtx %p", x); + mtx_init(&x->bm_mtx, x->bm_mtx_name, NULL, MTX_DEF); /* For LEQ case create periodic callout */ if (req->bu_flags & BW_UPCALL_LEQ) { @@ -2015,7 +2016,7 @@ free_bw_list(struct bw_meter *list) /* MRW_WLOCK must be held here */ if (x->bm_flags & BW_METER_LEQ) { callout_drain(&x->bm_meter_callout); - mtx_destroy(&x->bm_spin); + mtx_destroy(&x->bm_mtx); } list = list->bm_mfc_next; @@ -2116,7 +2117,7 @@ bw_meter_geq_receive_packet(struct bw_meter *x, int plen, struct timeval *nowp) /* * Processing for ">=" type of bw_meter entry. - * bm_spin does not have to be hold here as in GEQ + * bm_mtx does not have to be hold here as in GEQ * case this is the only context accessing bm_measured. */ if (BW_TIMEVALCMP(&delta, &x->bm_threshold.b_time, >)) { diff --git a/sys/netinet/ip_mroute.h b/sys/netinet/ip_mroute.h index 2c71dc10dfd9..ed98e59a7c77 100644 --- a/sys/netinet/ip_mroute.h +++ b/sys/netinet/ip_mroute.h @@ -262,9 +262,9 @@ struct vif { u_long v_bytes_in; /* # bytes in on interface */ u_long v_bytes_out; /* # bytes out on interface */ #ifdef _KERNEL -#define MROUTE_VIF_SYSCTL_LEN __offsetof(struct vif, v_spin) - struct mtx v_spin; /* Spin mutex for pkt stats */ - char v_spin_name[32]; +#define MROUTE_VIF_SYSCTL_LEN __offsetof(struct vif, v_mtx) + struct mtx v_mtx; /* mutex for pkt stats */ + char v_mtx_name[32]; #endif }; @@ -350,8 +350,8 @@ struct bw_meter { #ifdef _KERNEL struct callout bm_meter_callout; /* Periodic callout */ void* arg; /* custom argument */ - struct mtx bm_spin; /* meter spin lock */ - char bm_spin_name[32]; + struct mtx bm_mtx; /* meter lock */ + char bm_mtx_name[32]; #endif };