From nobody Mon Jul 20 02:00:31 2026 X-Original-To: dev-commits-src-main@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 4h3NyT408Cz6m10v for ; Mon, 20 Jul 2026 02:00:33 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3NyR4k8Xz3K7n for ; Mon, 20 Jul 2026 02:00:31 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784512833; 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=CyktUjEpdvAstD3r3eTOvPwFc2Zxz0BAcw299Bl/39M=; b=CP+QOe8YdX6Q2McfzmDFAFSCf1XhRFJcjMTsCJa8ZOAMbrK+SM+77JFB+Sx/LVyu20ws7K PZ43StpfuwDfXFTu5nHn2JLFyMlLF3KVLjgKKyd1hl8ClgMP3UhZ/0u4S0Sb23XKJZlTQY G14B5P4ztDEoRy59RIe/kUPFms0ejeCOde8B0al7TQruJFM+n03XxudcQFKfpQfsk43l9X tbBvlGrU2cLrMmmjKuJOTf50D0jm3JQUvddVnUEXEHjiclnZtqUcaPP/qVbBsq5Ks8PRgK w0x0XFPVdyrPXmfYpq/OLTpigGePT0DhJaSKuoFB1S1sSX5fzOt5k1OzXaw2OQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784512833; a=rsa-sha256; cv=none; b=In4bYwus5iePDrRa0lbZY8rwSdtjoKxF6ojHD78qD+zPT4lLlADwDRlKza95+Gr3PBYyC/ 5Sjmf83wZa/TWtvmj592SBLbo5wQRuMNtf09veFk44p1yzkm1ELZaDn4RiO4RhMwFupBkn 6ahzt0IcvqCAOH+0QZzrn4OsW+fqAinLXIPtas2IfARvCSZrG0SHT+UAjnOmLJPMTQ729t Riz/MX1d9hzFSmdkphVw9sYfWPZQF7zU0wXW0hzL/sa9py4wNtY/vgRoO0V7TNw0wkih88 q2cnWxltWCLjXCyGPN00zr+kuqQBsh52DD4zPVNfhQUWmeNUNJaD1TGnkSfd5g== 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=1784512833; 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=CyktUjEpdvAstD3r3eTOvPwFc2Zxz0BAcw299Bl/39M=; b=LptU9SIVIHjrqREYfDjpeOKPtpRgFae/zQFJHB/rzFM8h8iR5Fzhs3rx5B+TiWzZCe/TeE 9UEq30JKV/l5ekAjg48B9jgXuoIzM5kRe+rSt+1DUeZ3cTfTdXaw9W0hBBz4XgnJGdtNmN g9jSp0/+vvfaLlOmNH3Jwk8XLeugqqHsjQ+FDRvsgmNnlELIJZl1hbulu07mtOF/ay50c5 83Pu0vdMMqVJEyjRdfEzJ/J9hktGAtyw0oHu66lhZjMD2OzAl+l/GN+IWm5Wzajg+JV/tO +zfZNRUARMiSPWjKXHfpyH3iIgcIJ+rBJ8niZxeBHkVNH4McdXF536rqvj/CBA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3NyR3nxCzhjN for ; Mon, 20 Jul 2026 02:00:31 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 4468e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 02:00:31 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: b328975b9d7c - main - procdesc: report NOTE_PDSIGCHLD for traced and stopped process List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b328975b9d7c475cd99107ca407df04366cc38af Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 02:00:31 +0000 Message-Id: <6a5d813f.4468e.816c82d@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=b328975b9d7c475cd99107ca407df04366cc38af commit b328975b9d7c475cd99107ca407df04366cc38af Author: Konstantin Belousov AuthorDate: 2026-07-18 17:31:31 +0000 Commit: Konstantin Belousov CommitDate: 2026-07-20 02:00:02 +0000 procdesc: report NOTE_PDSIGCHLD for traced and stopped process on attach of the knote. It is same as for NOTE_EXIT when attaching to the exiting process. Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58327 --- sys/kern/sys_procdesc.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/sys/kern/sys_procdesc.c b/sys/kern/sys_procdesc.c index fd4b660d6afa..94c2df4b1e69 100644 --- a/sys/kern/sys_procdesc.c +++ b/sys/kern/sys_procdesc.c @@ -493,16 +493,25 @@ static int procdesc_kqops_event(struct knote *kn, long hint) { struct procdesc *pd; + struct proc *p; u_int event; pd = kn->kn_fp->f_data; if (hint == 0) { /* * Initial test after registration. Generate notes in - * case the process already terminated before registration. + * case the process already terminated before + * registration, or is stopped, or traced, with an event + * pending. */ - event = (pd->pd_flags & PDF_EXITED) != 0 ? (NOTE_EXIT | - NOTE_PDSIGCHLD) : 0; + p = pd->pd_proc; + if ((pd->pd_flags & PDF_EXITED) != 0) + event = NOTE_EXIT | NOTE_PDSIGCHLD; + else if ((atomic_load_int(&p->p_flag) & (P_STOPPED_SIG | + P_STOPPED_TRACE)) != 0) + event = NOTE_PDSIGCHLD; + else + event = 0; } else { /* Mask off extra data. */ event = (u_int)hint & NOTE_PCTRLMASK; From nobody Mon Jul 20 02:19:05 2026 X-Original-To: dev-commits-src-main@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 4h3PMt2ZK0z6m2gj for ; Mon, 20 Jul 2026 02:19:06 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3PMt1kmYz3M8J for ; Mon, 20 Jul 2026 02:19:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784513946; 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=eACWbXqNrh2DnvmkkCYFNvBhAwqksdSln/bKZ21TkCs=; b=kkMiMyaGJ9dtmCcQ8IN/hq4Ldc9eEcMahuybXmBiKDqrJhxU+TLwRH4DLP3csaKYXUVo/6 JiatUq+GzOWyyXGwgBfvF3LbnTsm0b1eQPB1kqOKn7QknpuTPmslMUPLxzogME551jHmfY xeqeSQayHXL1x65VD5wIQQsla5AWQTfz6rU++6lacNblHKQByE3MghaZJGj4RAIctlRVb8 uM9ZhSlvTlu73yIn+MY7oJ0IIULW3GoUZ0RUTZnOBD1ldR3ItpYpHun/H3IYhJkdEMPyZd f76u1KHO29JGIFAyxYpJeqTAiRH3o/2jIeZ1e7SZpr289bjEWXcZuaVAHiKsmA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784513946; a=rsa-sha256; cv=none; b=sYiz1jJ5h7I838bkJvrYjblMIMk/TU/4Ta3Eo8H+Ls/NsTJiDcO4ksvrTrqRIXTBRDLDMt tENBMzp0hutr/PEOeWBtwzbR3Dak79BSw/Af06Z9lG6yxPrjnJx3C5fWoeVn5l6RdQiu84 6sl82ecrCRbvcD7O8gUA16QZR7oDQ/fyGOLdiIi8YyX+oup5sazgdw2PD48iuyXcfMWRES iZ0rwDhNPFZ+aNpoDx/cEY2ZGbe4kWklPKUiYM7633bp44CjbgfYk4wGIn+Ue+VkYNz5Nm fbe3nM6tm4YHKJ49nbm3oYhGaA66Wiu5MdSIndVWIC3RW/gBKDdoKjaAqaIxjA== 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=1784513946; 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=eACWbXqNrh2DnvmkkCYFNvBhAwqksdSln/bKZ21TkCs=; b=XJc8ktZRUrkp3r3LuYR/jUiitW6V6OWgjeOshLYJ0gdOyxxKMVC6AYdQOElLm/sYHru7+l aWs3J1Zw0x0tNOTcq/CO6Jyip2D2yw1ohgaL50ygR6rlJioBmErkb/5RyahpaxFZJozkVz +Q3T6n7+jxH3xJ85BCDODkZqHB09k5Mrer1CYpTSRjfpe6uga5o7vvttaq/j8h9ytEoN+m zBYEBJSKNKqwvOxbsB38jY7QWfLGYoIHQqZXLSSiYh57N4iFts2d/BXbU5jzlWuvw/GcsT CqDM9QlPNdZJwX1Q5UKfroyMjH4IJLiskZMzn+CvZjkXuEG+d584r3pwkZHKeA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3PMt0HdQzjdc for ; Mon, 20 Jul 2026 02:19:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 446bd by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 02:19:05 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Olivier Certner Subject: git: a6587ae0f46d - main - sched_ule: Fix selecting lowest priority thread early in corner case List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a6587ae0f46dba4e47fa92c831f55288ec181734 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 02:19:05 +0000 Message-Id: <6a5d8599.446bd.7312ac01@gitrepo.freebsd.org> The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=a6587ae0f46dba4e47fa92c831f55288ec181734 commit a6587ae0f46dba4e47fa92c831f55288ec181734 Author: Olivier Certner AuthorDate: 2026-06-16 21:06:36 +0000 Commit: Olivier Certner CommitDate: 2026-07-20 02:18:45 +0000 sched_ule: Fix selecting lowest priority thread early in corner case When transferring a thread with near 100% CPU statistics (but not 100%; up to 57.5/59≈97.46%) to a CPU where the enqueue offset is ahead of at least 2 from the dequeue one, which requires peculiar conditions to happen (transfer triggered by a bind request or cpuset change, or during balancing if a thread or more existed from a brief amount of time on the origin CPU), the transferred thread can get placed after the dequeue offset, effectively making it appear as a high priority one unduly, causing latency increase for other threads. The change here was missed when changing the enqueue and dequeue offsets update mechanism to recover pre-256-queue-runqueue ULE anti-starvation and fairness behavior. That change opened up the possibility that these two offsets are apart by more than one. Reviewed by: markj Discussed with: Minsoo Choo Fixes: 6792f3411f6d ("sched_ule: Recover previous nice and anti-starvation behaviors") MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57829 --- sys/kern/sched_ule.c | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/sys/kern/sched_ule.c b/sys/kern/sched_ule.c index cf0baabfda86..a9fe49b11ff7 100644 --- a/sys/kern/sched_ule.c +++ b/sys/kern/sched_ule.c @@ -484,6 +484,17 @@ sched_shouldpreempt(int pri, int cpri, int remote) return (0); } +static inline int +normalize_ts_off(int offset) +{ + /* + * Adding RQ_TS_POL_MODULO before taking the modulo is to ensure the + * dividend is positive (we want a positive result). + */ + MPASS(offset >= -RQ_TS_POL_MODULO); + return ((offset + RQ_TS_POL_MODULO) % RQ_TS_POL_MODULO); +} + /* * Add a thread to the actual run-queue. Keeps transferable counts up to * date with what is actually on the run-queue. Selects the correct @@ -517,18 +528,34 @@ tdq_runq_add(struct tdq *tdq, struct thread *td, int flags) /* Current queue from which processes are being run. */ idx = tdq->tdq_ts_deq_off; else { - idx = (RQ_PRI_TO_QUEUE_IDX(pri) - RQ_TS_POL_MIN + - tdq->tdq_ts_off) % RQ_TS_POL_MODULO; + idx = normalize_ts_off( + /* Offset corresponding to priority. */ + RQ_PRI_TO_QUEUE_IDX(pri) - RQ_TS_POL_MIN + + /* Insertion offset. */ + tdq->tdq_ts_off); /* - * We avoid enqueuing low priority threads in the queue - * that we are still draining, effectively shortening - * the runqueue by one queue. + * We avoid enqueuing low priority threads in the queues + * we still have to drain. This effectively shortens + * the runqueue by a few queues (see update of + * 'tdq_ts_deq_off' in sched_clock()). + * + * The expressions that include differences below are + * measuring the "distance" from the dequeue offset to + * either 'idx' or the insertion offset modulo + * RQ_TS_POL_MODULO. Thanks to the arithmetic operators + * always performing the usual arithmetic conversions, + * all operands are promoted to integers, which is + * necessary to accomodate corner cases (else + * we would have to be conditional on whether the first + * term is greater or lower than the second, in the + * second case correcting the result with UCHAR_MAX % + * RQ_TS_POL_MODULO). */ if (tdq->tdq_ts_deq_off != tdq->tdq_ts_off && - idx == tdq->tdq_ts_deq_off) - /* Ensure the dividend is positive. */ - idx = (idx - 1 + RQ_TS_POL_MODULO) % - RQ_TS_POL_MODULO; + normalize_ts_off(idx - tdq->tdq_ts_deq_off) < + normalize_ts_off(tdq->tdq_ts_off - + tdq->tdq_ts_deq_off)) + idx = normalize_ts_off(tdq->tdq_ts_deq_off - 1); } /* Absolute queue index. */ idx += RQ_TS_POL_MIN; From nobody Mon Jul 20 07:34:54 2026 X-Original-To: dev-commits-src-main@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 4h3XNG54Zyz6lVSY for ; Mon, 20 Jul 2026 07:34:54 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3XNG4XQfz3pD8 for ; Mon, 20 Jul 2026 07:34:54 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784532894; 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=ur25TYHIFNztRmsIR2eeNZ2tEsTVHhy1TOWpiJQ+1oc=; b=cNn3ehJlw/m9OdTXqUCyPXQER/auFolUV71+gewwr1G5KzYVHIedkCC3/Gk8rxJHPebJMR //qVQePATnU4nObYYfC8yOJPvCuRH3XpEldMGXqeweg2VSP0mYNTqpUF8YC7kgMG83q5ZB tOd+67z5i82vL381yf1t58vCjJYzN3xqP1VNoyzcd2P4EaqN2rIJYrv+YjupZx27VCSbPo KP+iYvBbz8ZLmjTFh9dGcXYRNfXuNFMFDDMdPDOMmumY01oDA9DJbAaKR0WR81+CjiTYh0 BPuyyJ5ws0ZN4SD+keWSgbq2R6UJZSQaY1TkLUhQFKtTbRT3x1Do5PT6GfD0yA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784532894; a=rsa-sha256; cv=none; b=t63XSkjhMFQUcUyE3rWniHi1LFPGj/20N8CkInPMM6c+7ieYI02j5/wWKsiE4x19Xki/iv OkixiQVUhQPvqaUtxaTbYfiE+jQNcVJeNY9C3EEeLZqMmtmM+RIkMwZ7fn5BqYtqJ7DOAq CJWhOBvXO+7mtYrpYWLmmG25+L1KiY1dRXZK8CoyaMEI97ucqnomq62ylNfYj25XToYRnb 1b6ATA0MJZXd1kZU2BoGAExSoE9KLa8PVfKtsLfxtx22TgkFPLTWjjW+kzIMrIucl7XjwZ kQegpKMdkOZHokhe2B34bXRx20rQVWPDwOl2GtTdJ2txiI/kWj3E2ZnZxw+5VA== 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=1784532894; 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=ur25TYHIFNztRmsIR2eeNZ2tEsTVHhy1TOWpiJQ+1oc=; b=UX83R2gkMiZ3voERDbQF2xNGnPmnOvm4wC+L3y9DIFRs/5yZUMDPAUmlIQ/c59VC03oRtW 2DcRQ61cBdfdI98hdylDhE9aoGBRDUnQT0IvN5AbbYvQ9qVdiQDb/62aT16Ki7FSbsWatP DQX/DAGzVku8N3DqwKEgc1sGCiK40zPthtFtCcsJGsWAz3V2Ruo4JkwRsVNShFPNSz2E5v e2Ancr9Ij9l0nl3u9nAfVqxTvdJiPp/M93jh8FcUR2SkD1ZTf7+A4yioD2oBfJB5gE1dlJ QNe3qplsO5jFSdYTJ20iFfnxEmY5o7iNee1g2+bg/iGodDeOwNupW4d7tNSerw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3XNG3FMGzshW for ; Mon, 20 Jul 2026 07:34:54 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 18782 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 07:34:54 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: ShengYi Hung Subject: git: 7fc2c9f688ef - main - apei: Fix i386 build over bus read, write function List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: aokblast X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7fc2c9f688efb12beddd58a01628157e32b632b0 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 07:34:54 +0000 Message-Id: <6a5dcf9e.18782.64d115f5@gitrepo.freebsd.org> The branch main has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=7fc2c9f688efb12beddd58a01628157e32b632b0 commit 7fc2c9f688efb12beddd58a01628157e32b632b0 Author: ShengYi Hung AuthorDate: 2026-07-20 07:26:56 +0000 Commit: ShengYi Hung CommitDate: 2026-07-20 07:34:42 +0000 apei: Fix i386 build over bus read, write function bus_{read,write}_8 are macro wrappers around the corresponding bus_space functions in sys/bus.h, so implementing bus_{read,write}_8 won't work. Implement the underlying bus_space function instead. Reviewed by: jrtc27, rlibby Fixes: 9313f6b01485 Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58301 --- sys/dev/acpica/apeivar.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/sys/dev/acpica/apeivar.h b/sys/dev/acpica/apeivar.h index 7820641aef1f..524bec4ab0d9 100644 --- a/sys/dev/acpica/apeivar.h +++ b/sys/dev/acpica/apeivar.h @@ -38,16 +38,17 @@ int apei_unmap_register(device_t dev, struct resource_map *map); #ifdef __i386__ static __inline uint64_t -bus_read_8(struct resource_map *res, bus_size_t offset) +bus_space_read_8(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset) { - return (bus_read_4(res, offset) | - ((uint64_t)bus_read_4(res, offset + 4)) << 32); + return (bus_space_read_4(tag, bsh, offset) | + ((uint64_t)bus_space_read_4(tag, bsh, offset + 4)) << 32); } static __inline void -bus_write_8(struct resource_map *res, bus_size_t offset, uint64_t val) +bus_space_write_8(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint64_t val) { - bus_write_4(res, offset, val); - bus_write_4(res, offset + 4, val >> 32); + bus_space_write_4(tag, bsh, offset, val); + bus_space_write_4(tag, bsh, offset + 4, val >> 32); } #endif From nobody Mon Jul 20 08:12:06 2026 X-Original-To: dev-commits-src-main@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 4h3YCB2nJTz6lXnP for ; Mon, 20 Jul 2026 08:12:06 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3YCB1tkLz3rkH for ; Mon, 20 Jul 2026 08:12:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784535126; 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=NNHcZgtK3dKx+3HQDJRxJr6rCsTyic5fvGRIV7LUhJ4=; b=ol3qQ5EHECAvM6E2/svju0nRzCSnjCMlQIf+Aufb/dZg1qjsHiWRSLkqZwwdG8KtVwlat7 AiEwNcsVe1Y8F0uR1tBA8pCJH5Tmb7j0a/9OoUwPI4M8FrkxDc3WYUKg2B0B4A+6+NGf+V h2ehsj1IwRC63J80sL2umv7Ym+LIWcxCwi/jRlw1+dqT3xoQJeqcnmCPysevOGaG8+aqou I3LMQIEMExtrQEfMezrDwsCX5kTJRBCSEOADbzwuZB1lKvP6btFpN00TfJBuNcR87/a2S/ wptNCIvGQ+chXuZfGEr4Li0kLKcaVCve+kPII3DeuPd2HclhBuvigZqIohgM7w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784535126; a=rsa-sha256; cv=none; b=Fb4QQtNsqciZzRFBTWTq0y4L6nqOeqQ3aNUxon0RbNi6F8+qCDJQNwNRnb+OIo42WUF3K1 QDroX3qbHj6eguuXFhwXAVLDk+q4K0pamAR1rwGsMaipDV3AcRiKYynNuOt9hU0udp+ISd Dc53/d6WWqzabYP+2DTuBZtCqeD/MtsoYq4I8ofqE1CBci/c/353vLmfNH1sblGOYB7OL8 FAYWZbG9jmAlze/wnV4SRtv3fezOmCWnwPfrrqDZ26FJ6xdYkLicqOfngCoNwHpXWvpQ6s cJvWdCZ3pKTGk1b7wTrspvWI/fqLK3xebN4OJLWMTg6qAOXzUlVyL3j1Mew+OA== 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=1784535126; 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=NNHcZgtK3dKx+3HQDJRxJr6rCsTyic5fvGRIV7LUhJ4=; b=xYzpNyGV5gO2aOLltRq93VbRSaZvyjtmhs340Dn/0Ivakah1s3xdkd5LpfSVn+u6ZThl0R Vgra6aU8sOckH8XD+FOaJCiafUuHd0VKrX9nOxnuaxsfqIPpxQudIceJz0q6CMmLGFZqgR iaTz6CpCiGZJ88uW6RkiQ77orXCjc7xV1VqYN/lDHkdoyYO/3sVXiZXzVqytTdFfL0UmSm CmabrwFBP18X5cZePeOsLS+ZILxq+1LZWVfMymFuIS7/laBQnHYBHDYFb3kw5FGoaUeR1r 5H5TbZw/Ql445dW3Eb5cjNt6uWoJfxfzwcz28GDu8v6iXOe/y4p9bndRpl1fZA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3YCB0gTsztx4 for ; Mon, 20 Jul 2026 08:12:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1cd9d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 08:12:06 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: ShengYi Hung Subject: git: b8f1972d51cf - main - hexdump: Support octal and hex for -N option List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: aokblast X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b8f1972d51cf93ba4393d621b126dbd408423b87 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 08:12:06 +0000 Message-Id: <6a5dd856.1cd9d.3992ac6@gitrepo.freebsd.org> The branch main has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=b8f1972d51cf93ba4393d621b126dbd408423b87 commit b8f1972d51cf93ba4393d621b126dbd408423b87 Author: ShengYi Hung AuthorDate: 2026-07-07 04:49:48 +0000 Commit: ShengYi Hung CommitDate: 2026-07-20 08:11:54 +0000 hexdump: Support octal and hex for -N option GNU hexdump supports octal and hex, we add supports for BSD style hexdump for better compatibility. See: https://github.com/llvm/llvm-project/pull/206581/ MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58074 --- usr.bin/hexdump/odsyntax.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr.bin/hexdump/odsyntax.c b/usr.bin/hexdump/odsyntax.c index 6c7ca55c3232..62d427a86e5d 100644 --- a/usr.bin/hexdump/odsyntax.c +++ b/usr.bin/hexdump/odsyntax.c @@ -139,7 +139,7 @@ oldsyntax(int argc, char ***argvp) errx(1, "%s: invalid skip amount", optarg); break; case 'N': - if ((length = atoi(optarg)) <= 0) + if ((length = strtol(optarg, NULL, 0)) <= 0) errx(1, "%s: invalid length", optarg); break; case 'O': From nobody Mon Jul 20 10:25:13 2026 X-Original-To: dev-commits-src-main@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 4h3c8p3dfgz6ljr2 for ; Mon, 20 Jul 2026 10:25:14 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3c8p1ZbPz4599 for ; Mon, 20 Jul 2026 10:25:14 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784543114; 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=J23DC2I44bJ04uenN1P6HALpLRjH354DUgM8ebiaB+o=; b=IPqbkEGypdWt4FZM1vLCyRk9Z1nwCDn/ES5aWn5rqteXQ3KCRTNhsd+OQl/wmaoDHQ7snq N2zvFN6EwvnWyKmuv+QBhFuhYa/UIpFireBb5obO+g8JXCwxyqq5NsufT8Kk4BPHYPgKKT 3u4WQlxqaUkK6rRFbpXIEJj7BDsJAC5Hzq/xuiucck0UyauCMzmKmMSU6RXWjdNX9QM81v wb//CLNtEb+uUZly8byJJG25ft/R/Ax40N9DT+ueSP3ZRVIQC98NX7eHXPHY5+pisudNAv rPwO8KLHwoUFPnwYcitGAJZlIyNeuit1VY4qLbhj1S80DgbZfIEXeWu3YtDBag== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784543114; a=rsa-sha256; cv=none; b=OrHkUmDMIcJV5RLNrJw3SNozr1cJfyHt0iUoJ76OCGJ9LhKzAHgFwNXwAfI65jCQe5pCaj YHac6hq47sxEnNz4SFsOQHDBBRwj7SLrilma9bZPMFEnSpNKkc2s06LZUv8W1Wk9ovjRAb JMVMZO2jEfnD3nlKGzBxy19H/ckJ6cCG2AMTGpZP+4hGmVScX37FqLdq5V8QQ3BdLSl5gr WrtZ/teka/EqNQxGFj3tTC6ZxlWWXVhwg3a0yIFfMVangStqXgQqjmuZsHnf03lC/CFRre H8NucgbTJyZkpscrv0fr13VZjLy4nu+uItXKYf+amZjxPEtoYCR1WM34nuYjuA== 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=1784543114; 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=J23DC2I44bJ04uenN1P6HALpLRjH354DUgM8ebiaB+o=; b=O7zF7tbMuwXo2PeSW4VqSTPvTGTa+Hp+3gjkQk6AYY0Sg7uYQ1cR9DLhdIqzfEHligULU2 jMJFjMRJPWma6ZkFkNcwHVG7Tn3qfDS6ktZx5KW4A6uJDVpVhKNEB6kbuuSqTq64aD5r/V cU23vtT2R4LLZTqdGi7OD0ZakFkBu0sljW34r3kc4bEzR4TkRsMOtCz5qHcvVqzqpe0Bei OofrxmXtLUM41fxu+buZvsXNxG91TgjjOWlaikRgS/Xc/cG9U2rqwStsRur+Y/uz9eD0RV vvRZZejPUz7ytHjpXqInn8cJ2XC0bBD423tGhQANDctWUxMzYF9FkzurllMQ2A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3c8p0PFFzyG0 for ; Mon, 20 Jul 2026 10:25:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3127c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 10:25:13 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Alexander Leidinger Subject: git: e42703f5c4b2 - main - hwpmc: handle counter wraparound for process-mode counting PMCs List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: netchild X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e42703f5c4b2d3a869b17e2cb8670f1b6359c8cf Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 10:25:13 +0000 Message-Id: <6a5df789.3127c.4e973f46@gitrepo.freebsd.org> The branch main has been updated by netchild: URL: https://cgit.FreeBSD.org/src/commit/?id=e42703f5c4b2d3a869b17e2cb8670f1b6359c8cf commit e42703f5c4b2d3a869b17e2cb8670f1b6359c8cf Author: Alexander Leidinger AuthorDate: 2026-07-19 07:38:52 +0000 Commit: Alexander Leidinger CommitDate: 2026-07-20 10:24:18 +0000 hwpmc: handle counter wraparound for process-mode counting PMCs The accumulated count of a process-mode counting PMC is kept in a 64-bit software counter and seeded into the hardware counter at every context switch in. Hardware counters are narrower than that - each PMC class discovers and records its own counter width, e.g. 48 bits on current x86 (queried from CPUID on Intel, architectural on AMD) - so once the accumulated count approaches the end of the hardware counter range, the counter wraps during a time slice and the value read back at switch out is smaller than the value seeded. The increment was computed assuming a full 64-bit counter: on INVARIANTS kernels a long enough counting run panics with "negative increment" the moment the accumulated count first crosses the hardware counter range, and on other kernels the totals silently lose a full counter range per wrap. Compute the increment modulo the per-class hardware counter width instead, in both places that accumulate switch-out deltas. Reviewed by: adrian MFC after: 2 weeks Assisted-by: Claude Code (Fable 5) Differential Revision: https://reviews.freebsd.org/D58340 --- sys/dev/hwpmc/hwpmc_mod.c | 46 ++++++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/sys/dev/hwpmc/hwpmc_mod.c b/sys/dev/hwpmc/hwpmc_mod.c index 9533cb81b4a1..086a05657cfe 100644 --- a/sys/dev/hwpmc/hwpmc_mod.c +++ b/sys/dev/hwpmc/hwpmc_mod.c @@ -1594,6 +1594,24 @@ pmc_process_csw_in(struct thread *td) critical_exit(); } +/* + * Compute the change in a counter's value since it was last written. + * The hardware counter is only pcd_width bits wide and wraps around, + * while the value seeded into it may occupy the full 64-bit range, so + * take the difference modulo the counter width. + */ +static pmc_value_t +pmc_delta(const struct pmc_classdep *pcd, pmc_value_t newvalue, + pmc_value_t oldvalue) +{ + pmc_value_t delta; + + delta = newvalue - oldvalue; + if (pcd->pcd_width < 64) + delta &= ((pmc_value_t)1 << pcd->pcd_width) - 1; + return (delta); +} + /* * Thread context switch OUT. */ @@ -1606,8 +1624,7 @@ pmc_process_csw_out(struct thread *td) struct pmc_process *pp; struct pmc_thread *pt = NULL; struct proc *p; - pmc_value_t newvalue; - int64_t tmp; + pmc_value_t newvalue, tmp; enum pmc_mode mode; int cpu; u_int adjri, ri; @@ -1745,23 +1762,19 @@ pmc_process_csw_out(struct thread *td) } mtx_pool_unlock_spin(pmc_mtxpool, pm); } else { - tmp = newvalue - PMC_PCPU_SAVED(cpu, ri); + /* + * For counting process-virtual PMCs, the + * hardware counter's value increases + * monotonically modulo the counter width; + * pmc_delta() recovers the increment even + * when the counter wrapped during the run. + */ + tmp = pmc_delta(pcd, newvalue, + PMC_PCPU_SAVED(cpu, ri)); PMCDBG3(CSW,SWO,1,"cpu=%d ri=%d tmp=%jd (count)", cpu, ri, tmp); - /* - * For counting process-virtual PMCs, - * we expect the count to be - * increasing monotonically, modulo a 64 - * bit wraparound. - */ - KASSERT(tmp >= 0, - ("[pmc,%d] negative increment cpu=%d " - "ri=%d newvalue=%jx saved=%jx " - "incr=%jx", __LINE__, cpu, ri, - newvalue, PMC_PCPU_SAVED(cpu, ri), tmp)); - mtx_pool_lock_spin(pmc_mtxpool, pm); pm->pm_gv.pm_savedvalue += tmp; pp->pp_pmcs[ri].pp_pmcval += tmp; @@ -5177,7 +5190,8 @@ pmc_process_exit(void *arg __unused, struct proc *p) if (PMC_TO_MODE(pm) == PMC_MODE_TC) { pcd->pcd_read_pmc(cpu, adjri, pm, &newvalue); - tmp = newvalue - PMC_PCPU_SAVED(cpu, ri); + tmp = pmc_delta(pcd, newvalue, + PMC_PCPU_SAVED(cpu, ri)); mtx_pool_lock_spin(pmc_mtxpool, pm); pm->pm_gv.pm_savedvalue += tmp; From nobody Mon Jul 20 10:25:15 2026 X-Original-To: dev-commits-src-main@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 4h3c8q2qtcz6ljc5 for ; Mon, 20 Jul 2026 10:25:15 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3c8q2DxGz44mW for ; Mon, 20 Jul 2026 10:25:15 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784543115; 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=BB7U7Tna5rq2BRGYhqLZ5kcdC7TYI3DJNcd09I1IfmI=; b=gVnz3uCiScce/Iv8XNJ8hVEHNFJqc3jzt/IM3lbw1YaRAu6DxwOxeUxxJdSx5OiHBOP17L yKP71T7fjTS3VmQqjUsuYKGe0uJ2moMuRIEmiMCxbO350yxTIA8kETK2PS1W5JZawOgvmM 6Xp/6GMYyRwdNRgeoygYbg1/GOcqRscVsgoEmYbZsZH2mj3nUGIwjq9xWJLrjHiYMDthmV holz9vCYLhKVrpjABqC78wz0ZlefjEE8+motttzOJDKcNn1wbXSqukDl81qbNX6K2mRVPx 4PqsvJkPPlfVrNzB5qy/mhJ0ULqoHz7kkaGrbyJXM5NmK4opkmWPBAphzh4UmA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784543115; a=rsa-sha256; cv=none; b=oaGmVFibs2mWF7TxvPdQQ2ZiP0jeS+WYSE5r4VbrOg1VGiyC+ikKzfl8KlknMCY5KzRn2C VOL5vhCSntJ9IBsuE1giEwIwlr5nWsZSyltfm22kUU5DchgTJHOQtNrEyIt3uu59YRkOHO Ip1FkeJJwHBl6pTH4VhSQsKPzCEQsNmwFiSMypP9KpC3C2K3TqeFfj+VrG4gDBxkgKfj0T xfJju/nxvygDhcvTdK7u03OnoiLlE8GJ5K7UYw/GSPw6/GoPhryeLh/QgKj+gWjYmANGqS dIAnMh4ojir0mKTUFKDf+qvFCgKdjw+O9IRFwP6/u+tBG3iXrL9hybwpQfH5mQ== 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=1784543115; 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=BB7U7Tna5rq2BRGYhqLZ5kcdC7TYI3DJNcd09I1IfmI=; b=Ih8N9Ao0z0Gu/Xovj7HBslC0q9Lg6D9xXggefD+ue17s9sKtozEeISgHXC1pjA9Hr0nE9w NBmcP6VcG9AkMnzCnlk2KD32Y7CLLQKX3lE107rnE/jXJzlUlj1n17MTxc1DURY3iH/YfR JjtJpeELvpyfNjKTwob7MX0J7N1RrAh8KgSkY/JCwNkazfrFZ0jg3R/k96CUToHgGUB1ts 9S1jTEtjF8zCWOQjRmJFuUyTS2IAXedvDCoKK90FuCsen5yB5xFwwXKLXMah1JbYs6++P5 bzEFHF0/Ilka7hX+//bPmC8K1tvRpjyyhNBFtrv5MqVhjD6CJgI4o9NhoPwfCQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3c8q0lN0zxxf for ; Mon, 20 Jul 2026 10:25:15 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 314a2 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 10:25:15 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Alexander Leidinger Subject: git: 2cfd82f747c0 - main - hwpmc: add regression tests for counting-PMC counter wraparound List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: netchild X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2cfd82f747c04f68f679824ba627460e87ab3848 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 10:25:15 +0000 Message-Id: <6a5df78b.314a2.2f5ef495@gitrepo.freebsd.org> The branch main has been updated by netchild: URL: https://cgit.FreeBSD.org/src/commit/?id=2cfd82f747c04f68f679824ba627460e87ab3848 commit 2cfd82f747c04f68f679824ba627460e87ab3848 Author: Alexander Leidinger AuthorDate: 2026-07-19 08:08:48 +0000 Commit: Alexander Leidinger CommitDate: 2026-07-20 10:24:36 +0000 hwpmc: add regression tests for counting-PMC counter wraparound Exercise a process-mode counting PMC whose accumulated count crosses, or already exceeds, the range of the underlying hardware counter. Before the previous commit, the first context switch after the hardware counter wrapped panicked INVARIANTS kernels with "negative increment" and silently corrupted the accumulated count on other kernels. The tests need a hardware counting event backed by a counter narrower than 64 bits and skip where none is available (hwpmc(4) not loaded, or a VM without a vPMU). Reviewed by: adrian MFC after: 2 weeks Assisted-by: Claude Code (Fable 5) Differential Revision: https://reviews.freebsd.org/D58341 --- etc/mtree/BSD.tests.dist | 2 + tests/sys/Makefile | 1 + tests/sys/pmc/Makefile | 7 ++ tests/sys/pmc/pmc_wrap_test.c | 216 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 226 insertions(+) diff --git a/etc/mtree/BSD.tests.dist b/etc/mtree/BSD.tests.dist index 004be9536f1f..dec5bf53ebeb 100644 --- a/etc/mtree/BSD.tests.dist +++ b/etc/mtree/BSD.tests.dist @@ -971,6 +971,8 @@ utimensat .. .. + pmc + .. posixshm .. ses diff --git a/tests/sys/Makefile b/tests/sys/Makefile index ccdc29886d23..7e7f35ded73f 100644 --- a/tests/sys/Makefile +++ b/tests/sys/Makefile @@ -30,6 +30,7 @@ TESTS_SUBDIRS+= netlink TESTS_SUBDIRS+= netmap TESTS_SUBDIRS+= netpfil TESTS_SUBDIRS+= opencrypto +TESTS_SUBDIRS+= pmc TESTS_SUBDIRS+= posixshm TESTS_SUBDIRS+= ses TESTS_SUBDIRS+= sound diff --git a/tests/sys/pmc/Makefile b/tests/sys/pmc/Makefile new file mode 100644 index 000000000000..403acd0311ce --- /dev/null +++ b/tests/sys/pmc/Makefile @@ -0,0 +1,7 @@ +TESTSDIR= ${TESTSBASE}/sys/pmc + +ATF_TESTS_C= pmc_wrap_test + +LIBADD+= pmc + +.include diff --git a/tests/sys/pmc/pmc_wrap_test.c b/tests/sys/pmc/pmc_wrap_test.c new file mode 100644 index 000000000000..58e7b3ef416a --- /dev/null +++ b/tests/sys/pmc/pmc_wrap_test.c @@ -0,0 +1,216 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2026 Alexander Leidinger + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other advertising materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * Regression tests for process-mode counting PMCs whose accumulated + * count is close to, or beyond, the range of the underlying hardware + * counter. Hardware counters are narrower than the 64-bit software + * counter (48 bits on modern x86), and the increment collected when a + * counter is read out (at context switch and at process exit) must be + * computed modulo the hardware width. + * + * Before the fix these tests panicked INVARIANTS kernels with + * "[pmc,...] negative increment" once the hardware counter wrapped, + * and silently corrupted the accumulated count on other kernels. + * + * The counter is attached to a short-lived child process which spins + * to advance it; the child exits before the PMC is released, so the + * accounting is torn down cleanly (the accumulation is collected on + * the exit path, which is one of the two sites the fix touches). + * + * The tests need a hardware counting event whose counter is narrower + * than 64 bits; they skip on systems without one (e.g. VMs without a + * vPMU, or with hwpmc(4) not loaded). + */ + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +/* + * High-rate events; at least one of these should be allocatable on + * any x86 or arm64 system with a vPMU. All of them count while the + * child's spin loop runs. + */ +static const char *wrap_test_events[] = { + "instructions", + "cycles", + "branches", + "unhalted-core-cycles", + "inst_retired.any", + "cpu_clk_unhalted.thread", + "ls_not_halted_cyc", + NULL +}; + +/* The child generates well more than this many events past the seed. */ +#define WRAP_MARGIN ((uint64_t)1 << 20) + +/* Spin iterations: comfortably more than WRAP_MARGIN events, still < 1s. */ +#define SPIN_ITERS ((uint64_t)200 * 1000 * 1000) + +/* Upper bound on events a single test run can plausibly generate. */ +#define SANITY_BOUND ((uint64_t)1 << 40) + +/* + * Child: wait for the parent to start the PMC (one byte on the pipe), + * spin to advance the counter across the end of its range, then exit. + */ +static void __attribute__((noinline)) +child_spin(int startfd) +{ + volatile uint64_t sink = 0; + uint64_t i; + char c; + + (void)read(startfd, &c, 1); + for (i = 0; i < SPIN_ITERS; i++) + sink += i; + _exit((int)(sink & 0x7f)); +} + +/* + * Allocate a process-mode counting PMC for the first available event + * backed by a counter narrower than 64 bits, attach it to a child, + * seed it with the given value, let the child spin past the end of + * the counter range, and check that the accumulated count stayed sane. + */ +static void +wrap_test(bool seed_beyond_width) +{ + pmc_id_t pmcid; + pmc_value_t final; + uint64_t seed; + uint32_t width; + pid_t child; + int i, pfd[2], status; + + if (pmc_init() != 0) + atf_tc_skip("hwpmc(4) is not available: %s", strerror(errno)); + + width = 0; + pmcid = PMC_ID_INVALID; + for (i = 0; wrap_test_events[i] != NULL; i++) { + if (pmc_allocate(wrap_test_events[i], PMC_MODE_TC, 0, + PMC_CPU_ANY, &pmcid, 0) != 0) + continue; + ATF_REQUIRE(pmc_width(pmcid, &width) == 0); + if (width >= 32 && width < 64) + break; + ATF_REQUIRE(pmc_release(pmcid) == 0); + pmcid = PMC_ID_INVALID; + } + if (pmcid == PMC_ID_INVALID) + atf_tc_skip("no allocatable counting event with a hardware " + "counter narrower than 64 bits"); + + if (seed_beyond_width) { + /* Accumulated count that no longer fits the counter at all. */ + seed = ((uint64_t)1 << width) + 12345; + } else { + /* Just below the end of the counter range; the child crosses it. */ + seed = ((uint64_t)1 << width) - WRAP_MARGIN; + } + + ATF_REQUIRE(pipe(pfd) == 0); + child = fork(); + ATF_REQUIRE(child >= 0); + if (child == 0) { + close(pfd[1]); + child_spin(pfd[0]); + /* NOTREACHED */ + } + close(pfd[0]); + + ATF_REQUIRE(pmc_attach(pmcid, child) == 0); + ATF_REQUIRE(pmc_write(pmcid, seed) == 0); + ATF_REQUIRE(pmc_start(pmcid) == 0); + + /* Release the child, which spins and exits. */ + ATF_REQUIRE(write(pfd[1], "g", 1) == 1); + close(pfd[1]); + ATF_REQUIRE(waitpid(child, &status, 0) == child); + + /* + * The child is gone: its final increment was collected on the + * exit path. Read the accumulated 64-bit count and stop. + */ + ATF_REQUIRE(pmc_read(pmcid, &final) == 0); + (void)pmc_stop(pmcid); + + ATF_CHECK_MSG(final >= seed, + "accumulated count went backwards: seed 0x%jx, final 0x%jx " + "(width %u)", (uintmax_t)seed, (uintmax_t)final, width); + ATF_CHECK_MSG(final - seed < SANITY_BOUND, + "accumulated count jumped implausibly: seed 0x%jx, final 0x%jx " + "(width %u)", (uintmax_t)seed, (uintmax_t)final, width); + + ATF_REQUIRE(pmc_release(pmcid) == 0); +} + +ATF_TC(counting_pmc_wraps_hardware_counter); +ATF_TC_HEAD(counting_pmc_wraps_hardware_counter, tc) +{ + atf_tc_set_md_var(tc, "descr", + "A process-mode counting PMC survives its hardware counter " + "wrapping around while the counted process runs"); + atf_tc_set_md_var(tc, "require.user", "root"); +} +ATF_TC_BODY(counting_pmc_wraps_hardware_counter, tc) +{ + wrap_test(false); +} + +ATF_TC(counting_pmc_beyond_hardware_width); +ATF_TC_HEAD(counting_pmc_beyond_hardware_width, tc) +{ + atf_tc_set_md_var(tc, "descr", + "A process-mode counting PMC keeps counting correctly once " + "its accumulated count exceeds the hardware counter range"); + atf_tc_set_md_var(tc, "require.user", "root"); +} +ATF_TC_BODY(counting_pmc_beyond_hardware_width, tc) +{ + wrap_test(true); +} + +ATF_TP_ADD_TCS(tp) +{ + ATF_TP_ADD_TC(tp, counting_pmc_wraps_hardware_counter); + ATF_TP_ADD_TC(tp, counting_pmc_beyond_hardware_width); + + return (atf_no_error()); +} From nobody Mon Jul 20 10:25:16 2026 X-Original-To: dev-commits-src-main@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 4h3c8r4mMqz6ljx0 for ; Mon, 20 Jul 2026 10:25:16 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3c8r2kxbz44pw for ; Mon, 20 Jul 2026 10:25:16 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784543116; 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=pHcjl5K/3JsfBWVf9+PPkneYnE0b91jtNhGG+gfNoMQ=; b=ju/L5rgRWHdGnHU4SfaJb/OC7s5lbZLuOH5xva8e2sgKbC9TND6iXyos3PUfKLJoZCE4Ug vwG7ieQmTu6Eu9EGCUavSXjRlEI8tWc7qq1Ibln7VQKkJbdvSgBbnhFnWBLC94uJn8l9x6 1rY2yLbwsLdNum6/UPepmBmZJUV5ThytmUAcfaq2C+DpLiETv0cR5+oV7GIHn0RLYx3HPG Ng0k8PMLZ79umsle/eFs+8FzOFcd20cLfyWD2R/X356x45OobQWIEGNHXvVAmPAN2AdfxH 3fbNMLunscagKPYGyc+772XU8Op2O+38tJcH6Ua0skoathK1pGnYEn56Jh7xlQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784543116; a=rsa-sha256; cv=none; b=VMMMajJb55hF6BaUiKozx/HfWW2I9VKpr6jXKUcaabrB9IZRjqav6E7qa4dD6DLPNr62AI ztmNiMiQUIKrJrrhSw85cYaseVIm8kNQsyN4V01bJSBHr4pr3qa3O+aKmaG8D1P8CFput4 NUoi76hvNyT/mdSUgBwI5uDx1Hm7SmzN6PZCO1ql7I4ICDDz0tMhKurAIhLXz1xB0vlIw6 2Q+7AJOEny1ree9JUEDJgPEGt1xa1A2tslmKfyVNtKen+QtT3jX/O8rT+EU1ZYqsbyJ7C2 cU7l+3WxAVo03XM69zC80h3BKTRVlf3sxh9/DdSELMsdimL6/G5JZ+sLDrqhBw== 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=1784543116; 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=pHcjl5K/3JsfBWVf9+PPkneYnE0b91jtNhGG+gfNoMQ=; b=kW++HUBJCeDkNITy8KV72Gqr23uv4pjUeMKXhYgyu8DwgA6AR7EkYpIqqO944BfMmaU/se rJaHVbnZVN1id3tm9aWhAHZ41CbNy2KgeX6OKERtw8EHd/sfscA80Eu3ROYM13/i0t9cpS Wz/TrwDsHTX2hOq8Q0ekMEx92zT6C/QUCFsrv/ofyg8cv3u1fc5wtqvllt0FRS2Vl5prvQ GUfeI9p392elh/soV3/TqCxZM/ow+kFVFsAuX+Ga0C+yeqBb/Sn/Jv6QwEiTFmtkxF5kUz 1rR7qrag5fGXgBTxIhfvNOMQhMmu3WlDN5WMqzkqo8tfkVJVbO+CX/AGCKghRw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3c8r1dYczy3h for ; Mon, 20 Jul 2026 10:25:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 33323 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 10:25:16 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Alexander Leidinger Subject: git: 86fa065f1862 - main - hwpmc: drain a process-mode PMC's runcount when a live target detaches List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: netchild X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 86fa065f1862f3b638efa1868523878d9db14ada Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 10:25:16 +0000 Message-Id: <6a5df78c.33323.733bf27@gitrepo.freebsd.org> The branch main has been updated by netchild: URL: https://cgit.FreeBSD.org/src/commit/?id=86fa065f1862f3b638efa1868523878d9db14ada commit 86fa065f1862f3b638efa1868523878d9db14ada Author: Alexander Leidinger AuthorDate: 2026-07-19 11:39:27 +0000 Commit: Alexander Leidinger CommitDate: 2026-07-20 10:24:46 +0000 hwpmc: drain a process-mode PMC's runcount when a live target detaches A process-mode PMC's runcount tracks how many CPUs currently have it loaded in hardware. It is decremented only by the context-switch-out and process-exit reclaim paths, both of which the scheduler invokes only for processes flagged P_HWPMC. Detaching a target that still has the PMC live in hardware dropped the target and cleared P_HWPMC without taking the PMC off the hardware or dropping the runcount reference, so the reference leaked. A subsequent release then spun in pmc_wait_for_pmc_idle() forever waiting for the runcount to reach zero: on an INVARIANTS kernel this panics ("waiting too long for pmc to be free"), otherwise it is an unkillable loop holding the hwpmc lock. Any process able to allocate a PMC can trigger this by attaching a counting PMC to itself and detaching it before releasing. Take the PMC off the hardware and drop the runcount reference as part of detaching, before P_HWPMC is cleared: reclaim it from the detaching thread's own CPU directly, and, when the detach removes the PMC's last target, wait for any references held by the target's other threads to drain while P_HWPMC is still set (they can no longer reload it). Reviewed by: adrian MFC after: 2 weeks Assisted-by: Claude Code (Fable 5) Differential Revision: https://reviews.freebsd.org/D58342 --- sys/dev/hwpmc/hwpmc_mod.c | 88 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/sys/dev/hwpmc/hwpmc_mod.c b/sys/dev/hwpmc/hwpmc_mod.c index 086a05657cfe..efc2aefec2b9 100644 --- a/sys/dev/hwpmc/hwpmc_mod.c +++ b/sys/dev/hwpmc/hwpmc_mod.c @@ -225,6 +225,8 @@ static int pmc_detach_one_process(struct proc *p, struct pmc *pm, static void pmc_destroy_owner_descriptor(struct pmc_owner *po); static void pmc_destroy_pmc_descriptor(struct pmc *pm); static void pmc_destroy_process_descriptor(struct pmc_process *pp); +static void pmc_reclaim_pmc_from_cpu(struct pmc *pm, + struct pmc_process *pp, int cpu); static struct pmc_owner *pmc_find_owner_descriptor(struct proc *p); static int pmc_find_pmc(pmc_id_t pmcid, struct pmc **pm); static struct pmc *pmc_find_pmc_descriptor_in_process(struct pmc_owner *po, @@ -1241,6 +1243,21 @@ pmc_detach_one_process(struct proc *p, struct pmc *pm, int flags) if (pp->pp_pmcs[ri].pp_pmc != pm) return (EINVAL); + /* + * If this is a process-virtual PMC that is still loaded on the + * hardware of the CPU we are running on (the common case when a + * process detaches a PMC from itself), take it off and drop its + * runcount reference now. The reference is otherwise only + * dropped by the switch-out reclaim, which the scheduler stops + * calling once P_HWPMC is cleared below - leaking it and later + * wedging pmc_wait_for_pmc_idle() at release time. + */ + if (PMC_IS_VIRTUAL_MODE(PMC_TO_MODE(pm))) { + critical_enter(); + pmc_reclaim_pmc_from_cpu(pm, pp, curthread->td_oncpu); + critical_exit(); + } + pmc_unlink_target_process(pm, pp); /* Issue a detach entry if a log file is configured */ @@ -1259,6 +1276,22 @@ pmc_detach_one_process(struct proc *p, struct pmc *pm, int flags) if (pp->pp_refcnt != 0) /* still a target of some PMC */ return (0); + /* + * This detach removed the process' last PMC and we are about to + * clear P_HWPMC. If the detached PMC was its last target and is + * still loaded on other CPUs (e.g. sibling threads of a + * multi-threaded target, or a target running on another CPU), + * drain those references first: the target is already unlinked so + * it cannot reload the PMC, and P_HWPMC is still set so those + * CPUs' switch-out reclaim still runs. Bounded by the target + * threads being scheduled out. + */ + if (PMC_IS_VIRTUAL_MODE(PMC_TO_MODE(pm)) && + LIST_EMPTY(&pm->pm_targets)) { + while (counter_u64_fetch(pm->pm_runcount) > 0) + pmc_force_context_switch(); + } + pmc_remove_process_descriptor(pp); if (flags & PMC_FLAG_REMOVE) @@ -1612,6 +1645,61 @@ pmc_delta(const struct pmc_classdep *pcd, pmc_value_t newvalue, return (delta); } +/* + * Take a process-virtual PMC off the hardware of 'cpu' if it is + * currently loaded there for process 'pp', accumulating its final + * count and dropping its runcount reference. This is the same reclaim + * that context switch out and process exit perform, factored out so it + * can also run when a target is detached while the PMC may still be + * live: the runcount reference is decremented by the switch-out reclaim + * only, which the scheduler gates on P_HWPMC, so a detach that clears + * P_HWPMC without draining would leak the reference and later wedge + * pmc_wait_for_pmc_idle(). Must be called in a critical section. + */ +static void +pmc_reclaim_pmc_from_cpu(struct pmc *pm, struct pmc_process *pp, int cpu) +{ + struct pmc_classdep *pcd; + struct pmc *phw_pm; + pmc_value_t newvalue, tmp; + u_int adjri, ri; + + ri = PMC_TO_ROWINDEX(pm); + pcd = pmc_ri_to_classdep(md, ri, &adjri); + + /* Only reclaim if this PMC is actually loaded on this CPU. */ + phw_pm = NULL; + (void)(*pcd->pcd_get_config)(cpu, adjri, &phw_pm); + if (phw_pm != pm) + return; + + KASSERT(counter_u64_fetch(pm->pm_runcount) > 0, + ("[pmc,%d] pm=%p runcount %ju", __LINE__, pm, + (uintmax_t)counter_u64_fetch(pm->pm_runcount))); + + if (pm->pm_pcpu_state[cpu].pps_cpustate) { + pm->pm_pcpu_state[cpu].pps_cpustate = 0; + if (pm->pm_pcpu_state[cpu].pps_stalled == 0) { + (void)pcd->pcd_stop_pmc(cpu, adjri, pm); + + if (PMC_TO_MODE(pm) == PMC_MODE_TC) { + (void)pcd->pcd_read_pmc(cpu, adjri, pm, + &newvalue); + tmp = pmc_delta(pcd, newvalue, + PMC_PCPU_SAVED(cpu, ri)); + + mtx_pool_lock_spin(pmc_mtxpool, pm); + pm->pm_gv.pm_savedvalue += tmp; + pp->pp_pmcs[ri].pp_pmcval += tmp; + mtx_pool_unlock_spin(pmc_mtxpool, pm); + } + } + } + + counter_u64_add(pm->pm_runcount, -1); + (void)pcd->pcd_config_pmc(cpu, adjri, NULL); +} + /* * Thread context switch OUT. */ From nobody Mon Jul 20 10:25:17 2026 X-Original-To: dev-commits-src-main@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 4h3c8s645rz6ljx3 for ; Mon, 20 Jul 2026 10:25: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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3c8s3PBsz44n0 for ; Mon, 20 Jul 2026 10:25:17 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784543117; 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=IGMSlDBVo58QNp6JnTU9A3WGCOVMg8JazClC4/z1+sM=; b=qYQAhXiUAvo8m9ws8gnC/BPa9CiHaIYMrAs8SUl0GCza7FBqu/73EeTSvI/Z+CTCoGyS4I FBgoQeWJ4A2t3u0oOzIuwUKEWKxz/k56vW153VPmqUO+3tMJeJ1R72XcxIsG7i3igDepXd g1b6iJBg5f2ahXdcNbmrZ2F11G68nEVHo03iyMKvi9ly1OMFQaj1L212EuAagmbJucTGLR Ij1xXeVPat8LwGcXv1KE52gRg8vmsDUcZhGc+BkgR3NWjvawMHsw13FJUNYtbbadsHcHXQ NzCxcF8il2AtleAmjPmobCSpemvNWl9Zro7SJciG7FRhp1npmfUhALfDGh9APw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784543117; a=rsa-sha256; cv=none; b=ePun5qocASUHvvWrsOEN48DwMrxirm79B+L03O8wEZgdvHPEk9Z+42eUc+Z/3Xl5IzZPFu n+smEBhBcwk3G0of7VGz7jqb+3FmXDMVBiWYVPV0NQGVKl57rBiohkdvvZ2IaLeTHT+tfO 59AzTld5z1tZ0jUAWuYrI51EMaHYbGwjSzDutYbYNpO0a9PC2YUwHQt+U47Xv65PMkoeJz SXfrIPdhOj8CAY5L5nZNPXN9fCSC0GSEUe8WtPaummePH04EN/Wmf8HlgzB6dCY4VlPsly 6vvfsbxiVlt5x+X0lriSFg0VAL6xjrTWndOuJORiNmnsH0HedSyq/L+YpUaoAQ== 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=1784543117; 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=IGMSlDBVo58QNp6JnTU9A3WGCOVMg8JazClC4/z1+sM=; b=FTTS5a3IhnpjMowp1B+wlpG1+6uWkPvbfKgrs5Na/ukf8I6auIw6/Qucx1nKFJW3xiJstc G6xwvTfiGdbeRLrxRUUNzJOS+4HCcNMMBPSWE7Gz6cuHSFiKryKpCfiq8BMID4Tl7VV6Yt SRRg+nlJhouu6Du+to9Jq4p57X0bVFQLuLEBtgkut8zons62rFDqN4gIzFcdUffiC9A9Ut IEsjnMHry5rngfUmdCPRIisEQSqDr4DoTrRc56thlnI8zviy6AFTNtLAqEvE0HU6pBA4w2 6etpYVynA3eXBczEUl9TAJAaQZcXFcJW9U+78nRIfptRd/kGLjTtZstJ1cj9Yg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3c8s2TJ3zy3j for ; Mon, 20 Jul 2026 10:25:17 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 32690 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 10:25:17 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Alexander Leidinger Subject: git: 3c3f886e4bc7 - main - hwpmc: add regression tests for detaching a live process-mode PMC List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: netchild X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 3c3f886e4bc7619f7847ad0d0f996088ddf5915a Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 10:25:17 +0000 Message-Id: <6a5df78d.32690.55283cc0@gitrepo.freebsd.org> The branch main has been updated by netchild: URL: https://cgit.FreeBSD.org/src/commit/?id=3c3f886e4bc7619f7847ad0d0f996088ddf5915a commit 3c3f886e4bc7619f7847ad0d0f996088ddf5915a Author: Alexander Leidinger AuthorDate: 2026-07-19 12:15:20 +0000 Commit: Alexander Leidinger CommitDate: 2026-07-20 10:24:55 +0000 hwpmc: add regression tests for detaching a live process-mode PMC Attach a process-mode counting PMC to the current process, start it, then detach and release it while it is still loaded on the hardware - the case that previously leaked the PMC's runcount reference and wedged pmc_wait_for_pmc_idle() at release. A second case does the same from a multi-threaded process so the sibling threads' references have to be drained too. The tests need an allocatable process-mode counting event and skip where none is available (hwpmc(4) not loaded, or a VM without a vPMU). Reviewed by: adrian MFC after: 2 weeks Assisted-by: Claude Code (Fable 5) Differential Revision: https://reviews.freebsd.org/D58343 --- tests/sys/pmc/Makefile | 2 + tests/sys/pmc/pmc_detach_test.c | 178 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 180 insertions(+) diff --git a/tests/sys/pmc/Makefile b/tests/sys/pmc/Makefile index 403acd0311ce..305a3e65c8b3 100644 --- a/tests/sys/pmc/Makefile +++ b/tests/sys/pmc/Makefile @@ -1,7 +1,9 @@ TESTSDIR= ${TESTSBASE}/sys/pmc ATF_TESTS_C= pmc_wrap_test +ATF_TESTS_C+= pmc_detach_test LIBADD+= pmc +LIBADD.pmc_detach_test+= pthread .include diff --git a/tests/sys/pmc/pmc_detach_test.c b/tests/sys/pmc/pmc_detach_test.c new file mode 100644 index 000000000000..05fda61b2836 --- /dev/null +++ b/tests/sys/pmc/pmc_detach_test.c @@ -0,0 +1,178 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2026 Alexander Leidinger + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other advertising materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * Regression tests for detaching a process-mode PMC from a target that + * still has it loaded on hardware. The runcount reference for a live + * PMC is dropped only by the context-switch-out reclaim, which the + * scheduler gates on P_HWPMC; detaching used to clear P_HWPMC without + * draining the reference, so the following release spun forever in + * pmc_wait_for_pmc_idle() - a panic ("waiting too long for pmc to be + * free") on an INVARIANTS kernel, an unkillable loop holding the hwpmc + * lock otherwise. + * + * The failure is deterministic: attaching a counting PMC to the current + * (running) thread and detaching it before release always left the + * reference live. On a kernel that carries the fix these tests complete + * immediately; run against a kernel that lacks it they would wedge, so + * (like any hwpmc regression test) they ship alongside the fix. + * + * They need an allocatable process-mode counting event, and skip where + * none is available (hwpmc(4) not loaded, or a VM without a vPMU). + */ + +#include + +#include +#include +#include +#include +#include +#include + +#include + +static const char *counting_events[] = { + "instructions", + "cycles", + "branches", + "unhalted-core-cycles", + "inst_retired.any", + "cpu_clk_unhalted.thread", + "ls_not_halted_cyc", + NULL +}; + +static volatile int spin_stop; + +static void * +spinner(void *arg __unused) +{ + volatile unsigned long s = 0; + + while (spin_stop == 0) + s += 1; + return (NULL); +} + +static void +burn_cpu(void) +{ + volatile unsigned long s = 0; + int i; + + for (i = 0; i < 1000000; i++) + s += i; +} + +/* Allocate the first available process-mode counting PMC, or skip. */ +static pmc_id_t +alloc_counting_pmc(void) +{ + pmc_id_t id; + int i; + + if (pmc_init() != 0) + atf_tc_skip("hwpmc(4) is not available: %s", strerror(errno)); + + for (i = 0; counting_events[i] != NULL; i++) { + id = PMC_ID_INVALID; + if (pmc_allocate(counting_events[i], PMC_MODE_TC, 0, + PMC_CPU_ANY, &id, 0) == 0) + return (id); + } + atf_tc_skip("no allocatable process-mode counting event " + "(no vPMU?)"); + return (PMC_ID_INVALID); /* not reached */ +} + +ATF_TC(detach_live_self); +ATF_TC_HEAD(detach_live_self, tc) +{ + atf_tc_set_md_var(tc, "descr", + "Detaching a running counting PMC from the current thread and " + "then releasing it does not leak its runcount reference"); + atf_tc_set_md_var(tc, "require.user", "root"); +} +ATF_TC_BODY(detach_live_self, tc) +{ + pmc_id_t id; + + id = alloc_counting_pmc(); + + ATF_REQUIRE(pmc_attach(id, 0) == 0); /* 0 == current process */ + ATF_REQUIRE(pmc_start(id) == 0); + burn_cpu(); /* make the counter live */ + + /* Detach while still loaded on this CPU, then release. */ + ATF_REQUIRE(pmc_detach(id, 0) == 0); + ATF_REQUIRE(pmc_release(id) == 0); /* wedged before the fix */ +} + +ATF_TC(detach_live_multithread); +ATF_TC_HEAD(detach_live_multithread, tc) +{ + atf_tc_set_md_var(tc, "descr", + "Detaching a running process-scope counting PMC drains the " + "references held by the process' other threads"); + atf_tc_set_md_var(tc, "require.user", "root"); +} +ATF_TC_BODY(detach_live_multithread, tc) +{ + pthread_t th[3]; + pmc_id_t id; + int i, n; + + id = alloc_counting_pmc(); + + /* Sibling threads keep the process-scope PMC live on other CPUs. */ + spin_stop = 0; + for (n = 0; n < 3; n++) + ATF_REQUIRE(pthread_create(&th[n], NULL, spinner, NULL) == 0); + + ATF_REQUIRE(pmc_attach(id, 0) == 0); + ATF_REQUIRE(pmc_start(id) == 0); + burn_cpu(); + /* Let the siblings be scheduled and pick up the PMC. */ + usleep(200 * 1000); + + ATF_REQUIRE(pmc_detach(id, 0) == 0); + ATF_REQUIRE(pmc_release(id) == 0); /* must drain the siblings */ + + spin_stop = 1; + for (i = 0; i < n; i++) + pthread_join(th[i], NULL); +} + +ATF_TP_ADD_TCS(tp) +{ + ATF_TP_ADD_TC(tp, detach_live_self); + ATF_TP_ADD_TC(tp, detach_live_multithread); + + return (atf_no_error()); +} From nobody Mon Jul 20 11:51:11 2026 X-Original-To: dev-commits-src-main@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 4h3f404Jsgz6lqnJ for ; Mon, 20 Jul 2026 11:51:12 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3f3z3XSSz3L0r for ; Mon, 20 Jul 2026 11:51:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784548271; 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=mE7V8EJiT+QGWVGWeA1d855uzmDWDQny7QGbbZMaEcE=; b=L6aX/IsbwZ1Pk+rdY+Netj+qCmK3EYmS6/n/vNDYfe54FfALdWDIyS9a+/FFUveG8hHX3m DwpWv/Bn7FKPdCGqkowcGos/TlIvGELtpC2iK9alg3AUGMdFE2VHm8ADNC+aU9QEQ+4uAt JE5XtIDL5lOgH+OU9xZ3N27UskpdgZvAyMJEyOV9lSOBlXTztqXoZaqFrEQu06yM1SpwVY JPxvkFsjM6sI6+PUDO4kB1iUvZJotvZnewYRCPt6EYfJvpHdOtwmZMV0dodCgLCHF1WF8/ opwfijMiw0RZkb4FAW0Dbh56BEkLMZpbVnCV27pDK9fYgXONFhm3WIcBmVStkQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784548271; a=rsa-sha256; cv=none; b=ECoytrlyNa5+1+Xsz4j14lKH4hiIfQzh3QtH/olerXjkZB6Ini1qfGKz23FYQIHLttpJI0 2E5yIFsUxED2xcp9jZPq2CMSirhSsawdUccqRKVi2XizUv3B798Xk+9ueQyVsObxr+nXQV B/qsGNCjf9QsAbkrx70Zn5hw0BamLqgmcs+P9p/C7vht3HApPyaA4TapjrKWPOgv41aV0b 7N+Uyyvzid/PeHsAqRZGzsLqD8++XWaG+j4ugY9UZcKHlHO5aTUcWeTM5xcUb6QyQtT+8E QcsyzEzpTpkwqch4a5yEb7zhUNDcik2RnMKAFvN3WRf0PfUVN1uE+DAPfRw+rw== 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=1784548271; 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=mE7V8EJiT+QGWVGWeA1d855uzmDWDQny7QGbbZMaEcE=; b=ScvpmRd+ByWsjxNhrGIKIkzA8S7KWnkduNiRQpqX/LDYMaNryidD31q431GcFiL+fYCSw2 JmkK3CD6Vz3oMyQ1UYqmjZZUo44yADEoSc8badGkLS7xtmQfAJkqQNEQsbKtlgyRClGLOw K0CUPGT8zPzrrgAnDvn5ZjD5tdMUAeduVpEKg4juVNdcdF4Ad2D/REL0EJ1JvDFmx9lFjE 3plPZD4aehAnW/LSjjOv/2HP56NvGA/XnEMi7wWNPWWZ3rJQBSUIFYmK9EcMCAG9jWpsD9 DL0IXKFSVyWIfsN41OA56QiTzn00XHj0/niMaPLdJG1uGjw0UAq5I/NBX3KHtQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3f3z1lZYz11J1 for ; Mon, 20 Jul 2026 11:51:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3b0c2 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 11:51:11 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: 8966cc0d01a2 - main - m4: import fixes from OpenBSD List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8966cc0d01a29c11168e4e9d7f1703aa31ad3be6 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 11:51:11 +0000 Message-Id: <6a5e0baf.3b0c2.2e6bbed@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=8966cc0d01a29c11168e4e9d7f1703aa31ad3be6 commit 8966cc0d01a29c11168e4e9d7f1703aa31ad3be6 Author: Baptiste Daroussin AuthorDate: 2026-07-19 18:43:31 +0000 Commit: Baptiste Daroussin CommitDate: 2026-07-20 11:49:42 +0000 m4: import fixes from OpenBSD - gnum4.c: fix m4_warnx() to use vwarnx() instead of warnx() - eval.c: improve error messages for empty macro names - extern.h: remove compute_prevep() declaration - Update OpenBSD version strings MFC After: 3 days --- usr.bin/m4/eval.c | 6 +++--- usr.bin/m4/extern.h | 3 +-- usr.bin/m4/gnum4.c | 4 ++-- usr.bin/m4/look.c | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/usr.bin/m4/eval.c b/usr.bin/m4/eval.c index 4f088e0415e0..6f96b5555965 100644 --- a/usr.bin/m4/eval.c +++ b/usr.bin/m4/eval.c @@ -1,4 +1,4 @@ -/* $OpenBSD: eval.c,v 1.78 2019/06/28 05:35:34 deraadt Exp $ */ +/* $OpenBSD: eval.c,v 1.81 2026/02/25 05:37:25 op Exp $ */ /* $NetBSD: eval.c,v 1.7 1996/11/10 21:21:29 pk Exp $ */ /*- @@ -598,7 +598,7 @@ void dodefine(const char *name, const char *defn) { if (!*name && !mimic_gnu) - m4errx(1, "null definition."); + m4errx(1, "define macro with empty name."); else macro_define(name, defn); } @@ -635,7 +635,7 @@ static void dopushdef(const char *name, const char *defn) { if (!*name && !mimic_gnu) - m4errx(1, "null definition."); + m4errx(1, "pushdef macro with empty name."); else macro_pushdef(name, defn); } diff --git a/usr.bin/m4/extern.h b/usr.bin/m4/extern.h index a411cb6d5891..bdee26be56bd 100644 --- a/usr.bin/m4/extern.h +++ b/usr.bin/m4/extern.h @@ -1,4 +1,4 @@ -/* $OpenBSD: extern.h,v 1.55 2017/06/15 13:48:42 bcallah Exp $ */ +/* $OpenBSD: extern.h,v 1.57 2026/02/25 05:37:25 op Exp $ */ /* $NetBSD: extern.h,v 1.3 1996/01/13 23:25:24 pk Exp $ */ /*- @@ -93,7 +93,6 @@ extern int exit_code; /* misc.c */ extern void chrsave(int); -extern char *compute_prevep(void); extern void getdiv(int); extern ptrdiff_t doindex(const char *, const char *); extern void initspaces(void); diff --git a/usr.bin/m4/gnum4.c b/usr.bin/m4/gnum4.c index ecd89b5c8b6a..d7201533cb1a 100644 --- a/usr.bin/m4/gnum4.c +++ b/usr.bin/m4/gnum4.c @@ -1,4 +1,4 @@ -/* $OpenBSD: gnum4.c,v 1.52 2017/08/21 21:41:13 deraadt Exp $ */ +/* $OpenBSD: gnum4.c,v 1.55 2025/11/05 17:10:45 tb Exp $ */ /*- * SPDX-License-Identifier: BSD-2-Clause @@ -267,7 +267,7 @@ m4_warnx(const char *fmt, ...) va_list ap; va_start(ap, fmt); - warnx(fmt, ap); + vwarnx(fmt, ap); va_end(ap); if (fatal_warns) diff --git a/usr.bin/m4/look.c b/usr.bin/m4/look.c index c1fccd7dd8e5..c084baef30cf 100644 --- a/usr.bin/m4/look.c +++ b/usr.bin/m4/look.c @@ -1,4 +1,4 @@ -/* $OpenBSD: look.c,v 1.24 2014/12/21 09:33:12 espie Exp $ */ +/* $OpenBSD: look.c,v 1.26 2026/02/25 05:37:25 op Exp $ */ /*- * SPDX-License-Identifier: BSD-3-Clause From nobody Mon Jul 20 11:51:12 2026 X-Original-To: dev-commits-src-main@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 4h3f413tHdz6lqfb for ; Mon, 20 Jul 2026 11:51:13 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3f403fymz3KxM for ; Mon, 20 Jul 2026 11:51:12 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784548272; 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=UhZyY3xwkld0hi3QlSU1ltGgifOlp3N6BIYJde3PjLA=; b=QK25F5WydImGnlkX8OnMTOx0yf3QOF1o5SmqTHfhqT++85YUxgYhLtVnOKDoVCkw/tpWBq 0JBBe/eG+H303K4ZR64F6I1QmNSKKGnzUfxWVf+KdAE5KFKpv6dgvLLPtdm8NYXRmfZ7bd DxMILr3tSgX0KK4jlNqUwhu+LJzI2BQc6FRGP7Ee2l4/dvL1s7DnpkAuwSHJuPXy+zCW4W 7ltPdzRC0DO8fenGFCNRQPp3vphp/p7eqyWjOuwXo31jbVdcWP5ojZIe3L4ClR2IDfoFXa CHP9OXtnk+PzUANpcHBp0/Apn43GKV27CJSYXkH2qlZf5eESkBeJrKOgZ/hKVw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784548272; a=rsa-sha256; cv=none; b=iKYthATWxU7K/WzsuX+mpHmwVs5OQ2+hvP9KhGrcYbgLUZMobVfmyB2XWxqB3sVFyjjmjf erWmgXkhucGqPyGU0vz2LE/EMfadSeWjyg/cSxfs9hjpSXmmPrPJK2jcioPEB5kMfn33ju vCesVXO67x7fKCy4vVCgZb2HVFyi6rYtVBWFijC1uAVuLVvjNaTa76RKtr52LMIteyDWiJ rJyRJ+cdlSUnFwBIZNYDrxYpgyeuXofxtTaNsty6O+fER9tX3Pi7lLpFYHoSbYPvLzuiRK Buo7ibxm2WQ061abAm9OqbuzbYHWJFslSasdfq6AMWrWoP+OlihnMtAc4FSopg== 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=1784548272; 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=UhZyY3xwkld0hi3QlSU1ltGgifOlp3N6BIYJde3PjLA=; b=xc2zE4xG552RmG5dkpemM8GFsRmejb9QtvOLA/yTFMIXF7foQD4c/WCC+RIBQabPWHGnqh IFa3jEMYG407opbC6DxyN26G8dau/ud3lKB5nSddFyDHBiKzwoy4OYSnVvffkh/cdrV1W4 cPF1NptmRIRbUJDjwuaKVc7lu8DH/5Poc6oR8Om7m+jbDGYfYtUrmuUCG52olA8EurQp3i LqjwRjAMFa72jGdMQ2cB5pz8L8cFxbN6rzxFV7+/UFUeHd4YXsskPCkLUk9EjS7pn+BTRc rE1QzIY+928q8I7+g2mAtpc+6mIjayvfrqcXgTiSQInjvxsKDVMsPvQYEBBeGA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3f402Y1Bz11J2 for ; Mon, 20 Jul 2026 11:51:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3b9c0 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 11:51:12 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: 5f69e6209e09 - main - uvideo: increase UVIDEO_MAX_PU and UVIDEO_MAX_CT to 32 List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5f69e6209e09687b90343b09cc281fd1d9bc99f9 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 11:51:12 +0000 Message-Id: <6a5e0bb0.3b9c0.69f5270f@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=5f69e6209e09687b90343b09cc281fd1d9bc99f9 commit 5f69e6209e09687b90343b09cc281fd1d9bc99f9 Author: Baptiste Daroussin AuthorDate: 2026-07-18 05:39:01 +0000 Commit: Baptiste Daroussin CommitDate: 2026-07-20 11:50:01 +0000 uvideo: increase UVIDEO_MAX_PU and UVIDEO_MAX_CT to 32 Some UVC devices (e.g. Logitech C920) expose more than 8 Processing Unit descriptors, causing "too many PU descriptors found!" errors. Increase both limits from 8 to 32 to accommodate such devices. --- sys/dev/usb/video/uvideo.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index 9229aa34fc47..2019931ab6cf 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -246,12 +246,12 @@ struct uvideo_softc { struct usb_video_header_desc_all sc_desc_vc_header; struct usb_video_input_header_desc_all sc_desc_vs_input_header; -#define UVIDEO_MAX_PU 8 +#define UVIDEO_MAX_PU 32 int sc_desc_vc_pu_num; struct usb_video_vc_processing_desc *sc_desc_vc_pu_cur; struct usb_video_vc_processing_desc *sc_desc_vc_pu[UVIDEO_MAX_PU]; -#define UVIDEO_MAX_CT 8 +#define UVIDEO_MAX_CT 32 int sc_desc_vc_ct_num; struct usb_video_camera_terminal_desc *sc_desc_vc_ct_cur; struct usb_video_camera_terminal_desc *sc_desc_vc_ct[UVIDEO_MAX_CT]; From nobody Mon Jul 20 12:08:57 2026 X-Original-To: dev-commits-src-main@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 4h3fST6Hpdz6ls3X for ; Mon, 20 Jul 2026 12:08:57 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3fST5mjmz3QLH for ; Mon, 20 Jul 2026 12:08:57 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784549337; 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=j7/Gn08kC5dGtIReeTAzWMFrVfTejm/mecyD11gj5zA=; b=Q/4UEx3MWaYroUf8vgnfHhiWheTANtHcKkWr/rJbl3oBhB06mVSbQaRvHbeXPe1+rnb8D1 lfwCm1jeQKF6/+QjMA/xdM6HEuho1w23gh1zJScYTclBNE2g25KFhfGShh2sGKdE/qr7vU 1zWHfQgwwA/Eh9/xPWBe4fVs76cxUH1PXf5ebayShoIPZQu+LiZMaNRAOrPhF2cd+rJpb8 HxSHZpZpzWOsZQ9ThkydrqrlVI5JJpTnQ/8r0eq81ZUN18kozaMZj+8AtES3Q7zUZ1rOFM 5cyiHNwLc1CwIc/N2IDIeHOGy1QE1TWR/q1jlLVy6Bo1MXzbDxYHsdTeq5JotA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784549337; a=rsa-sha256; cv=none; b=bvZ3i4o8ZWpY+KYCI7kZpGEj7/ptxMdCfy0PHTNyHxLa56bHX7GIo7GQ/ox+lhS/BsFNif GbYLetskP6YuwjPOIKfIMBp1nXmvwiiFY0grtJ09LvlFG478r64T7VuZXG7CzW7O86zfkP sM+SiWOJ4Q1Sn7IL76B+n81Yvm9D2CIBqMjBnqtFNluzRg44hj2g1rHXaNjz5B0b9nWv3/ GGfiKvf0YaWhauNSSYzcUFovIZkH1u1pjf91PiTOU0enxm2LeSnghknPDnAF7MnTbpYeKT e0bTK0KH7H8kY/jqG6LCNDw7JyKC+EwPlZy94S9cASfRKaWNODGankCAu7UU2w== 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=1784549337; 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=j7/Gn08kC5dGtIReeTAzWMFrVfTejm/mecyD11gj5zA=; b=cCrqA5sb0IvD/eVpXg1WkeaslVAQbjTA4YXoRjnb1Km0QCTqiSqsenTgZHWVKDVfiKqjDD hrP8jWmXRSE3nE8G53YvUU9YYHFFLURFos4/D/7JTgDWqCEdv3qpdCIHME2oly5RqbEDbX hg10U6fozTX15RdLpQ8LkyPLQ2ReBtKEC6ANfTYBvVndQTQx37+pm8rzXb9GYjhByCGVgq EGyGrCw+YL3N10MiDXI/eohtT4Kmtm0fQ9KemR43QxQ2rVUIpVp/PaqNtK7AoVMauQ37OW KLZYuIHcPnjwZ6w8lM1UzxTXKD4HDR7b2exIqzc2xnFv3fKnD9Zebft6sFFw7Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3fST4Rcjz11nM for ; Mon, 20 Jul 2026 12:08:57 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3c043 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 12:08:57 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: 6e845b1333fd - main - uvideo: import quirks infrastructure from OpenBSD List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6e845b1333fdf215216dc463ebd9ed34b045c477 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 12:08:57 +0000 Message-Id: <6a5e0fd9.3c043.79dfe4be@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=6e845b1333fdf215216dc463ebd9ed34b045c477 commit 6e845b1333fdf215216dc463ebd9ed34b045c477 Author: Baptiste Daroussin AuthorDate: 2026-07-19 17:18:50 +0000 Commit: Baptiste Daroussin CommitDate: 2026-07-20 12:07:21 +0000 uvideo: import quirks infrastructure from OpenBSD Import the device quirk system from OpenBSD to handle UVC devices that need special handling. This includes: - UVIDEO_FLAG_ISIGHT_STREAM_HEADER: non-standard streaming header - UVIDEO_FLAG_REATTACH: needs reattach after firmware upload - UVIDEO_FLAG_VENDOR_CLASS: incorrectly reports as vendor class - UVIDEO_FLAG_NOATTACH: device not supported - UVIDEO_FLAG_FORMAT_INDEX_IN_BMHINT: format index in bmHint Add quirks table with known devices and lookup function. Add iSight stream header decoder for Apple iSight cameras. Obtained from: OpenBSD --- sys/dev/usb/video/uvideo.c | 179 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 177 insertions(+), 2 deletions(-) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index 2019931ab6cf..910915f9f745 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -149,6 +149,8 @@ static void uvideo_vs_close(struct uvideo_softc *); static usb_error_t uvideo_vs_init(struct uvideo_softc *); static void uvideo_vs_decode_stream_header(struct uvideo_softc *, uint8_t *, int); +static void uvideo_vs_decode_stream_header_isight( + struct uvideo_softc *, uint8_t *, int); static void uvideo_isoc_decode(struct uvideo_softc *, struct usb_page_cache *, int, int); static uint8_t *uvideo_mmap_getbuf(struct uvideo_softc *); @@ -277,6 +279,8 @@ struct uvideo_softc { struct selinfo sc_selinfo; + const struct uvideo_quirk *sc_quirk; + void (*sc_decode_stream_header)( struct uvideo_softc *, uint8_t *, int); }; @@ -558,6 +562,74 @@ static const enum v4l2_ycbcr_encoding uvideo_matrix_coefficients[] = { V4L2_YCBCR_ENC_SMPTE240M, }; +/* + * Quirk flags for devices needing special handling. + */ +#define UVIDEO_FLAG_ISIGHT_STREAM_HEADER 0x01 +#define UVIDEO_FLAG_REATTACH 0x02 +#define UVIDEO_FLAG_VENDOR_CLASS 0x04 +#define UVIDEO_FLAG_NOATTACH 0x08 +#define UVIDEO_FLAG_FORMAT_INDEX_IN_BMHINT 0x10 + +/* + * Devices which either fail to declare themselves as UICLASS_VIDEO, + * or which need firmware uploads or other quirk handling later on. + */ +static const struct uvideo_quirk { + struct usb_device_id uv_dev; + const char *ucode_name; + usb_error_t (*ucode_loader)(struct uvideo_softc *); + int flags; +} uvideo_quirks[] = { + { { USB_VP(0x05ca, 0x1835) }, "uvideo_r5u87x_05ca-1835", + NULL, 0 }, /* Ricoh VGP VCC5 */ + { { USB_VP(0x05ca, 0x1836) }, "uvideo_r5u87x_05ca-1836", + NULL, 0 }, /* Ricoh VGP VCC4 */ + { { USB_VP(0x05ca, 0x1837) }, "uvideo_r5u87x_05ca-1837", + NULL, 0 }, /* Ricoh VGP VCC4 (2) */ + { { USB_VP(0x05ca, 0x1839) }, "uvideo_r5u87x_05ca-1839", + NULL, 0 }, /* Ricoh VGP VCC6 */ + { { USB_VP(0x05ca, 0x183a) }, "uvideo_r5u87x_05ca-183a", + NULL, 0 }, /* Ricoh VGP VCC7 */ + { { USB_VP(0x05ca, 0x183b) }, "uvideo_r5u87x_05ca-183b", + NULL, 0 }, /* Ricoh VGP VCC8 */ + { { USB_VP(0x05ca, 0x183e) }, "uvideo_r5u87x_05ca-183e", + NULL, 0 }, /* Ricoh VGP VCC9 */ + { { USB_VP(0x05ac, 0x8300) }, "uvideo_isight_05ac-8300", + NULL, UVIDEO_FLAG_REATTACH }, /* Apple iSight (needs firmware) */ + { { USB_VP(0x05ac, 0x8501) }, NULL, NULL, + UVIDEO_FLAG_ISIGHT_STREAM_HEADER }, /* Apple iSight (non-standard header) */ + { { USB_VP(0x046d, 0x08b0) }, NULL, NULL, + UVIDEO_FLAG_VENDOR_CLASS }, /* Logitech QuickCam Fusion */ + { { USB_VP(0x046d, 0x08bc) }, NULL, NULL, + UVIDEO_FLAG_VENDOR_CLASS }, /* Logitech QuickCam Orbit MP */ + { { USB_VP(0x046d, 0x08c1) }, NULL, NULL, + UVIDEO_FLAG_VENDOR_CLASS }, /* Logitech QuickCam NB Pro */ + { { USB_VP(0x046d, 0x08c6) }, NULL, NULL, + UVIDEO_FLAG_VENDOR_CLASS }, /* Logitech QuickCam Pro 5000 */ + { { USB_VP(0x046d, 0x08c7) }, NULL, NULL, + UVIDEO_FLAG_VENDOR_CLASS }, /* Logitech QuickCam OEM */ + { { USB_VP(0x046d, 0x08c8) }, NULL, NULL, + UVIDEO_FLAG_VENDOR_CLASS }, /* Logitech QuickCam OEM */ + { { USB_VP(0x04f2, 0xb2ea) }, NULL, NULL, + UVIDEO_FLAG_NOATTACH }, /* Chicony IR camera (unsupported) */ + { { USB_VP(0x0fd9, 0x0066) }, NULL, NULL, + UVIDEO_FLAG_FORMAT_INDEX_IN_BMHINT }, /* Elgato Game Capture HD60 */ +}; + +static const struct uvideo_quirk * +uvideo_lookup_quirk(struct usb_attach_arg *uaa) +{ + int i; + + for (i = 0; i < nitems(uvideo_quirks); i++) { + if (uaa->info.idVendor == uvideo_quirks[i].uv_dev.idVendor && + uaa->info.idProduct == uvideo_quirks[i].uv_dev.idProduct) + return (&uvideo_quirks[i]); + } + return (NULL); +} + /* * USB device ID table - match standard UVC devices */ @@ -677,10 +749,22 @@ static int uvideo_probe(device_t dev) { struct usb_attach_arg *uaa = device_get_ivars(dev); + const struct uvideo_quirk *quirk; if (uaa->usb_mode != USB_MODE_HOST) return (ENXIO); + /* Check quirks table first */ + quirk = uvideo_lookup_quirk(uaa); + if (quirk != NULL) { + if (quirk->flags & UVIDEO_FLAG_REATTACH) + return (BUS_PROBE_DEFAULT); + if (quirk->flags & UVIDEO_FLAG_VENDOR_CLASS && + uaa->info.bInterfaceClass == UICLASS_VENDOR && + uaa->info.bInterfaceSubClass == UISUBCLASS_VIDEOCONTROL) + return (BUS_PROBE_DEFAULT); + } + if (uaa->info.bInterfaceClass != UICLASS_VIDEO) return (ENXIO); @@ -711,6 +795,15 @@ uvideo_attach(device_t dev) mtx_init(&sc->sc_mtx, "uvideo", NULL, MTX_DEF); knlist_init_mtx(&sc->sc_selinfo.si_note, &sc->sc_mtx); + /* Look up quirks for this device */ + sc->sc_quirk = uvideo_lookup_quirk(uaa); + + if (sc->sc_quirk != NULL && + sc->sc_quirk->flags & UVIDEO_FLAG_NOATTACH) { + device_printf(dev, "device not supported\n"); + goto detach; + } + /* Get the config descriptor to iterate */ cdesc = usbd_get_config_descriptor(sc->sc_udev); if (cdesc == NULL) { @@ -752,8 +845,14 @@ uvideo_attach(device_t dev) sc->sc_iface_index = first_iface; sc->sc_nifaces = nifaces; - /* Standard UVC stream header decode */ - sc->sc_decode_stream_header = uvideo_vs_decode_stream_header; + /* Map stream header decode function based on quirks */ + if (sc->sc_quirk != NULL && + sc->sc_quirk->flags & UVIDEO_FLAG_ISIGHT_STREAM_HEADER) { + sc->sc_decode_stream_header = + uvideo_vs_decode_stream_header_isight; + } else { + sc->sc_decode_stream_header = uvideo_vs_decode_stream_header; + } /* Parse video control descriptors */ error = uvideo_vc_parse_desc(sc); @@ -2074,6 +2173,21 @@ uvideo_vs_get_probe(struct uvideo_softc *sc, uint8_t *probe_data, bzero(probe_data + actlen, sizeof(struct usb_video_probe_commit) - actlen); + /* + * Some devices (e.g. Elgato Cam Link 4K, Elgato Game Capture HD60) + * return an invalid bmHint response which contains the bFormatIndex + * in the second byte. Fix it up. + */ + if (sc->sc_quirk != NULL && + sc->sc_quirk->flags & UVIDEO_FLAG_FORMAT_INDEX_IN_BMHINT) { + struct usb_video_probe_commit *pc = + (struct usb_video_probe_commit *)probe_data; + if (UGETW(pc->bmHint) > 255) { + pc->bFormatIndex = UGETW(pc->bmHint) >> 8; + USETW(pc->bmHint, 1); + } + } + DPRINTFN(1, "GET probe OK, length=%d\n", actlen); return (USB_ERR_NORMAL_COMPLETION); } @@ -2538,6 +2652,67 @@ uvideo_vs_decode_stream_header(struct uvideo_softc *sc, uint8_t *frame, } } +/* + * The iSight first generation device uses a non-standard streaming + * protocol. The stream header is sent once per image and looks like: + * + * uByte header length + * uByte flags + * uByte magic1[4] always "11223344" + * uByte magic2[8] always "deadbeefdeadface" + * uByte unknown[16] + * + * Sometimes the stream header is prefixed by an unknown byte. + */ +static void +uvideo_vs_decode_stream_header_isight(struct uvideo_softc *sc, + uint8_t *frame, int frame_size) +{ + struct uvideo_frame_buffer *fb = &sc->sc_frame_buffer; + int sample_len, header = 0; + uint8_t *buf; + uint8_t magic[] = { 0x11, 0x22, 0x33, 0x44, 0xde, 0xad, 0xbe, + 0xef, 0xde, 0xad, 0xfa, 0xce }; + + if (frame_size > 13 && !memcmp(&frame[2], magic, 12)) + header = 1; + if (frame_size > 14 && !memcmp(&frame[3], magic, 12)) + header = 1; + + if (header && fb->fid == 0) { + fb->fid = 1; + return; + } + + if (header) { + if (sc->sc_mmap_flag) { + if (!fb->mmap_q_full) + uvideo_mmap_queue(sc, fb->offset, 0); + } else { + uvideo_read_frame(sc, fb->buf, fb->offset); + } + fb->offset = 0; + fb->mmap_q_full = 0; + } else { + if (sc->sc_mmap_flag) { + if (!fb->mmap_q_full) { + buf = uvideo_mmap_getbuf(sc); + if (buf == NULL) + fb->mmap_q_full = 1; + } + } else + buf = sc->sc_frame_buffer.buf; + + /* Save sample */ + sample_len = frame_size; + if (!fb->mmap_q_full && + (fb->offset + sample_len) < fb->buf_size) { + bcopy(frame, buf + fb->offset, sample_len); + fb->offset += sample_len; + } + } +} + static uint8_t * uvideo_mmap_getbuf(struct uvideo_softc *sc) { From nobody Mon Jul 20 12:38:18 2026 X-Original-To: dev-commits-src-main@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 4h3g6L4r8fz6lvCc for ; Mon, 20 Jul 2026 12:38:18 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3g6L45b7z3ZxW for ; Mon, 20 Jul 2026 12:38:18 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784551098; 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=OjQ9u7MdGLhjRjh64aMKiGbwU2WyzWEhB94kRG6UXjU=; b=MWbI92r/yHh8mDr8ZOCZvjpbprAXNzDRi1ptzdEbRJ/JbbSeSSHW+r3+jOZ8FvsoR+yXv5 KXk+hGE/YRriEGF0AQyBSKNeOsEzPcQW+qxqZviUl0VvoSd3ft1D7YXPyrHT6PRdU/vEWY 5P+5XC71PYo7TqfsFY7ljCzK9e7Ng8ylI0XqbHNQlVEN8a2xD3nfCGfIid1JzN+zfhphwn CMAxuINZo5n2Rc0ndgrpnQc4piKIVan0DojaMEaKYYI56kGOBLW/C2X6ZB3Z40xYwgEqOc MgX3jIr0uFkJRv7+O3KjvLqI4aZA8Lwamr+W1Ei0x8NWEaxzlaks5XnL170ZyQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784551098; a=rsa-sha256; cv=none; b=obkIu5HbeOFPK4K1IqqmKffMfuL8r6eZo7BKMqi+IfA43mWsuENnkYVLvCsYX2wZ5XLSKm i5vVvCNiYCJxicK1pDL/ea3cSiCRw9cB9V21IKVPZnd06UWoAA1BCkkZiIe2QqHBSWvhbx h0kpaRjUhC7nwCagNIQXD4mVRlc77UmsgnhQCZJFyFqHa81cOBts9fCN4W28DzmpvsEEu7 baLhWs7zUZqEX2D26ed7GxeZuoDGSCV81yZaQLXM7CBpsHmFqG7w4dZQ1PeA0o6QHZZtrP cIXAjIZZlR69IHG36X8GVW5cnUjeM+tuK7IJQdALzY/imDSGUGu2LsLe+fM91A== 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=1784551098; 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=OjQ9u7MdGLhjRjh64aMKiGbwU2WyzWEhB94kRG6UXjU=; b=SQrwtC9JR1vzUhQfQPARzjE7qIJtdkB9ZfJkLKe4QGMgOmuNjIw7lwdSADZtJCJX8FLO8P ZIxwaEuvhFuZ0Ok+zNucC0FDstqodiW8mkPRcu6W9pUUqh+wh1RaY7VbEQ2lCoiehEAhyA SG4STt9IycP7HFJPxBB4DA5VDiaR9hi5o8KmTqcuwDYUNzfrC07UjUFX+uLpn1D0dS5PJP m38iclBdYeFoRev66kWM4t7PhbrDHQzsGFkQpbuQUa/qFTsZwRDog9SgaTpgSF4r7fXo0Y kR4KOKRDdL+K3Ss8rDWpobmxeL+m+l9+4k5t+VFBPzBF+v5TtgMEMGHrAGk7ng== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3g6L2vLkz12Tw for ; Mon, 20 Jul 2026 12:38:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3fd30 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 12:38:18 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: 6671bbf2f9bb - main - nda: Tag the command set used for devctl errors List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6671bbf2f9bb130129a4896bca7edb9e0a638e9f Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 12:38:18 +0000 Message-Id: <6a5e16ba.3fd30.48709ba2@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=6671bbf2f9bb130129a4896bca7edb9e0a638e9f commit 6671bbf2f9bb130129a4896bca7edb9e0a638e9f Author: Warner Losh AuthorDate: 2026-07-20 12:36:43 +0000 Commit: Warner Losh CommitDate: 2026-07-20 12:37:10 +0000 nda: Tag the command set used for devctl errors Different command sets have different encoding for op codes, etc. While one can normally puzzle out which is which, it's better to explicitly tag the command set used. Sponsored by: Netflix --- sys/cam/cam_periph.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/cam/cam_periph.c b/sys/cam/cam_periph.c index 91ec7a71f612..6fa5fa4a60d6 100644 --- a/sys/cam/cam_periph.c +++ b/sys/cam/cam_periph.c @@ -2187,9 +2187,10 @@ cam_periph_devctl_notify(union ccb *ccb) struct nvme_command *cmd = &n->cmd; // XXX Likely should be nvme_cmd_sbuf - sbuf_printf(&sb, "opc=\"%02x\" fuse=\"%02x\" cid=\"%04x\" " + sbuf_printf(&sb, "cmdset=\"%s\" opc=\"%02x\" fuse=\"%02x\" cid=\"%04x\" " "nsid=\"%08x\" cdw10=\"%08x\" cdw11=\"%08x\" cdw12=\"%08x\" " "cdw13=\"%08x\" cdw14=\"%08x\" cdw15=\"%08x\" ", + ccb->ccb_h.func_code == XPT_NVME_ADMIN ? "admin" : "io", cmd->opc, cmd->fuse, cmd->cid, cmd->nsid, cmd->cdw10, cmd->cdw11, cmd->cdw12, cmd->cdw13, cmd->cdw14, cmd->cdw15); break; From nobody Mon Jul 20 17:29:56 2026 X-Original-To: dev-commits-src-main@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 4h3nZs1lclz6mGdB for ; Mon, 20 Jul 2026 17:29:57 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3nZs1Gr1z3VB6 for ; Mon, 20 Jul 2026 17:29:57 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784568597; 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=qwIeX/d3++TL5eLXGgSY4H1k0bOlm2fRel1TnaoNmfQ=; b=uv6sD9YtWBQoaeoB8ML+6rPcA+R5IhE8hAW5uF1/jL8MjWtp1bkjKcoNzkngGFhtdT1Uo7 hasa+bMDYC1PjuI/D5b8/gk4+qzthZA8HbMIAPLW3jhuxZOGB27sX88iPVR5thsFVbPelx QYhweXTFngLqm0SRD6fJz1ni9l8ic830vxYGOuohDi+FpC4RIf4CmrlN4Uj1m5oEwtftWA 6h9rhIOZxHiWNXqsG3K0aD/diAo76yYtQz2vGeG1UIvJKYBXkv5Q1zlNv+v/o8g6Y1KL1m pYTVFhM/dznD0Cjzf7+LmgghEZ4GaAxIm2dY1O8O3Jl4u/zx1Lll8KZISI5t1A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784568597; a=rsa-sha256; cv=none; b=PSjDIKqqt2cTFCgS8wzRn+5FdjpXs6Moon4y+pFvFp8z4PyvIHusUJvitOgohDRyGVhzfZ zr73rMgve+bnwcq2jWh3IG7nIpQKGSY0LEHVSWg9qJcHqFZF7aIN25ViRHBJq3cEJi4X+B CKeel2Oy7qIRD7HgbnE4zyljWBp3QlpI5s+6OCtCHO7xo44RjqJFjF6wngFWVx1ixqG0Yk wLl2ElVlfMHMLJDZWkYtJoiBJBG5NJKUdBx2Cw01q5GRWH6TbJTq2YNOLluvsXowCG48cL yw+pG65PCdIy4RDMwnnywcq6MAdskAPxBunKmjFB0cXs2FP+x3Bhke3p+F/mng== 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=1784568597; 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=qwIeX/d3++TL5eLXGgSY4H1k0bOlm2fRel1TnaoNmfQ=; b=bdhbka1bnGtvbPaO9420D1TT9DfeZGCG8KntFqIOYw4EFjZ1PtyIelnVuwcZX4XVtkqF+0 cxFliYEDrrfZmPl9FUUpp4MCiGyUrnEH8XRGg+fGp4rUr0a/akM0XPRBOTRylhtM2vc05v Ua+K0L61zXyYHMYuURzjcb47Xk1kS2lTGKP5qsNABZ4zyYMJvdDl3Hki/5DwJkeiAUVl8N fuZ2cXJWU0i9Fcl3+resPAh9abyZZqECR/Y/Tm43Od3h3Qz60H0nSbzaYsDxviIRYRtxTw eFBHDv8iSPEXJ3jytup/RQi7nHrQqYCMbln2UFEkHvJqfYvHISTKAKldI0dLTQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3nZr6zsbz19gx for ; Mon, 20 Jul 2026 17:29:56 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3770f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 17:29:56 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Pouria Mousavizadeh Tehrani Subject: git: b00d30950cde - main - net/if.c: Add fib-aware ifa_ifwithaddr() List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pouria X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b00d30950cde27eda8f51523a40f2c05a38daac1 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 17:29:56 +0000 Message-Id: <6a5e5b14.3770f.65ed1c48@gitrepo.freebsd.org> The branch main has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=b00d30950cde27eda8f51523a40f2c05a38daac1 commit b00d30950cde27eda8f51523a40f2c05a38daac1 Author: Pouria Mousavizadeh Tehrani AuthorDate: 2026-07-17 16:11:42 +0000 Commit: Pouria Mousavizadeh Tehrani CommitDate: 2026-07-20 17:27:15 +0000 net/if.c: Add fib-aware ifa_ifwithaddr() Add FIB selection logic by introducing ifa_ifwithaddr_fib() to support FIB-specific lookups. Then have ifa_ifwithaddr() wrap it with RT_ALL_FIBS. Also, do the same for ifa_ifwithaddr_check(). Reviewed by: glebius, bnovkov Differential Revision: https://reviews.freebsd.org/D58305 --- sys/net/if.c | 29 +++++++++++++++++++++++------ sys/net/if_var.h | 2 ++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/sys/net/if.c b/sys/net/if.c index 440b40102d53..1c57eb1492c2 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -1708,18 +1708,18 @@ sa_dl_equal(const struct sockaddr *a, const struct sockaddr *b) } /* - * Locate an interface based on a complete address. + * Locate an interface on the specified fib based on a complete address. */ -/*ARGSUSED*/ struct ifaddr * -ifa_ifwithaddr(const struct sockaddr *addr) +ifa_ifwithaddr_fib(const struct sockaddr *addr, int fibnum) { struct ifnet *ifp; struct ifaddr *ifa; NET_EPOCH_ASSERT(); - CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) { + if ((fibnum != RT_ALL_FIBS) && (ifp->if_fib != fibnum)) + continue; CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) { if (ifa->ifa_addr->sa_family != addr->sa_family) continue; @@ -1740,18 +1740,35 @@ done: return (ifa); } +/* + * Locate an interface based on a complete address. + */ +struct ifaddr * +ifa_ifwithaddr(const struct sockaddr *addr) +{ + + return (ifa_ifwithaddr_fib(addr, RT_ALL_FIBS)); +} + int -ifa_ifwithaddr_check(const struct sockaddr *addr) +ifa_ifwithaddr_fib_check(const struct sockaddr *addr, int fibnum) { struct epoch_tracker et; int rc; NET_EPOCH_ENTER(et); - rc = (ifa_ifwithaddr(addr) != NULL); + rc = (ifa_ifwithaddr_fib(addr, fibnum) != NULL); NET_EPOCH_EXIT(et); return (rc); } +int +ifa_ifwithaddr_check(const struct sockaddr *addr) +{ + + return (ifa_ifwithaddr_fib_check(addr, RT_ALL_FIBS)); +} + /* * Locate an interface based on the broadcast address. */ diff --git a/sys/net/if_var.h b/sys/net/if_var.h index 3c65b2b4d2d8..9a425fd81054 100644 --- a/sys/net/if_var.h +++ b/sys/net/if_var.h @@ -563,7 +563,9 @@ int ifa_add_loopback_route(struct ifaddr *, struct sockaddr *); int ifa_del_loopback_route(struct ifaddr *, struct sockaddr *); int ifa_switch_loopback_route(struct ifaddr *, struct sockaddr *); +struct ifaddr *ifa_ifwithaddr_fib(const struct sockaddr *, int); struct ifaddr *ifa_ifwithaddr(const struct sockaddr *); +int ifa_ifwithaddr_fib_check(const struct sockaddr *, int); int ifa_ifwithaddr_check(const struct sockaddr *); struct ifaddr *ifa_ifwithbroadaddr(const struct sockaddr *, int); struct ifaddr *ifa_ifwithdstaddr(const struct sockaddr *, int); From nobody Mon Jul 20 17:32:47 2026 X-Original-To: dev-commits-src-main@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 4h3nf74LG4z6mHXJ for ; Mon, 20 Jul 2026 17:32:47 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3nf733Qtz3Xjm for ; Mon, 20 Jul 2026 17:32:47 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784568767; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=xUoOknbyLokVX2KF6dqGMZNLUOWb0RwXqoc2XxiKsgI=; b=TfNAI4I1x/9mdBHJ+MJ4eySwHD7LjvF5yaHeGl9IZSTq4GdGBeWFDTvsHqK5OKENFYngqY QhXw2U1vj0Tfr0IZ0q5UWCFPdxiv5/34jYJqU9VaeWt1PnLebpfckXeD7h5Q1dCf1QP2ij ZKqKSWD3Opd0Mvib75At4si1YY9XJm7T9zqSzByQqtL2/ezj9SlWrwQSIgM+rT3vuv74vh WLseLB98SeFAqrbX+Ou7ryUXbvpiiqzjul20RTbdT30Si+XuIlzWigRMT+7qKgpvUgECDf GGl9ZRrYWjjQihR3W+JygyxXZaUnC3UGGFLBbzuU1ebj+v8BD18m1Tmy++XGkw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784568767; a=rsa-sha256; cv=none; b=gnrgjZU3gD1z8XhXcCjyGQ9sqDZfujoI07msmy6RB/V5wCo+00NgsssfqQq+dloOOgVS6w QGs5BWkQQVbjUuC6WWy3k+Tq4+Z7hRQuVZN6SAO3tB7EUB0j/TxDa9wKBhjb/1QmsHW27M iwrr4wZC7bif0AEiIMgW1QQLFYzguiHcIZpP5+yl+mbxSOk4ApAoOZo17PePyn1bCCXg6M 2pdyzV142cYryi859KY7jee2xv0F8hacqtFMl7xj03IuhVsC7WQSJvV/FtSkicnGHv+7JY FilziG7DA/lieYul8zyP47qtsTgZvYP88Rn+CE5xdeZcNAa7hJcZ36mXcqcNNQ== 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=1784568767; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=xUoOknbyLokVX2KF6dqGMZNLUOWb0RwXqoc2XxiKsgI=; b=X4Ayvnx3Hglu3J/+ympRi4izID+6w0UW71emhbHHvAelehQtRGdeIKmRuo+67T6x1QZR0d gSQwra1vjcUmAAbtyLikMGn280hnh7kxtY2rRjIU1mHksfw8/3700FPnE/VRv6Fy6QIXxU 4V7HQ5CagxU8lYN8+hj1COsjIWlphn2GpXsNGKlG2sd1BpLLe2g8zZUulxUaNw/lma1LFN c52N4X7XTYMfint9MyNENlHfEVgnTenq/dDDRu5EQm30+bvA4zD/4aG6EwI/Q/Gr37ZQGz LTuGhr+X8k/oGbL2r07k0VTEwJmCxkdhSizIm9WtmLBoUp+uv6hUwG/59hQzWQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3nf725qJz1BB5 for ; Mon, 20 Jul 2026 17:32:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 38d31 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 17:32:47 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Artem Bunichev From: Mitchell Horne Subject: git: 5b7d6a128bef - main - vfs_unmountall.9: Fix an outdated .Xr to boot(9) List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mhorne X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5b7d6a128bef464e7fd331d172e4cf25a5d122c3 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 17:32:47 +0000 Message-Id: <6a5e5bbf.38d31.62c322ce@gitrepo.freebsd.org> The branch main has been updated by mhorne: URL: https://cgit.FreeBSD.org/src/commit/?id=5b7d6a128bef464e7fd331d172e4cf25a5d122c3 commit 5b7d6a128bef464e7fd331d172e4cf25a5d122c3 Author: Artem Bunichev AuthorDate: 2026-07-20 17:29:51 +0000 Commit: Mitchell Horne CommitDate: 2026-07-20 17:32:30 +0000 vfs_unmountall.9: Fix an outdated .Xr to boot(9) boot.9 was moved to kern_reboot.9, but this reference was not changed appropriately. Reviewed by: mhorne, kib, emaste Fixes: 800e74955d4e ("boot(9): update to match reality") MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D58350 --- share/man/man9/vfs_unmountall.9 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/man/man9/vfs_unmountall.9 b/share/man/man9/vfs_unmountall.9 index a637a6b025f5..8c1c2db58b2a 100644 --- a/share/man/man9/vfs_unmountall.9 +++ b/share/man/man9/vfs_unmountall.9 @@ -42,4 +42,4 @@ unmounts all mounted file systems from most recent to oldest in order to avoid handling dependencies. .Sh SEE ALSO -.Xr boot 9 +.Xr kern_reboot 9 From nobody Mon Jul 20 18:40:45 2026 X-Original-To: dev-commits-src-main@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 4h3q8Y2rNtz6QLbT for ; Mon, 20 Jul 2026 18:40:45 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3q8Y1nKSz3njG for ; Mon, 20 Jul 2026 18:40:45 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784572845; 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=ECRCTVVP8qvwsqg12o1Fm1cuQZc6DWHygpGvzQidh+o=; b=D+kD1lZEVIdng/jIIfrZlVC+1lO/dhvl8r/RkRQiSO+YVKVNqiRa5RRH9L+P2XF1Lp1imv wruZ+i/oV56GU11hJbdji8+1an8Cvtcc+vBIadQjJWjrgZ1G/7FMU5uwcPZPMNnFvLzmGr S9cNHIROkFqu/3juvgAEEqlisfNyMxoplfsQ6O2j4PFx4ay/1r0+nMARAzUcbx9V05/eud 3Cdd/N9DNQpXc6zGeinh02kGt8r9SziJa6re4NTm0rv1wq5JZSoaTdbfXrFpOpMdqGSwsv iaXZyTaHu9yKE2EE0ThKn1t0ozUQ0ujWy+O9w+qGBrpCTxIorsz6+BWrJxF/kw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784572845; a=rsa-sha256; cv=none; b=ZSwMF8pOaugaDDPoNvUYprJp4/CB3cmI+EVN5vAMkIVuQ6igHL2apkh5INOLGTRIb1EM4L EkWovUdAXbHfHSK86oc05f6F66XMIubXsMSqA2siSAfE0xcGnP65KDuj0jtKAqMqjYfFUZ rTSv+zbZdokDjpivzsVAeD+1zf290mQsakwi9R1JYwP/To1lNRDe7llqt/dqgp53Ol5tfQ H4EoBKpSMRSEpMfb+klX97F2uucmrGFSd2Bti1Uz7+Fmp2cCv3FSKsYs0YNIyaNgbItY3A AJLZ5ce5cIJGixXE3VxqcQwN4W5fTXxA4OxPyIT8W6AqOHcjUyrow/Gho+rCwA== 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=1784572845; 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=ECRCTVVP8qvwsqg12o1Fm1cuQZc6DWHygpGvzQidh+o=; b=GnTZfMTgjgYmnkzTSSK35T9HA16W0WWjyDPJ5wALUNZyv4MOTZ3duQxfZQaEP2Exhud3C0 goOUyBr1xE2VTW4gCCeS5oN2OeejYYxl/6BaIVGM/ZAZdXEc7Obw4rNR6se+IgMeXbYLcB Aw61GsDW6k2mVpzsaMIe60sdw060bw67bv1iOaUr+Xu7Dh2PtyVvq/C5ErrbTM2fFPvbwQ iR1SehCc8+8QzDEwK5mHCQB2iCFFrfMCV2oWFZ08jpHX1+NBzogAjrtJ/o+sOwYYB6NMXs Jt2xODYpTVGR12zaOW33lmP6fI7Q/FrYu2xu4IZ1ZwoQ8EJvEKy2SbFwk+wLCA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3q8Y0jv6z1CYb for ; Mon, 20 Jul 2026 18:40:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3d975 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 18:40:45 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: aa588213d8f5 - main - ministat: revert "parse comma used as decimal delimiter" List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: glebius X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: aa588213d8f54803fc0b6b09d34f20fb30e57896 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 18:40:45 +0000 Message-Id: <6a5e6bad.3d975.48c70492@gitrepo.freebsd.org> The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=aa588213d8f54803fc0b6b09d34f20fb30e57896 commit aa588213d8f54803fc0b6b09d34f20fb30e57896 Author: Gleb Smirnoff AuthorDate: 2026-07-20 18:38:33 +0000 Commit: Gleb Smirnoff CommitDate: 2026-07-20 18:40:28 +0000 ministat: revert "parse comma used as decimal delimiter" This partially reverts commit 77a201b1705dbd97ea9ebe5b25b1d4ddac8a7d38. Requested by: des, fuz --- usr.bin/ministat/ministat.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/usr.bin/ministat/ministat.c b/usr.bin/ministat/ministat.c index bb2b7e32ea0b..bc2f49fb8536 100644 --- a/usr.bin/ministat/ministat.c +++ b/usr.bin/ministat/ministat.c @@ -483,7 +483,7 @@ dbl_cmp(const void *a, const void *b) static struct dataset * ReadSet(FILE *f, const char *n, int column, const char *delim) { - char buf[BUFSIZ], *p, *t, *comma; + char buf[BUFSIZ], *p, *t; struct dataset *s; double d; int line; @@ -507,8 +507,7 @@ ReadSet(FILE *f, const char *n, int column, const char *delim) } if (t == NULL || *t == '#') continue; - if ((comma = strchr(t, ',')) != NULL) - *comma = '.'; + d = strtod(t, &p); if (p != NULL && *p != '\0') errx(2, "Invalid data \"%s\" on line %d in %s", From nobody Mon Jul 20 20:20:15 2026 X-Original-To: dev-commits-src-main@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 4h3sMM707nz6QTw7 for ; Mon, 20 Jul 2026 20:20:15 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3sMM6Jrzz40xZ for ; Mon, 20 Jul 2026 20:20:15 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784578815; 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=tWm0HpbAZHwCgmF6J0mSc0A0K3Ol7j4s0G+sGOZJ2qM=; b=fxvjhlW2TSfL5XZZ2gokvTsYdnakHIRBu/5fWWJWXU+xp14xUt7KgDbOJVnRauSasQngIc jCR1c+pS1EoknnhKJFAJh+qVWi19hrqd6x3+FU0AcHYT00Mfm/k/MrdwtP0KmBwIYO3ViU SEBf5vnajalY4pUdhNx92RagWG2rS+jPGabZa4+c7hL2rZbJrSZB60ttki6qxiPgDRnX8Y 3NSbxNVEXs+q83fYO8XI3FmJrZlqiRGhrawULhQTA33FFQRsZVtoR68noFT0ubatJqrFCt TSDmu92fFUONAK3z03d4FuFb28pE/G3/5dnJ0npue4z6qNTV9dpSRseW5r4VmQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784578815; a=rsa-sha256; cv=none; b=mB/azWF3fRr5ELn+n+Hk0OsPCISlXrJlTV/WwmXQc6XoR3D3fZ0xZIFM+Kc9/fEYBAbekt Emffj8izNZajfSP7ALpN1RbP+qX3Ql7HhdIxORCnFlvfUS6MXFUcSBhYSxtqdD/qaJGMwK 0tDtdaoZa+QBl+ilgB9CiGngbdwJgFrjgOMPNQKKHJa9lZXmnvgs/omDAmCrGcuAU/kSR4 nHduV95SB5faojwx2hYhsYzc0XMRjA3rS7ps0jRFFLBjKTr9aky/fYaKuz0UZp6uaLOYcQ UI3zffLIWFVhu3bkw/lC66eHgf/ZkzJmQgA0RxjfF2+fI0eIoiXehE2xobmqyw== 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=1784578815; 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=tWm0HpbAZHwCgmF6J0mSc0A0K3Ol7j4s0G+sGOZJ2qM=; b=QnH0rg/pWzy8SHWBlzV/uQu5Ei9fRpQYK0Fg9ZcZFO7FwYeHd7vR2COb0EBSypqdZOA/9x 22aVwYFHG3Ugwa01FC/BaOBD2+NtjaK74wfbI5tmtfRfDWTKjNBAp71LBtGlA8hrdahqmq Dz0h3+anOaclAMjBtTE9AdKT6esY1wTfTZI1dF7v2B9sUX/F+cIc2F9EiuqS/57qP4RIWo P3H6phf7tGcng86QHBpZwlmzZgkEFRRx6ZNMW8qVryCTnDg1OBUsJLVF+Z2riiaQU1GzSK pjDZ8dnhhMYyYBpTdbkIFNH7qWoCTJ7A7KD+jyAudbpwJBIsT4JemZIauz3ACA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3sMM5DDkz2XZ for ; Mon, 20 Jul 2026 20:20:15 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 181b7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 20:20:15 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: d3b7bbee9275 - main - ptrace(2): add PT_GET_CHILDREN List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d3b7bbee9275d5a3c58a9e75d1fffc60a9333352 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 20:20:15 +0000 Message-Id: <6a5e82ff.181b7.57447dc8@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=d3b7bbee9275d5a3c58a9e75d1fffc60a9333352 commit d3b7bbee9275d5a3c58a9e75d1fffc60a9333352 Author: Konstantin Belousov AuthorDate: 2026-07-17 14:57:04 +0000 Commit: Konstantin Belousov CommitDate: 2026-07-20 20:19:12 +0000 ptrace(2): add PT_GET_CHILDREN Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58315 --- sys/compat/freebsd32/freebsd32_misc.c | 16 ++++ sys/kern/sys_process.c | 139 +++++++++++++++++++++++++++++++++- sys/sys/ptrace.h | 12 +++ 3 files changed, 165 insertions(+), 2 deletions(-) diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c index e07000015d54..e899c55ee5b1 100644 --- a/sys/compat/freebsd32/freebsd32_misc.c +++ b/sys/compat/freebsd32/freebsd32_misc.c @@ -1031,6 +1031,7 @@ freebsd32_ptrace(struct thread *td, struct freebsd32_ptrace_args *uap) register_t args[nitems(td->td_sa.args)]; struct ptrace_sc_ret psr; int ptevents; + struct ptrace_child *children; } r; union { struct ptrace_io_desc32 piod; @@ -1173,6 +1174,14 @@ freebsd32_ptrace(struct thread *td, struct freebsd32_ptrace_args *uap) pscr_args[i] = pscr_args32[i]; r.sr.pscr_args = pscr_args; break; + case PT_GET_CHILDREN: + if (uap->addr == NULL) + addr = NULL; + else if (uap->data < 0) + error = EINVAL; + else + addr = &r.children; + break; case PTINTERNAL_FIRST ... PTINTERNAL_LAST: error = EINVAL; break; @@ -1242,6 +1251,13 @@ freebsd32_ptrace(struct thread *td, struct freebsd32_ptrace_args *uap) offsetof(struct ptrace_sc_remote32, pscr_ret), sizeof(r32.psr)); break; + case PT_GET_CHILDREN: + if (uap->addr != 0) { + error = copyout(r.children, uap->addr, + td->td_retval[0] * sizeof(struct ptrace_child)); + free(r.children, M_TEMP); + } + break; } return (error); diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c index 2ac0a33c3421..fc81ac4ca6c8 100644 --- a/sys/kern/sys_process.c +++ b/sys/kern/sys_process.c @@ -733,6 +733,7 @@ sys_ptrace(struct thread *td, struct ptrace_args *uap) syscallarg_t args[nitems(td->td_sa.args)]; struct ptrace_sc_ret psr; int ptevents; + struct ptrace_child *children; } r; syscallarg_t pscr_args[nitems(td->td_sa.args)]; void *addr; @@ -816,6 +817,14 @@ sys_ptrace(struct thread *td, struct ptrace_args *uap) break; r.sr.pscr_args = pscr_args; break; + case PT_GET_CHILDREN: + if (uap->addr == NULL) + addr = NULL; + else if (uap->data < 0) + error = EINVAL; + else + addr = &r.children; + break; case PTINTERNAL_FIRST ... PTINTERNAL_LAST: error = EINVAL; break; @@ -870,6 +879,13 @@ sys_ptrace(struct thread *td, struct ptrace_args *uap) offsetof(struct ptrace_sc_remote, pscr_ret), sizeof(r.sr.pscr_ret)); break; + case PT_GET_CHILDREN: + if (uap->addr != NULL) { + error = copyout(r.children, uap->addr, + td->td_retval[0] * sizeof(struct ptrace_child)); + free(r.children, M_TEMP); + } + break; } return (error); @@ -965,6 +981,64 @@ proc_can_ptrace(struct thread *td, struct proc *p) return (0); } +static int +ptrace_count_children(struct thread *td, struct proc *p, bool count_everything) +{ + struct proc *pp; + int error, num; + + sx_assert(&proctree_lock, SX_LOCKED); + num = 0; + LIST_FOREACH(pp, &p->p_children, p_sibling) { + if (count_everything) { + error = 0; + } else { + PROC_LOCK(pp); + error = p_cansee(td, pp); + PROC_UNLOCK(pp); + } + if (error != 0) + continue; + num++; + } + LIST_FOREACH(pp, &p->p_orphans, p_orphan) { + if (count_everything) { + error = 0; + } else { + PROC_LOCK(pp); + error = p_cansee(td, pp); + PROC_UNLOCK(pp); + } + if (error != 0) + continue; + num++; + } + return (num); +} + +static bool +ptrace_report_child(struct thread *td, struct proc *p, struct proc *pp, + struct ptrace_child *ptc) +{ + sx_assert(&proctree_lock, SX_LOCKED); + + PROC_LOCK(pp); + if (p_cansee(td, pp) != 0) { + PROC_UNLOCK(pp); + return (false); + } + ptc->pid = pp->p_pid; + if ((pp->p_flag & P_TRACED) != 0) { + ptc->flags |= PTCHLD_TRACED; + if (pp->p_pptr == td->td_proc) + ptc->flags |= PTCHLD_TRACED_BY_ME; + } + if ((pp->p_flag & P_WEXIT) != 0) + ptc->flags |= PTCHLD_EXITED; + PROC_UNLOCK(pp); + return (true); +} + static struct thread * ptrace_sel_coredump_thread(struct proc *p) { @@ -995,7 +1069,8 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) struct ptrace_coredump *pc; struct thr_coredump_req *tcq; struct thr_syscall_req *tsr; - int error, num, tmp; + struct ptrace_child *children, *ptc; + int error, num, num1, tmp; lwpid_t tid = 0, *buf; #ifdef COMPAT_FREEBSD32 int wrap32 = 0, safe = 0; @@ -1021,6 +1096,7 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) case PT_SET_EVENT_MASK: case PT_DETACH: case PT_GET_SC_ARGS: + case PT_GET_CHILDREN: sx_xlock(&proctree_lock); proctree_locked = true; break; @@ -1132,8 +1208,14 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) /* Allow thread to clear single step for itself */ if (td->td_tid == tid) break; + goto default_check; + + case PT_GET_CHILDREN: + if (p == curp) + break; + goto default_check; - /* FALLTHROUGH */ +default_check: default: /* * Check for ptrace eligibility before waiting for @@ -1864,6 +1946,59 @@ coredump_cleanup_nofp: free(tsr, M_TEMP); break; + case PT_GET_CHILDREN: + PROC_UNLOCK(p); +get_children_repeat: + /* + * If addr != NULL, we should ignore p_cansee() to + * allocate enough space for the children array, + * because the process is allowed to change visibility + * between loops. But do not count children which + * we cannot see when only returning the count, to + * avoid a leak of information. + */ + num = ptrace_count_children(td, p, addr != NULL); + + if (addr == NULL) { + td->td_retval[0] = num; + PROC_LOCK(p); + break; + } + if (data < num * sizeof(struct ptrace_child)) { + error = ENOMEM; + PROC_LOCK(p); + break; + } + sx_xunlock(&proctree_lock); + children = mallocarray(num, sizeof(struct ptrace_child), + M_TEMP, M_WAITOK | M_ZERO); + sx_xlock(&proctree_lock); + num1 = ptrace_count_children(td, p, true); + if (num1 > num) { + free(children, M_TEMP); + goto get_children_repeat; + } + num = num1; + num1 = 0; + LIST_FOREACH(pp, &p->p_children, p_sibling) { + MPASS(num1 < num); + ptc = &children[num1]; + if (ptrace_report_child(td, p, pp, ptc)) + num1++; + } + LIST_FOREACH(pp, &p->p_orphans, p_orphan) { + MPASS(num1 < num); + ptc = &children[num1]; + if (ptrace_report_child(td, p, pp, ptc)) { + num1++; + ptc->flags |= PTCHLD_ORPHAN; + } + } + *(struct ptrace_child **)addr = children; + td->td_retval[0] = num1; + PROC_LOCK(p); + break; + default: #ifdef __HAVE_PTRACE_MACHDEP if (req >= PT_FIRSTMACH) { diff --git a/sys/sys/ptrace.h b/sys/sys/ptrace.h index 2aa82ce07a1d..54669493ca75 100644 --- a/sys/sys/ptrace.h +++ b/sys/sys/ptrace.h @@ -86,6 +86,7 @@ #define PT_SETREGSET 43 /* Set a target register set */ #define PT_SC_REMOTE 44 /* Execute a syscall */ #define PT_SET_SC_RET 45 /* Set (fake) syscall results */ +#define PT_GET_CHILDREN 46 /* Report children */ #define PT_FIRSTMACH 64 /* for machine-specific requests */ #define PT_LASTMACH 127 @@ -206,6 +207,17 @@ struct ptrace_sc_remote { syscallarg_t *pscr_args; }; +#define PTCHLD_TRACED 0x00000001 +#define PTCHLD_TRACED_BY_ME 0x00000002 +#define PTCHLD_EXITED 0x00000004 +#define PTCHLD_ORPHAN 0x00000008 + +struct ptrace_child { + pid_t pid; + int flags; + uint64ptr_t rsrv[3]; +}; + #ifdef _KERNEL #include From nobody Mon Jul 20 20:20:16 2026 X-Original-To: dev-commits-src-main@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 4h3sMP2hMVz6QTx6 for ; Mon, 20 Jul 2026 20:20: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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3sMP0mQRz40m9 for ; Mon, 20 Jul 2026 20:20:17 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784578817; 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=YQjUTEdDSQYh5p/6bPt+NT6zq94wTxqd262WBh4bqkg=; b=rxzDOKNPUDIvQcipWoGks3EF5QiPZoRLwyfOOcKUAxJmPDPBD1BQcm3OjW+UONvZi5AKDo Yuyzul94xV/6HaQBlG/Lv+xRRzKIgkXbe5LA2IZOzqjfXpXwrZF1d+zU/52oFP1XpPr3vz jl6yNp2wsmRxVjGefRSOqL1J5k89U+HeJve3i9K4O5cXS7v1mhkhG7KyvGUBd0AigKUnoh 4vAKfpOHT3XtTQmGkdlARNFYo/qLjvMBS3cuktLtSB/ZCP4Qr9WVXvwnGdqPCt/ZFEd/CE BCFPSwJFPkl1TeenYBMplrbbCUf88uINUU13q7+6QX5AXgCLSt/KK64WMsAP2w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784578817; a=rsa-sha256; cv=none; b=Cf+djnPE/ytCGJA6k/MwRNr5WQI1sW4MHIjQUvfoPsVYTDkW2go4ntgvbP1z9n7qufo79r rb7O7tFghew7Tjbnnd0B8WVaN0HfKU111xZaCTWb6mxcT5ZUmSwlfjppthwKt0MmG31FkK vEdRT5VWoW7HdY05bXCuPE3nr7BjpLeCnDflhTPtT1b0UCrzYA3Al/SYs6RnMKyoRbMZxc +0nPD6Ros7h0DI3brS38C/tH/Me5ii84DVXUQ9rUNGMOoJKtJuWswfTupKrN+PbSfuZeRY H4evbGpI9UprgO47sBPFPV+CNaP92SAq2LMiLrIOleitm8qAt4CvqBmE/urJ6Q== 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=1784578817; 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=YQjUTEdDSQYh5p/6bPt+NT6zq94wTxqd262WBh4bqkg=; b=RBGyQJjESZj/z+v/Zfi0Xy05anwSN8Hn4Eo6bj56YB7k37UKGRgBuA/g8USrKN6RmyHG1T qRwT9gqSJ1zciOtmeMCa3PxMw+lge7QxyUwABSlkCYumoggGuA77GKE/nthOWeLl5B78AD lEqBtAekImZfFW7BJyL7NaRFqxdlTfEmp/4zcLOlvMhDn+VCC5/Yx7uA3kfmM3djAyNw39 YKH2z4VhiCYyb+AajIFz+M/H878KPnFR8aIaRfAcHy+5O/mVlZ2lRdF5ImOnpH8DrKQWal 7EDfgLFSCLWDEUSfeNKES1srsey3T7JoVrVWrTBWZMSnd7h2/zKV0r8DWqJEtQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3sMN6Rmzz27R for ; Mon, 20 Jul 2026 20:20:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 19202 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 20:20:16 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 6dbeaf1afaba - main - ptrace.2: document PT_GET_CHILDREN List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6dbeaf1afaba52ba224f24773cbaac6317e11ff2 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 20:20:16 +0000 Message-Id: <6a5e8300.19202.77ca66cb@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=6dbeaf1afaba52ba224f24773cbaac6317e11ff2 commit 6dbeaf1afaba52ba224f24773cbaac6317e11ff2 Author: Konstantin Belousov AuthorDate: 2026-07-17 20:12:13 +0000 Commit: Konstantin Belousov CommitDate: 2026-07-20 20:19:12 +0000 ptrace.2: document PT_GET_CHILDREN Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58315 --- lib/libsys/ptrace.2 | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/lib/libsys/ptrace.2 b/lib/libsys/ptrace.2 index e1739a56e115..cedcf92cbef1 100644 --- a/lib/libsys/ptrace.2 +++ b/lib/libsys/ptrace.2 @@ -1044,6 +1044,61 @@ Result of the execution is returned in the member. Note that the request and its result do not affect the returned value from the currently executed syscall, if any. +.It Dv PT_GET_CHILDREN +Returns a report describing the children of the process specified by +.Fa pid . +Only children visible to the current thread are reported. +.Pp +If the +.Fa addr +argument is +.Dv NULL , +the instantaneous number of children is returned as +the result of the request. +.Pp +If the +.Fa addr +argument is not +.Dv NULL , +it must point to the array of +.Bd -literal +struct ptrace_child { + pid_t pid; + int flags; +}; +.Ed +elements. +The size of the array in bytes must be passed in +.Fa data . +The +.Dv PT_GET_CHILDREN +implementation fills the array and returns the number of elements filled. +.Pp +For each element, the +.Va pid +member contains the PID of the corresponding child. +The +.Va flags +member may have the following flags set: +.Bl -tag -width PTCHLD_TRACED_BY_ME +.It Dv PTCHLD_TRACED +The child specified by the +.Va pid +member is traced. +.It Dv PTCHLD_TRACED_BY_ME +The child specified by the +.Va pid +member is traced +by the caller (not the +process specified by the +.Fa pid +argument to the function). +.It Dv PTCHLD_EXITED +The child process is exiting or is a zombie. +.It Dv PTCHLD_ORPHAN +The child process is currently being debugged by a process other +than its parent process. +.El .El .Sh PT_COREDUMP and PT_SC_REMOTE usage The process must be stopped before dumping or initiating a remote system call. From nobody Mon Jul 20 20:47:41 2026 X-Original-To: dev-commits-src-main@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 4h3sz15drbz6dPf0 for ; Mon, 20 Jul 2026 20:47:41 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3sz158bpz448n for ; Mon, 20 Jul 2026 20:47:41 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784580461; 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=ca/rl6gMF8MkeQVPHe9xt1LmsXeN2MImatzpH8AFdE4=; b=EoEqvPqe8Bc9J/nQ5prtLt3P1SEQZiJXJKUuhpDhzDl4ZkR0b/n8JrnPCAve7FgaYAMPUL f1p39B8FZQe4PJi62OPnak5elyKw8Bj81Q+t4ltzjjAeY7ZQZfIBWKptWXDCRMMeG1bo2t f9VK3bd3y81CUpIKmOhaTwWFJ3Ug7LTc/AXm+qpRkFldMEzlruUBUu5GS0ykRdAmuX0hMX dnmOw/5tef4psJaYgiFUG6a/d8QMbxNqFarUoMqztc5FUlGc6YZ9X0LErWmedrZMHeG1P6 /9ifTu8G9acWtMVg9yZi1UFWILtehEKGXBzDHRs74bw2FWjez7dmE7Bgi3L2rA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784580461; a=rsa-sha256; cv=none; b=G/T/o/mObwAlmKE5E6tRtf5phB2k5IHYjKeGbyS/UNxUOOpPDF9dsyPnVsiee2mrp8gufR +hvPFsFPatu+yPIF94J97Xt0qJsbwpA0MoNgzUwRaEzvmZTapAyk/1gdozurhvuevNvS9+ WGRBcTOGIZh0P3rSUUeF42v5+ijcUQeMgHPgw21dmpnrSfyo84IMj2MehOgxSLE/kr31oP Je/hj6e2AqMq5p6tnR4BQoRSx6ooMNIoDjlJXelGlLIK956x6x/LdDVquYU+lhmZ3JwUFh qHYObBI2PIgnWZ1g6bZTp+AM7IbOMBRDH40AUiZmA65lVGrcA4LnFaAQq2E4/A== 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=1784580461; 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=ca/rl6gMF8MkeQVPHe9xt1LmsXeN2MImatzpH8AFdE4=; b=gXBLb+uOLhXXxx9MReDrPoWYMSYyXD8dFftNl1mr1mIDblPwPRP2alqL4zl980sCN0b8G1 osCpnY7fEEr6A5dxE2IPDdP2pvM/7+KEwPhBG7AfAQ+0JhzakMmfMZIBY8aIw5v6ICxpxp 5X+57wEUuIWPkHNQChWQ87xCeGS6U06bRLQxZvEpjpPSvE3SgYz6pmPuj9tXacw3K6qak+ HjWinUowjovvCoDwD9CHrm+7/g7EgjtoPJfhQg1BRbK0lU1ouBaB+x+IjGJX6NsdQThzTE 8udZh9Aejon9jOR9mP787zHSanWmNzVkExnrwnQBEc7gnrxotmyphPiu0bD9PQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3sz13Kpqz36Z for ; Mon, 20 Jul 2026 20:47:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1a2c6 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 20:47:41 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Ed Maste Subject: git: b273481f2a84 - main - vtfontcvt: Avoid dead store in add_char List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: emaste X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b273481f2a840a05e4039655be99528e1fa9388c Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 20:47:41 +0000 Message-Id: <6a5e896d.1a2c6.167c3759@gitrepo.freebsd.org> The branch main has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=b273481f2a840a05e4039655be99528e1fa9388c commit b273481f2a840a05e4039655be99528e1fa9388c Author: Ed Maste AuthorDate: 2026-05-22 18:08:58 +0000 Commit: Ed Maste CommitDate: 2026-07-20 20:46:50 +0000 vtfontcvt: Avoid dead store in add_char The fallback glyph is stored at index 0, and does not need to be inserted into a mapping. Previously there was a dead store of add_glyph's return value for the fallback case, which upset Clang's static analyzer. Now, cast the return value to (void) to make it clear this is intentional. Also change add_glyph's fallback parameter to a c99 bool to make its use more clear. Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57174 --- usr.bin/vtfontcvt/vtfontcvt.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/usr.bin/vtfontcvt/vtfontcvt.c b/usr.bin/vtfontcvt/vtfontcvt.c index f39076b09be6..29294f589fb5 100644 --- a/usr.bin/vtfontcvt/vtfontcvt.c +++ b/usr.bin/vtfontcvt/vtfontcvt.c @@ -254,7 +254,7 @@ dedup_mapping(unsigned int map_idx) } static struct glyph * -add_glyph(const uint8_t *bytes, unsigned int map_idx, int fallback) +add_glyph(const uint8_t *bytes, unsigned int map_idx, bool fallback) { struct glyph *gl; int hash; @@ -321,13 +321,13 @@ add_char(unsigned curchar, unsigned map_idx, uint8_t *bytes, uint8_t *bytes_r) /* Prevent adding two glyphs for 0xFFFD */ if (curchar == 0xFFFD) { if (map_idx < VFNT_MAP_BOLD) - gl = add_glyph(bytes, 0, 1); + (void)add_glyph(bytes, 0, true); } else if (filter == false || curchar >= 0x20) { - gl = add_glyph(bytes, map_idx, 0); + gl = add_glyph(bytes, map_idx, false); if (add_mapping(gl, curchar, map_idx) != 0) return (1); if (bytes_r != NULL) { - gl = add_glyph(bytes_r, map_idx + 1, 0); + gl = add_glyph(bytes_r, map_idx + 1, false); if (add_mapping(gl, curchar, map_idx + 1) != 0) return (1); } From nobody Mon Jul 20 21:23:58 2026 X-Original-To: dev-commits-src-main@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 4h3tmv1151z6dSLy for ; Mon, 20 Jul 2026 21:23:59 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3tmv0QH3z3C6g for ; Mon, 20 Jul 2026 21:23:59 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784582639; 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=zjijI9qDs9QftxvuOIkIfra9aF29Ki5W3zoaRR07AiA=; b=lliVOjDPD/eElERc89eN3EYTJ0P2Xn4wHVaSY6X0N1fm8EVojOvyUSSDgRvKyehnDjZM9D pHdChf1vjLxKNq+LLjtv0ckPV43iOIlt5KGKVM/VwT+7PlYesZWAKE5sijAKukpkLxYwaT stGM1yLKI5I7gBy8ZfD+Nzp4F7/R/YZpDDRHBbAeOwY3rmcHItoM09ZOkku72+Dl2U5syG C+ljHPRsyWDcXb/IYkHz7DIjoTy8QGBTc68Ij39MksJUHHXiqpUGHL3f9RvIQy2LxYNFFo 1VxztKhchgnwgXqDMpy9dhr3JNfuioB5uG5M9ADPnG5IFakm96jWXqin8/thRg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784582639; a=rsa-sha256; cv=none; b=LlHtnU13Ww0vdpGxW+iHuky0f2nqx/k2bDehNYFTgM6kXR7b0m3hfIjAzXyJqM5ZkeQATO nMxbQXJwKhJsmv6aSTWTfOQA+nrgL/mNhIEAy9YqmihmzyRXcSxIj9/ATnrDHOAGK8qZm9 INB2JozpnoqNOrLjkFVdL39kIeP/o0sYFJAkQE3B+R4iJTg3qKXZ2Tr47Oc6enUGuGkRFB ugvIV/uFPC+vG5+yl0+WrymgAY9X4mdmEP0k5tZiu+H+j0Xo5QU+VAyuHwRZDn+bYiZ5I3 LHp6VRZ82Skyh8nIg5Cr+L4Ysl5dLTV/BZz9eYY50f383WBdO+ytA3pJDERLYw== 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=1784582639; 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=zjijI9qDs9QftxvuOIkIfra9aF29Ki5W3zoaRR07AiA=; b=KSkP1sclOtG5EsERjeSKlF/HfhLfVleZYCewwxm56dR92oOrJKfecZoRXyZ89eEfauGOf8 i2oDDr72CJQ8MdNyt8rF5/+ma5wlTJ7hVxw0PEeu37i7ti0kjtR9C0NA2p4HabEglTYXgB ohGhkFR4vOss8AvN96AMMxtBp4cx9iiy80RVKqZLLsq6jHYNavQEAysFSE49v7myZi86X/ w2wtGh4zs+gbD5uRYASS6cpQlZgRukE3CyuiEGIemxZ4aVhAmdjAJibYXv2xjhnMwn84Ml SF7EG/cdTuytypUp7LlOy1WcssF4h53/sRxGGYEh88vTS6OBRZhSBMLevV19Hg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3tmt66yzz4LK for ; Mon, 20 Jul 2026 21:23:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 20526 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 21:23:58 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Pouria Mousavizadeh Tehrani Subject: git: e4a457d13576 - main - if_geneve: Fix mbuf leak on ip_ecn_egress List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pouria X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e4a457d1357621265265089a5ece71c368dd2e99 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 21:23:58 +0000 Message-Id: <6a5e91ee.20526.4abadec3@gitrepo.freebsd.org> The branch main has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=e4a457d1357621265265089a5ece71c368dd2e99 commit e4a457d1357621265265089a5ece71c368dd2e99 Author: Pouria Mousavizadeh Tehrani AuthorDate: 2026-07-20 20:33:55 +0000 Commit: Pouria Mousavizadeh Tehrani CommitDate: 2026-07-20 21:21:54 +0000 if_geneve: Fix mbuf leak on ip_ecn_egress Free mbuf and increase IFCOUNTER_IERRORS if ip_ecn_egress() under geneve_input_inherit() decides to drop the packet. Reported by: Chris Jarrett-Davies of the OpenAI Codex Security Team Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58361 --- sys/net/if_geneve.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/sys/net/if_geneve.c b/sys/net/if_geneve.c index 59822045b77b..04873f0b7964 100644 --- a/sys/net/if_geneve.c +++ b/sys/net/if_geneve.c @@ -3125,16 +3125,12 @@ geneve_input_inherit(struct geneve_softc *sc, struct mbuf **m0, return (EINVAL); if (m->m_len < offset && - (m = m_pullup(m, offset)) == NULL) { - *m0 = NULL; + (*m0 = m = m_pullup(m, offset)) == NULL) return (ENOBUFS); - } iphdr = mtodo(m, offset - sizeof(struct ip)); - if (ip_ecn_egress(ECN_COMPLETE, &info->ecn, &iphdr->ip_tos) == 0) { - *m0 = NULL; + if (ip_ecn_egress(ECN_COMPLETE, &info->ecn, &iphdr->ip_tos) == 0) return (ENOBUFS); - } if ((sc->gnv_flags & GENEVE_FLAG_TTL_INHERIT) != 0 && info->ttl > 0) iphdr->ip_ttl = info->ttl; @@ -3148,17 +3144,13 @@ geneve_input_inherit(struct geneve_softc *sc, struct mbuf **m0, return (EINVAL); if (m->m_len < offset && - (m = m_pullup(m, offset)) == NULL) { - *m0 = NULL; + (*m0 = m = m_pullup(m, offset)) == NULL) return (ENOBUFS); - } ip6hdr = mtodo(m, offset - sizeof(struct ip6_hdr)); itos = (ntohl(ip6hdr->ip6_flow) >> IPV6_FLOWLABEL_LEN) & 0xff; - if (ip_ecn_egress(ECN_COMPLETE, &info->ecn, &itos) == 0) { - *m0 = NULL; + if (ip_ecn_egress(ECN_COMPLETE, &info->ecn, &itos) == 0) return (ENOBUFS); - } ip6hdr->ip6_flow |= htonl((uint32_t)itos << IPV6_FLOWLABEL_LEN); if ((sc->gnv_flags & GENEVE_FLAG_TTL_INHERIT) && (info->ttl > 0)) @@ -3176,10 +3168,8 @@ geneve_input_inherit(struct geneve_softc *sc, struct mbuf **m0, return (EINVAL); if (m->m_len < offset && - (m = m_pullup(m, offset)) == NULL) { - *m0 = NULL; + (*m0 = m = m_pullup(m, offset)) == NULL) return (ENOBUFS); - } info->isr = NETISR_ARP; break; @@ -3188,7 +3178,6 @@ geneve_input_inherit(struct geneve_softc *sc, struct mbuf **m0, return (EINVAL); } - *m0 = m; return (0); } From nobody Mon Jul 20 21:51:36 2026 X-Original-To: dev-commits-src-main@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 4h3vNn1ddjz6dVFF for ; Mon, 20 Jul 2026 21:51:37 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3vNn0bXzz3FxW for ; Mon, 20 Jul 2026 21:51:37 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784584297; 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=ZNSZiU6dnL6LG5N3GtZEY4M95961DcpsA65fITRnLMo=; b=E8iZth9G5YIyOjLQhfiL8z+XGiTRK1ZQtpjeYHzDKir0ZA6VvGfB8RvZTM1QByousJwh6o YM8/ZdAbbKPd1bM0kBGM7XoQ2eVBLBW47OfUTQKUP3yPm43r1DqKiKYICfB2HmyMk//PvG epOlSEVKssN37uQpb2KlJHPAw84ZqenxVfLNSEJ8OC1HlHi13CXXVxNNqAP6z4+LlRCYEf 2aLBmPL+jO8Gq9qFUwSDU4Vvefbvb0nNqJNcCTTyDgHrqEyQSnHsXc30TdQFkAtGyGy/h4 5NEEaAgnZG/XePLV0bK1VqP2x4tJ1i/oPeM0wMR0hMnQkMLZ8+VNdeYSgA8lhA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784584297; a=rsa-sha256; cv=none; b=Y4gXNyGzfRqQTT1JLyP/GDzfwhNWhl0NU+a1pv5PWD1vwRnPTCGmbYrOgG9DX7lQUVHPIR Sx5RJ+K8laArDEQR2WgoP0EyT6tM9aO7gRKJRkza0zlT3EhkPqtyKXPSnFC+SB0YdP+8sg MLphdmc2ldZukHFPbstAO5Gyxn/7cBMWgNzEX7jVNqpzBv8HTJSC/D5cyvV+lTyWnlCuXl BOqglwErrbHVwzpxx7ZSfzt8ESxBbpu2wKCYXMSx32dMpR5ywA7B3olUTJDG/Wl6G5L/io SL1hE1PiIgJPviqTH7CWFCfx7TJQKUENWVGQ7uy9a3jUKsXhHP6xqbHyxS2eYw== 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=1784584297; 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=ZNSZiU6dnL6LG5N3GtZEY4M95961DcpsA65fITRnLMo=; b=UPbQhnnpCMb6uBTpNOZwCMDWHLtRa2YDEiWMmS4rfEkRkg4APlDlqFNoZRWlED0K4NJmIx kZijgcKEMsEUXcw6M2WEYvvVaHpoms1Cq+4ATl6/ED1STEKUoEe5WLdZ3Yeja6XmaQncKh oXBB02XEXXeGj+tLu5GNBJ77SH7Q5pwei+J5RPkgYinahHUDoFACLkuY1OPc2aeXgskCSa GcksJwBRqNswStlka0fwD9wgH8l5jyZv2CHdWzFgcsIlPafr0N/6TZll0rTHIp3tSgJM8P J9elUdYer84JIGNTqAJs6B8WnGt2wI6LVEQ0wFfzPrR54cjtXSDRfZRChMhCjw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3vNm6YXJz4xW for ; Mon, 20 Jul 2026 21:51:36 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 23fa0 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 21:51:36 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 0e5b1384df10 - main - x86 xen: provide the prototype for xen_arch_intr_handle_upcall() in x86/apicvar.h List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0e5b1384df10e9b9700047cb79c347874212d2a9 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 21:51:36 +0000 Message-Id: <6a5e9868.23fa0.29ac01be@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=0e5b1384df10e9b9700047cb79c347874212d2a9 commit 0e5b1384df10e9b9700047cb79c347874212d2a9 Author: Konstantin Belousov AuthorDate: 2026-03-20 23:27:18 +0000 Commit: Konstantin Belousov CommitDate: 2026-07-20 21:49:26 +0000 x86 xen: provide the prototype for xen_arch_intr_handle_upcall() in x86/apicvar.h Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D56005 --- sys/x86/include/apicvar.h | 2 ++ sys/x86/xen/xen_arch_intr.c | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/x86/include/apicvar.h b/sys/x86/include/apicvar.h index 10dbc50a981b..00ec651be3d3 100644 --- a/sys/x86/include/apicvar.h +++ b/sys/x86/include/apicvar.h @@ -274,6 +274,8 @@ extern int x2apic_mode; extern int lapic_eoi_suppression; extern int apic_ext_dest_id; +void xen_arch_intr_handle_upcall(struct trapframe *); + #ifdef _SYS_SYSCTL_H_ SYSCTL_DECL(_hw_apic); #endif diff --git a/sys/x86/xen/xen_arch_intr.c b/sys/x86/xen/xen_arch_intr.c index dcf8b4aa35f1..adf3109e3d4a 100644 --- a/sys/x86/xen/xen_arch_intr.c +++ b/sys/x86/xen/xen_arch_intr.c @@ -77,7 +77,6 @@ SYSINIT(xen_intrcnt_init, SI_SUB_INTR, SI_ORDER_MIDDLE, xen_intrcnt_init, NULL); * Transition from assembly language, called from * sys/{amd64/amd64|i386/i386}/apic_vector.S */ -extern void xen_arch_intr_handle_upcall(struct trapframe *); void xen_arch_intr_handle_upcall(struct trapframe *trap_frame) { From nobody Mon Jul 20 21:51:38 2026 X-Original-To: dev-commits-src-main@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 4h3vNp3tsMz6dVSh for ; Mon, 20 Jul 2026 21:51:38 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3vNp1qcxz3GCS for ; Mon, 20 Jul 2026 21:51:38 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784584298; 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=tS5I+VpfXLNfgklaL1GIb0rUEnU7Vk0v/9+4i9cmUjA=; b=O9q1EISKiSFkSeNpn8HrrBlEpvRxcuqb1m8NaVxH+QBstsmsOhD5XE/w8gi3UMWeZYpB5Q sFT0H4dM18G8K8KuNvZAQhXHFjnQhdVss5+Cd2mBalKKQ47XLF3aBoKbbyAoauH7ifADhj 2wn1/fE0iPpgWzLrkowQte561SUo0yqTmz6H6dRrtMEquxjNi2hVOTz2bm2NgEtPFHnjk4 X7/ftYZ3sC1ctV7KrhtP1ZuR1ilEFRpfI/adxQiw3AABrhk8UO/nUe2lAMq057BjkLFZgn Obms9BUqrVHo6lj3V936CEhQ/WiMfU6+WcMPc1fM02JgEMmTyLUpHA2AqNet5g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784584298; a=rsa-sha256; cv=none; b=pjg5aFi5l489g1CHtt06teM6TJjHaG9RhfQkgLA0h6xikyYJq0TKxfy/y9ko7I5itJVBxY 3R/+62lOGotReS7R1OHcddHamQZmp1SLH6g0zW9OUV5X4m06BMzVVaLEKKhSyN7Xg3V9DD 5bp38AvGLBrX1V/HnXGZb2tIDHvTKMgdF3/mN1bXLrrMNgKUDTsdlpldKAk7cllV7W0Yvw aLwaBowvr499bq/7rauqyW6O+E27Uc2dZU6Qe4vZK+hHHm+JSGokUQV/g3yDPRQAMYHOie ocEDS755GydcfDT9ZjDlfKaCB8mQs761JWfV+uXGD+vkfAQveCay7b/RjfX4QA== 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=1784584298; 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=tS5I+VpfXLNfgklaL1GIb0rUEnU7Vk0v/9+4i9cmUjA=; b=n3iMlJkc8awfiJ+BWBV15Uq7t7CkN7noWVbnYikJzWyo+djOFVHmpQ8JQPiYhSpG46A1sV cR2igEbuP62cYZOuP6J/pw3Sk5hqdL0Trpfz/FkCNTvakD2CCqYb2nR7dvBAcTKJ/tHOMq MjNRtS0lBacj3To1aEItOuqhzjjKijdnGEBHG/XouU2+DicDqeKLQqCthZV0vBFuCD2QnE 9MJvKhLqevj0qdry9onMnUXQ5CSkPzBR5XmqyMf5BlndTokrVm4L7BTlMMixl7RPu8d4Nl wzRMOxZeTxJE/OZrat4kUMj8HBmQOJk51LLt7t7Z48xNcd87DMd8ZNAzfRTuSw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3vNp0NDSz4Pn for ; Mon, 20 Jul 2026 21:51:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 22164 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 21:51:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 6e93f5e4d693 - main - amd64: FRED support List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6e93f5e4d6932c423b89dff8fc08d86f8bdeb7b9 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 21:51:38 +0000 Message-Id: <6a5e986a.22164.2ca88691@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=6e93f5e4d6932c423b89dff8fc08d86f8bdeb7b9 commit 6e93f5e4d6932c423b89dff8fc08d86f8bdeb7b9 Author: Konstantin Belousov AuthorDate: 2026-02-13 11:24:40 +0000 Commit: Konstantin Belousov CommitDate: 2026-07-20 21:51:02 +0000 amd64: FRED support FRED support as defined starting from the SDM rev. 90, requires a new 'events' entry point to receive user and kernel mode exceptions and interrupts notifications from the hardware. A minimal asm trampoline is enough, rest can be implemented in C due to the clean FRED organization of the event reporting. The syscall entry is handled by a microptimized assembly path, directly calling into the amd64_syscall() handler, instead of the generic events entry point. Tested by: emaste Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D55829 --- sys/amd64/amd64/cpu_switch.S | 73 ++++- sys/amd64/amd64/db_trace.c | 5 +- sys/amd64/amd64/exception.S | 282 ++++++++++++++++++ sys/amd64/amd64/genassym.c | 15 + sys/amd64/amd64/initcpu.c | 43 +++ sys/amd64/amd64/machdep.c | 104 +++++-- sys/amd64/amd64/mp_machdep.c | 82 +++-- sys/amd64/amd64/trap.c | 558 +++++++++++++++++++++++++++++++++++ sys/amd64/amd64/vm_machdep.c | 10 +- sys/amd64/include/md_var.h | 2 + sys/amd64/include/pcb.h | 8 +- sys/amd64/vmm/intel/vmx.c | 2 +- sys/amd64/vmm/vmm.c | 2 +- sys/amd64/vmm/vmm_lapic.c | 5 + sys/amd64/vmm/vmm_lapic.h | 2 + sys/dev/hyperv/vmbus/x86/vmbus_x86.c | 3 +- sys/i386/i386/machdep.c | 2 + sys/kern/kern_thread.c | 2 +- sys/x86/include/apicvar.h | 3 +- sys/x86/include/frame.h | 1 - sys/x86/include/x86_var.h | 3 + sys/x86/x86/local_apic.c | 38 +-- 22 files changed, 1158 insertions(+), 87 deletions(-) diff --git a/sys/amd64/amd64/cpu_switch.S b/sys/amd64/amd64/cpu_switch.S index 21e55e64d74a..774098d7def5 100644 --- a/sys/amd64/amd64/cpu_switch.S +++ b/sys/amd64/amd64/cpu_switch.S @@ -187,14 +187,22 @@ do_kthread: cmpq %rax,%rdx jne do_tss done_tss: + movq %r8,PCPU(CURPCB) + cmpb $0,fred + jne 1f movq TD_MD_STACK_BASE(%r12),%r9 movq %r9,PCPU(RSP0) - movq %r8,PCPU(CURPCB) movq PCPU(PTI_RSP0),%rax cmpq $~0,PCPU(UCR3) cmove %r9,%rax movq %rax,TSS_RSP0(%rdx) - movq %r12,PCPU(CURTHREAD) /* into next thread */ + jmp 2f +1: movq TD_MD_STACK_BASE(%r12),%rdx + movl %edx,%eax + shrq $32,%rdx + movl $MSR_FRED_RSP0,%ecx + wrmsr +2: movq %r12,PCPU(CURTHREAD) /* into next thread */ /* Test if debug registers should be restored. */ testl $PCB_DBREGS,PCB_FLAGS(%r8) @@ -365,8 +373,36 @@ ENTRY(savectx) movl %eax,PCB_SFMASK(%rdi) movl %edx,PCB_SFMASK+4(%rdi) - sgdt PCB_GDT(%rdi) - sidt PCB_IDT(%rdi) + cmpb $0, fred + je 1f + movl $MSR_FRED_RSP0,%ecx + rdmsr + movl %eax,PCB_FRED_RSP0(%rdi) + movl %edx,PCB_FRED_RSP0+4(%rdi) + movl $MSR_FRED_RSP1,%ecx + rdmsr + movl %eax,PCB_FRED_RSP1(%rdi) + movl %edx,PCB_FRED_RSP1+4(%rdi) + movl $MSR_FRED_RSP2,%ecx + rdmsr + movl %eax,PCB_FRED_RSP2(%rdi) + movl %edx,PCB_FRED_RSP2+4(%rdi) + movl $MSR_FRED_RSP3,%ecx + rdmsr + movl %eax,PCB_FRED_RSP3(%rdi) + movl %edx,PCB_FRED_RSP3+4(%rdi) + movl $MSR_FRED_STKLVLS,%ecx + rdmsr + movl %eax,PCB_FRED_STKLVLS(%rdi) + movl %edx,PCB_FRED_STKLVLS+4(%rdi) + movl $MSR_FRED_CONFIG,%ecx + rdmsr + movl %eax,PCB_FRED_CONFIG(%rdi) + movl %edx,PCB_FRED_CONFIG+4(%rdi) + jmp 2f + +1: sidt PCB_IDT(%rdi) +2: sgdt PCB_GDT(%rdi) sldt PCB_LDT(%rdi) str PCB_TR(%rdi) @@ -442,8 +478,35 @@ ENTRY(resumectx) movq %rax,%cr3 /* Restore descriptor tables. */ + cmpb $0,fred + jne 1f lidt PCB_IDT(%rdi) - lldt PCB_LDT(%rdi) + jmp 2f +1: movl $MSR_FRED_RSP0,%ecx + movl PCB_FRED_RSP0(%rdi),%eax + movl 4 + PCB_FRED_RSP0(%rdi),%edx + wrmsr + movl $MSR_FRED_RSP1,%ecx + movl PCB_FRED_RSP1(%rdi),%eax + movl 4 + PCB_FRED_RSP1(%rdi),%edx + wrmsr + movl $MSR_FRED_RSP2,%ecx + movl PCB_FRED_RSP2(%rdi),%eax + movl 4 + PCB_FRED_RSP2(%rdi),%edx + wrmsr + movl $MSR_FRED_RSP3,%ecx + movl PCB_FRED_RSP3(%rdi),%eax + movl 4 + PCB_FRED_RSP3(%rdi),%edx + wrmsr + movl $MSR_FRED_STKLVLS,%ecx + movl PCB_FRED_STKLVLS(%rdi),%eax + movl 4 + PCB_FRED_STKLVLS(%rdi),%edx + wrmsr + movl $MSR_FRED_CONFIG,%ecx + movl PCB_FRED_CONFIG(%rdi),%eax + movl 4 + PCB_FRED_CONFIG(%rdi),%edx + wrmsr +2: lldt PCB_LDT(%rdi) #define SDT_SYSTSS 9 #define SDT_SYSBSY 11 diff --git a/sys/amd64/amd64/db_trace.c b/sys/amd64/amd64/db_trace.c index 5f751906b7e6..e14cd55978de 100644 --- a/sys/amd64/amd64/db_trace.c +++ b/sys/amd64/amd64/db_trace.c @@ -167,7 +167,10 @@ db_nextframe(db_addr_t *fp, db_addr_t *ip, struct thread *td) strcmp(name, "fork_trampoline") == 0 || strcmp(name, "mchk_calltrap") == 0 || strcmp(name, "nmi_calltrap") == 0 || - strcmp(name, "Xdblfault") == 0) + strcmp(name, "Xdblfault") == 0 || + strcmp(name, "fred_events_handlers") == 0 || + strcmp(name, "user_fred_syscall") == 0 || + strcmp(name, "user_fred_non_syscall") == 0) frame_type = TRAP; else if (strncmp(name, "Xatpic_intr", 11) == 0 || strncmp(name, "Xapic_isr", 9) == 0 || diff --git a/sys/amd64/amd64/exception.S b/sys/amd64/amd64/exception.S index 4d58e07caf4b..6dfb8a431fe7 100644 --- a/sys/amd64/amd64/exception.S +++ b/sys/amd64/amd64/exception.S @@ -1063,6 +1063,8 @@ ENTRY(fork_trampoline) movq %rbx,%rsi /* arg1 */ movq %rsp,%rdx /* trapframe pointer */ call fork_exit + cmpb $0, fred + jne fred_checkast jmp doreti /* Handle any ASTs */ /* @@ -1401,6 +1403,286 @@ gsbase_load_fault: movq $0,PCB_GSBASE(%r8) jmp doreti +/* + * FRED guarantees that on entry, %rflags is set to '2', which in + * particular means that interrupts are disabled, and DF/AC are clear. + * Interrupts are re-enabled by the C handler, if appropriate. + */ + ALIGN_TEXT +user_fred_syscall: + movq %rdx,TF_RDX(%rsp) + movq %rcx,TF_RCX(%rsp) + SAVE_SEGS + movq PCPU(CURPCB),%r11 + andl $~PCB_FULL_IRET,PCB_FLAGS(%r11) + sti + movw $KUDSEL,TF_SS(%rsp) + movw $KUCSEL,TF_CS(%rsp) + movq %r8,TF_R8(%rsp) + movq %r9,TF_R9(%rsp) + movq %rbx,TF_RBX(%rsp) + movq %rbp,TF_RBP(%rsp) + movq %r12,TF_R12(%rsp) + movq %r13,TF_R13(%rsp) + movq %r14,TF_R14(%rsp) + movq %r15,TF_R15(%rsp) + movl $TF_HASSEGS,TF_FLAGS(%rsp) + andl $TF_FRED_EVINFO2_INSTLENMASK,%eax + shrl $TF_FRED_EVINFO2_INSTLENSHIFT,%eax + movq %rax,TF_ERR(%rsp) + movq PCPU(CURTHREAD),%rdi + movl TF_RFLAGS(%rsp),%esi + andl $PSL_T,%esi + call amd64_syscall + movq PCPU(CURPCB),%rax + cli + testl $PCB_FULL_IRET,PCB_FLAGS(%rax) + jnz fred_checkast + movq PCPU(CURTHREAD),%rax + cmpl $0,TD_AST(%rax) + jnz fred_checkast + movq TF_RDI(%rsp),%rdi + movq TF_RSI(%rsp),%rsi + movq TF_RDX(%rsp),%rdx + movq TF_RAX(%rsp),%rax + xorl %r8d,%r8d + xorl %r9d,%r9d + xorl %r10d,%r10d + xorl %r11d,%r11d + addq $TF_ERR,%rsp + .globl fred_syscall_eretu +fred_syscall_eretu: + eretu + + ALIGN_TEXT +user_fred_non_syscall: + movq %rdx,TF_RDX(%rsp) + movq %rcx,TF_RCX(%rsp) + movq %r8,TF_R8(%rsp) + movq %r9,TF_R9(%rsp) + movq %rbx,TF_RBX(%rsp) + movq %rbp,TF_RBP(%rsp) + movq %r10,TF_R10(%rsp) + movq %r11,TF_R11(%rsp) + movq %r12,TF_R12(%rsp) + movq %r13,TF_R13(%rsp) + movq %r14,TF_R14(%rsp) + movq %r15,TF_R15(%rsp) + SAVE_SEGS + movq PCPU(CURTHREAD),%r9 + movq TD_PCB(%r9),%r8 + rdfsbase %rax + movq %rax,PCB_FSBASE(%r8) + rdgsbase %rax + movq %rax,PCB_GSBASE(%r8) + movl $TF_HASSEGS,TF_FLAGS(%rsp) + KMSAN_ENTER + movq %rsp, %rdi + call trap_fred_u + KMSAN_LEAVE +fred_checkast: + cli + movq PCPU(CURTHREAD),%rax + movq TD_PCB(%rax),%r8 + cmpl $0,TD_AST(%rax) + je fred_gouser + sti + movq %rsp,%rdi /* pass a pointer to the trapframe */ + call ast + jmp fred_checkast +fred_gouser: + testl $PCB_FULL_IRET,PCB_FLAGS(%r8) + jz fred_u_regs + andl $~PCB_FULL_IRET,PCB_FLAGS(%r8) + testl $TF_HASSEGS,TF_FLAGS(%rsp) + jne fred_do_segs + movw $KUDSEL,%ax + movw %ax,TF_DS(%rsp) + movw %ax,TF_ES(%rsp) + movw $KUF32SEL,TF_FS(%rsp) + movw $KUG32SEL,TF_GS(%rsp) +fred_do_segs: + /* Restore %fs and fsbase */ + movw TF_FS(%rsp),%ax + .globl fred_ld_fs +fred_ld_fs: + movw %ax,%fs + testl $PCB_32BIT,PCB_FLAGS(%r8) + jnz after_fred_fs + movq PCB_FSBASE(%r8),%rax + .globl fred_ld_fsbase +fred_ld_fsbase: + wrfsbase %rax +after_fred_fs: + /* Restore %gs and kgsbase */ + movw TF_GS(%rsp),%ax + .globl fred_lkgs +fred_lkgs: + lkgs %ax + testl $PCB_32BIT,PCB_FLAGS(%r8) + jnz after_fred_gs + movl PCB_GSBASE(%r8),%eax + movl PCB_GSBASE+4(%r8),%edx + movl $MSR_KGSBASE,%ecx + .globl fred_ld_kgsbase +fred_ld_kgsbase: + wrmsr +after_fred_gs: + .globl fred_ld_es +fred_ld_es: + movw TF_ES(%rsp),%es + .globl fred_ld_ds +fred_ld_ds: + movw TF_DS(%rsp),%ds +fred_u_regs: + RESTORE_REGS + addq $TF_ERR,%rsp + .globl fred_eretu +fred_eretu: + eretu + + .globl fred_ld_fs_fault +fred_ld_fs_fault: + movl $(TF_FRED_EVINFO2_TYPE_EXC | IDT_NP), TF_FRED_EVINFO2(%rsp) + movq %rsp,%rdi + call trap_fred_u + movw $KUF32SEL,TF_FS(%rsp) + jmp fred_checkast + + .globl fred_ld_fsbase_fault +fred_ld_fsbase_fault: + movl $(TF_FRED_EVINFO2_TYPE_EXC | IDT_NP), TF_FRED_EVINFO2(%rsp) + movq %rsp,%rdi + call trap_fred_u + movq PCPU(CURTHREAD),%r9 + movq TD_PCB(%r9),%r8 + movq $0,PCB_FSBASE(%r8) + jmp fred_checkast + + .globl fred_lkgs_fault +fred_lkgs_fault: + movl $(TF_FRED_EVINFO2_TYPE_EXC | IDT_NP), TF_FRED_EVINFO2(%rsp) + movq %rsp,%rdi + call trap_fred_u + movw $KUG32SEL,TF_GS(%rsp) + jmp fred_checkast + + .globl fred_ld_kgsbase_fault +fred_ld_kgsbase_fault: + movl $(TF_FRED_EVINFO2_TYPE_EXC | IDT_NP), TF_FRED_EVINFO2(%rsp) + movq %rsp,%rdi + call trap_fred_u + movq PCPU(CURTHREAD),%r9 + movq TD_PCB(%r9),%r8 + movq $0,PCB_GSBASE(%r8) + jmp fred_checkast + + .globl fred_ld_es_fault +fred_ld_es_fault: + movl $(TF_FRED_EVINFO2_TYPE_EXC | IDT_NP), TF_FRED_EVINFO2(%rsp) + movq %rsp,%rdi + call trap_fred_u + movw $KUDSEL,TF_ES(%rsp) + jmp fred_checkast + + .globl fred_ld_ds_fault +fred_ld_ds_fault: + movl $(TF_FRED_EVINFO2_TYPE_EXC | IDT_NP), TF_FRED_EVINFO2(%rsp) + movq %rsp,%rdi + call trap_fred_u + movw $KUDSEL,TF_DS(%rsp) + jmp fred_checkast + + .globl fred_eretu_fault +fred_eretu_fault: + subq $TF_ERR,%rsp + movq %rdi,TF_RDI(%rsp) + movq %rdx,TF_RDX(%rsp) + movq %rcx,TF_RCX(%rsp) + movq %rsi,TF_RSI(%rsp) + movq %r8,TF_R8(%rsp) + movq %r9,TF_R9(%rsp) + movq %rbx,TF_RBX(%rsp) + movq %rbp,TF_RBP(%rsp) + movq %r10,TF_R10(%rsp) + movq %r11,TF_R11(%rsp) + movq %r12,TF_R12(%rsp) + movq %r13,TF_R13(%rsp) + movq %r14,TF_R14(%rsp) + movq %r15,TF_R15(%rsp) + SAVE_SEGS + movl $(TF_FRED_EVINFO2_TYPE_EXC | IDT_GP), TF_FRED_EVINFO2(%rsp) + movq %rsp, %rdi + KMSAN_ENTER + call trap_fred_u + KMSAN_LEAVE + jmp fred_checkast + +/* + * Content for the FRED entries page. +*/ + + .p2align 12,0x90 + .globl fred_events_handlers, fred_events_handlers_end +fred_events_handlers: + subq $TF_ERR,%rsp + movq %rax,TF_RAX(%rsp) + movq %rdi,TF_RDI(%rsp) + movq %rsi,TF_RSI(%rsp) + movl TF_FRED_EVINFO2(%rsp),%edi + movl %edi,%eax + andl $TF_FRED_EVINFO2_TYPEMASK,%edi + cmpl $TF_FRED_EVINFO2_TYPE_SYSCALL,%edi + je user_fred_syscall + jmp user_fred_non_syscall + + . = fred_events_handlers + 256 + subq $TF_ERR,%rsp + movq %rax,TF_RAX(%rsp) + movq %rdi,TF_RDI(%rsp) + movq %rdx,TF_RDX(%rsp) + movq %rcx,TF_RCX(%rsp) + movq %rsi,TF_RSI(%rsp) + movq %r8,TF_R8(%rsp) + movq %r9,TF_R9(%rsp) + movq %rbx,TF_RBX(%rsp) + movq %rbp,TF_RBP(%rsp) + movq %r10,TF_R10(%rsp) + movq %r11,TF_R11(%rsp) + movq %r12,TF_R12(%rsp) + movq %r13,TF_R13(%rsp) + movq %r14,TF_R14(%rsp) + movq %r15,TF_R15(%rsp) + movq %rsp, %rdi + KMSAN_ENTER + call trap_fred_k + KMSAN_LEAVE + RESTORE_REGS + addq $TF_ERR,%rsp + erets +fred_events_handlers_end: + + .globl fred_out_of_nmi +fred_out_of_nmi: + pushq %rbp + movq %rsp,%rbp + xorl %eax,%eax + pushq $0 + pushq $0 + movw %ss,%ax + orl $(1<<18),%eax /* NMI block release for ERETS */ + pushq %rax + pushq %rbp + pushfq + xorl %eax,%eax + movw %cs,%ax + pushq %rax + pushq $1f + pushq $0 + erets +1: popq %rbp + retq + #ifdef HWPMC_HOOKS ENTRY(end_exceptions) #endif diff --git a/sys/amd64/amd64/genassym.c b/sys/amd64/amd64/genassym.c index 875c536166d1..9a5a74b3f6d6 100644 --- a/sys/amd64/amd64/genassym.c +++ b/sys/amd64/amd64/genassym.c @@ -146,6 +146,12 @@ ASSYM(PCB_STAR, offsetof(struct pcb, pcb_star)); ASSYM(PCB_LSTAR, offsetof(struct pcb, pcb_lstar)); ASSYM(PCB_CSTAR, offsetof(struct pcb, pcb_cstar)); ASSYM(PCB_SFMASK, offsetof(struct pcb, pcb_sfmask)); +ASSYM(PCB_FRED_RSP0, offsetof(struct pcb, pcb_fred_rsp0)); +ASSYM(PCB_FRED_RSP1, offsetof(struct pcb, pcb_fred_rsp1)); +ASSYM(PCB_FRED_RSP2, offsetof(struct pcb, pcb_fred_rsp2)); +ASSYM(PCB_FRED_RSP3, offsetof(struct pcb, pcb_fred_rsp3)); +ASSYM(PCB_FRED_STKLVLS, offsetof(struct pcb, pcb_fred_stklvls)); +ASSYM(PCB_FRED_CONFIG, offsetof(struct pcb, pcb_fred_config)); ASSYM(PCB_SIZE, sizeof(struct pcb)); ASSYM(PCB_FULL_IRET, PCB_FULL_IRET); ASSYM(PCB_DBREGS, PCB_DBREGS); @@ -180,9 +186,15 @@ ASSYM(TF_DS, offsetof(struct trapframe, tf_ds)); ASSYM(TF_ES, offsetof(struct trapframe, tf_es)); ASSYM(TF_FS, offsetof(struct trapframe, tf_fs)); ASSYM(TF_GS, offsetof(struct trapframe, tf_gs)); +ASSYM(TF_FRED_EVINFO2, offsetof(struct trapframe, tf_fred_evinfo2)); ASSYM(TF_FLAGS, offsetof(struct trapframe, tf_flags)); ASSYM(TF_SIZE, sizeof(struct trapframe)); ASSYM(TF_HASSEGS, TF_HASSEGS); +ASSYM(TF_FRED_EVINFO2_TYPE_EXC, TF_FRED_EVINFO2_TYPE_EXC); +ASSYM(TF_FRED_EVINFO2_TYPE_SYSCALL, TF_FRED_EVINFO2_TYPE_SYSCALL); +ASSYM(TF_FRED_EVINFO2_TYPEMASK, TF_FRED_EVINFO2_TYPEMASK); +ASSYM(TF_FRED_EVINFO2_INSTLENMASK, TF_FRED_EVINFO2_INSTLENMASK); +ASSYM(TF_FRED_EVINFO2_INSTLENSHIFT, TF_FRED_EVINFO2_INSTLENSHIFT); ASSYM(PTI_RDX, offsetof(struct pti_frame, pti_rdx)); ASSYM(PTI_RAX, offsetof(struct pti_frame, pti_rax)); @@ -272,6 +284,9 @@ ASSYM(TSSSEL, GSEL(GPROC0_SEL, SEL_KPL)); ASSYM(LDTSEL, GSEL(GUSERLDT_SEL, SEL_KPL)); ASSYM(SEL_RPL_MASK, SEL_RPL_MASK); +ASSYM(IDT_NP, IDT_NP); +ASSYM(IDT_GP, IDT_GP); + ASSYM(__FreeBSD_version, __FreeBSD_version); #ifdef HWPMC_HOOKS diff --git a/sys/amd64/amd64/initcpu.c b/sys/amd64/amd64/initcpu.c index 7161cf631508..5b615be4b8dc 100644 --- a/sys/amd64/amd64/initcpu.c +++ b/sys/amd64/amd64/initcpu.c @@ -397,3 +397,46 @@ initializecpucache(void) cpu_stdext_feature &= ~CPUID_STDEXT_CLFLUSHOPT; } } + +extern const char fred_events_handlers[], fred_events_handlers_end[]; + +void +amd64_cpu_init_fred(void) +{ + MPASS((((uintptr_t)fred_events_handlers) & PAGE_MASK) == 0); + /* + * 128b = 0x2 * 64b redzone + * SLC 0 for EXTINT + * SLC 0 current + */ + wrmsr(MSR_FRED_CONFIG, (uintptr_t)fred_events_handlers | + (0x2 << IA32_FRED_CONFIG_REDZONESZ_SHIFT) | + (0 << IA32_FRED_CONFIG_EXTINT_SLC_SHIFT) | 0); + + /* + * With FRED, there is no need for workarounds requiring + * dedicated stack for #DB. Also, there is no need to have + * separate stacks for #NM and #MC, because CSL rules ensure + * that interrupted frame is safe even if NMI was interrupted + * by machine check or vice versa. + * + * Still, we need to provide a stack for events that can occur + * with the interrupts disabled, to avoid caring about the + * ordering of the context update in cpu_switch.S. Use CSL 1 + * for #NM and #MC. + * + * Since double fault handler is used to handle stack + * overflow, it gets the dedicated stack, of the highest used + * CSL 2. + * + * CSL 3 is unused, and we have some space to re-arrange this + * if a need in the future appears. + */ + wrmsr(MSR_FRED_STKLVLS, (1ul << (IDT_NM * 2)) | + (1ul << (IDT_MC * 2)) | (2ul << (IDT_DF * 2))); + wrmsr(MSR_FRED_RSP3, 0); + load_cr4(rcr4() | CR4_FRED); + if (IS_BSP() && bootverbose) + printf("FRED enabled\n"); + +} diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index ab9edfe2c68f..c6a77c5ef852 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -206,10 +206,14 @@ long realmem = 0; int late_console = 1; int lass_enabled = 0; +int __read_frequently fred = 0; +SYSCTL_INT(_hw, OID_AUTO, fred, CTLFLAG_RDTUN | CTLFLAG_NOFETCH, + &fred, 0, + "FRED is used"); + struct kva_md_info kmi; struct region_descriptor r_idt; - struct pcpu *__pcpu; struct pcpu temp_bsp_pcpu; @@ -347,9 +351,9 @@ cpu_setregs(void) static struct gate_descriptor idt0[NIDT]; struct gate_descriptor *idt = &idt0[0]; /* interrupt descriptor table */ -static char dblfault_stack[DBLFAULT_STACK_SIZE] __aligned(16); +static char dblfault_stack[DBLFAULT_STACK_SIZE] __aligned(64); static char mce0_stack[MCE_STACK_SIZE] __aligned(16); -static char nmi0_stack[NMI_STACK_SIZE] __aligned(16); +static char nmi0_stack[NMI_STACK_SIZE] __aligned(64); static char dbg0_stack[DBG_STACK_SIZE] __aligned(16); CTASSERT(sizeof(struct nmi_pcpu) == 16); @@ -485,6 +489,9 @@ setidt(int idx, inthand_t *func, int typ, int dpl, int ist) { struct gate_descriptor *ip; + if (fred) + return; + ip = idt + idx; ip->gd_looffset = (uintptr_t)func; ip->gd_selector = GSEL(GCODE_SEL, SEL_KPL); @@ -1186,9 +1193,11 @@ amd64_conf_fast_syscall(void) msr = rdmsr(MSR_EFER) | EFER_SCE; wrmsr(MSR_EFER, msr); - wrmsr(MSR_LSTAR, pti ? (u_int64_t)IDTVEC(fast_syscall_pti) : - (u_int64_t)IDTVEC(fast_syscall)); - wrmsr(MSR_CSTAR, (u_int64_t)IDTVEC(fast_syscall32)); + if (!fred) { + wrmsr(MSR_LSTAR, pti ? (u_int64_t)IDTVEC(fast_syscall_pti) : + (u_int64_t)IDTVEC(fast_syscall)); + wrmsr(MSR_CSTAR, (u_int64_t)IDTVEC(fast_syscall32)); + } msr = ((u_int64_t)GSEL(GCODE_SEL, SEL_KPL) << 32) | ((u_int64_t)GSEL(GUCODE32_SEL, SEL_UPL) << 48); wrmsr(MSR_STAR, msr); @@ -1230,33 +1239,49 @@ amd64_bsp_ist_init(struct pcpu *pc) tssp = &pc->pc_common_tss; - /* doublefault stack space, runs on ist1 */ - np = ((struct nmi_pcpu *)&dblfault_stack[sizeof(dblfault_stack)]) - 1; - np->np_pcpu = (register_t)pc; - tssp->tss_ist1 = (long)np; + /* Doublefault stack space, runs on ist1 for IDT. */ + if (fred) { + wrmsr(MSR_FRED_RSP2, (uint64_t)&dblfault_stack[ + sizeof(dblfault_stack)]); + } else { + np = ((struct nmi_pcpu *)&dblfault_stack[sizeof( + dblfault_stack)]) - 1; + np->np_pcpu = (register_t)pc; + tssp->tss_ist1 = (long)np; + } /* - * NMI stack, runs on ist2. The pcpu pointer is stored just - * above the start of the ist2 stack. + * NMI stack. */ - np = ((struct nmi_pcpu *)&nmi0_stack[sizeof(nmi0_stack)]) - 1; - np->np_pcpu = (register_t)pc; - tssp->tss_ist2 = (long)np; + if (fred) { + wrmsr(MSR_FRED_RSP1, (uint64_t)&nmi0_stack[ + sizeof(nmi0_stack)]); + } else { + /* + * Runs on ist2 for IDT. The pcpu pointer is stored + * just above the start of the ist2 stack. + */ + np = ((struct nmi_pcpu *)&nmi0_stack[sizeof(nmi0_stack)]) - 1; + np->np_pcpu = (register_t)pc; + tssp->tss_ist2 = (long)np; + } - /* - * MC# stack, runs on ist3. The pcpu pointer is stored just - * above the start of the ist3 stack. - */ - np = ((struct nmi_pcpu *)&mce0_stack[sizeof(mce0_stack)]) - 1; - np->np_pcpu = (register_t)pc; - tssp->tss_ist3 = (long)np; + if (!fred) { + /* + * MC# stack for IDT, runs on ist3. The pcpu pointer + * is stored just above the start of the ist3 stack. + */ + np = ((struct nmi_pcpu *)&mce0_stack[sizeof(mce0_stack)]) - 1; + np->np_pcpu = (register_t)pc; + tssp->tss_ist3 = (long)np; - /* - * DB# stack, runs on ist4. - */ - np = ((struct nmi_pcpu *)&dbg0_stack[sizeof(dbg0_stack)]) - 1; - np->np_pcpu = (register_t)pc; - tssp->tss_ist4 = (long)np; + /* + * DB# stack for IDT, runs on ist4. + */ + np = ((struct nmi_pcpu *)&dbg0_stack[sizeof(dbg0_stack)]) - 1; + np->np_pcpu = (register_t)pc; + tssp->tss_ist4 = (long)np; + } } /* @@ -1359,6 +1384,13 @@ hammer_time(u_int64_t modulep, u_int64_t physfree) TUNABLE_INT_FETCH("hw.use_xsave", &use_xsave); } + if ((cpu_stdext_feature4 & (CPUID_STDEXT4_FRED | CPUID_STDEXT4_LKGS)) == + (CPUID_STDEXT4_FRED | CPUID_STDEXT4_LKGS) && + (cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0 && !pti) { + fred = 1; + TUNABLE_INT_FETCH("hw.fred", &fred); + } + sched_instance_select(); link_elf_ireloc(); @@ -1473,9 +1505,11 @@ hammer_time(u_int64_t modulep, u_int64_t physfree) setidt(IDT_EVTCHN, pti ? &IDTVEC(xen_intr_upcall_pti) : &IDTVEC(xen_intr_upcall), SDT_SYSIGT, SEL_KPL, 0); #endif - r_idt.rd_limit = sizeof(idt0) - 1; - r_idt.rd_base = (long) idt; - lidt(&r_idt); + if (!fred) { + r_idt.rd_limit = sizeof(idt0) - 1; + r_idt.rd_base = (long) idt; + lidt(&r_idt); + } TUNABLE_INT_FETCH("hw.ibrs_disable", &hw_ibrs_disable); TUNABLE_INT_FETCH("machdep.mitigations.ibrs.disable", &hw_ibrs_disable); @@ -1564,6 +1598,9 @@ hammer_time(u_int64_t modulep, u_int64_t physfree) if (getenv_is_true("debug.dump_modinfo_at_boot")) preload_dump(); + if (fred) + amd64_cpu_init_fred(); + #ifdef DEV_ISA #ifdef DEV_ATPIC elcr_probe(); @@ -1828,6 +1865,11 @@ clear_pcb_flags(struct pcb *pcb, const u_int flags) extern const char wrmsr_early_safe_gp_handler[]; +/* + * What about FRED? wrmsr_early_safe_start() is used before we + * switched CPU to the FRED mode. We use IDT to catch #GP from MSR + * write even if BSP is switched to the FRED mode later. + */ void wrmsr_early_safe_start(void) { diff --git a/sys/amd64/amd64/mp_machdep.c b/sys/amd64/amd64/mp_machdep.c index 69490b8e275f..81a24a4f4df5 100644 --- a/sys/amd64/amd64/mp_machdep.c +++ b/sys/amd64/amd64/mp_machdep.c @@ -240,25 +240,51 @@ init_secondary(void) IOPERM_BITMAP_SIZE; pc->pc_common_tss.tss_rsp0 = 0; - /* The doublefault stack runs on IST1. */ - np = ((struct nmi_pcpu *)&doublefault_stack[DBLFAULT_STACK_SIZE]) - 1; - np->np_pcpu = (register_t)pc; - pc->pc_common_tss.tss_ist1 = (long)np; - - /* The NMI stack runs on IST2. */ - np = ((struct nmi_pcpu *)&nmi_stack[NMI_STACK_SIZE]) - 1; - np->np_pcpu = (register_t)pc; - pc->pc_common_tss.tss_ist2 = (long)np; - - /* The MC# stack runs on IST3. */ - np = ((struct nmi_pcpu *)&mce_stack[MCE_STACK_SIZE]) - 1; - np->np_pcpu = (register_t)pc; - pc->pc_common_tss.tss_ist3 = (long)np; - - /* The DB# stack runs on IST4. */ - np = ((struct nmi_pcpu *)&dbg_stack[DBG_STACK_SIZE]) - 1; - np->np_pcpu = (register_t)pc; - pc->pc_common_tss.tss_ist4 = (long)np; + /* + * The doublefault stack. + * Runs on IST1 for IDT. + * Uses CSL 2 for FRED. + */ + if (fred) { + wrmsr(MSR_FRED_RSP2, (uint64_t)&doublefault_stack[ + DBLFAULT_STACK_SIZE]); + } else { + np = ((struct nmi_pcpu *)&doublefault_stack[ + DBLFAULT_STACK_SIZE]) - 1; + np->np_pcpu = (register_t)pc; + pc->pc_common_tss.tss_ist1 = (long)np; + } + + /* + * The NMI stack. + * Runs on IST2 for IDT. + * Uses CSL 1 for FRED. + */ + if (fred) { + wrmsr(MSR_FRED_RSP1, (uint64_t)&nmi_stack[NMI_STACK_SIZE]); + } else { + np = ((struct nmi_pcpu *)&nmi_stack[NMI_STACK_SIZE]) - 1; + np->np_pcpu = (register_t)pc; + pc->pc_common_tss.tss_ist2 = (long)np; + } + + /* + * The MC# stack. + * Runs on IST3 for IDT. + * Shares CSL 1 with NMI for FRED. + */ + if (!fred) { + np = ((struct nmi_pcpu *)&mce_stack[MCE_STACK_SIZE]) - 1; + np->np_pcpu = (register_t)pc; + pc->pc_common_tss.tss_ist3 = (long)np; + } + + if (!fred) { + /* The DB# stack, used for for IDT, runs on IST4. */ + np = ((struct nmi_pcpu *)&dbg_stack[DBG_STACK_SIZE]) - 1; + np->np_pcpu = (register_t)pc; + pc->pc_common_tss.tss_ist4 = (long)np; + } /* Prepare private GDT */ gdt_segs[GPROC0_SEL].ssd_base = (long)&pc->pc_common_tss; @@ -278,7 +304,10 @@ init_secondary(void) wrmsr(MSR_KGSBASE, 0); /* User value */ fix_cpuid(); - lidt(&r_idt); + if (fred) + amd64_cpu_init_fred(); + else + lidt(&r_idt); gsel_tss = GSEL(GPROC0_SEL, SEL_KPL); ltr(gsel_tss); @@ -430,12 +459,17 @@ start_all_aps(void) M_WAITOK | M_ZERO); doublefault_stack = kmem_malloc(DBLFAULT_STACK_SIZE, M_WAITOK | M_ZERO); - mce_stack = kmem_malloc(MCE_STACK_SIZE, - M_WAITOK | M_ZERO); + if (!fred) { + mce_stack = kmem_malloc(MCE_STACK_SIZE, + M_WAITOK | M_ZERO); + } nmi_stack = kmem_malloc_domainset( DOMAINSET_PREF(domain), NMI_STACK_SIZE, M_WAITOK | M_ZERO); - dbg_stack = kmem_malloc_domainset( - DOMAINSET_PREF(domain), DBG_STACK_SIZE, M_WAITOK | M_ZERO); + if (!fred) { + dbg_stack = kmem_malloc_domainset( + DOMAINSET_PREF(domain), DBG_STACK_SIZE, + M_WAITOK | M_ZERO); + } dpcpu = kmem_malloc_domainset(DOMAINSET_PREF(domain), DPCPU_SIZE, M_WAITOK | M_ZERO); diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c index df9cc44bcbb2..815d356217f9 100644 --- a/sys/amd64/amd64/trap.c +++ b/sys/amd64/amd64/trap.c @@ -41,6 +41,7 @@ * AMD64 Trap and System call handling */ +#include "opt_atpic.h" #include "opt_clock.h" #include "opt_cpu.h" #include "opt_hwpmc_hooks.h" @@ -61,6 +62,7 @@ #include #include #include +#include #include #include #include @@ -83,6 +85,8 @@ PMC_SOFT_DEFINE( , , page_fault, write); #include #include +#include +#include #include #include #include @@ -90,6 +94,7 @@ PMC_SOFT_DEFINE( , , page_fault, write); #include #include #include +#include #ifdef KDTRACE_HOOKS #include @@ -995,6 +1000,14 @@ trap_diag(struct trapframe *frame, vm_offset_t eva, const char *type_str) frame->tf_r11, frame->tf_r12); printf("r13: %016lx r14: %016lx r15: %016lx\n", frame->tf_r13, frame->tf_r14, frame->tf_r15); + if (fred) { + struct trapframe_fred *f; + + f = __containerof(frame, struct trapframe_fred, tf_idt); + printf("evdata %016lx evinfo1 %04x evinfo2 %08x\n", + f->tf_fred_evdata, frame->tf_fred_evinfo1, + frame->tf_fred_evinfo2); + } } static void @@ -1069,6 +1082,14 @@ dblfault_handler(struct trapframe *frame) frame->tf_cs, frame->tf_ss, frame->tf_ds, frame->tf_es, frame->tf_fs, frame->tf_gs, rdmsr(MSR_FSBASE), rdmsr(MSR_GSBASE), rdmsr(MSR_KGSBASE)); + if (fred) { + struct trapframe_fred *f; + + f = __containerof(frame, struct trapframe_fred, tf_idt); + printf("evdata %016lx evinfo1 %04x evinfo2 %08x\n", + f->tf_fred_evdata, frame->tf_fred_evinfo1, + frame->tf_fred_evinfo2); + } /* Print these separately in case pcpu accesses trap. */ printf("cpuid = %d; apic id = %02x\n", PCPU_GET(cpuid), PCPU_GET(apic_id)); @@ -1295,3 +1316,540 @@ amd64_syscall(struct thread *td, int traced) amd64_syscall_ret_flush_l1d_check_inline(td->td_errno); } + +static void +trap_fred_extint(struct trapframe_fred *frame, u_int vec) +{ + switch (vec) { + case IPI_RENDEZVOUS: +#ifdef COUNT_IPIS + ipi_rendezvous_counts[PCPU_GET(cpuid)]++; +#endif + smp_rendezvous_action(); + lapic_eoi(); + break; + case IPI_INVLOP: + invlop_handler(); + lapic_eoi(); + break; + case IPI_BITMAP_VECTOR: + lapic_eoi(); + ipi_bitmap_handler(&frame->tf_idt); + break; + case IPI_STOP: + lapic_eoi(); + cpustop_handler(); + break; + case IPI_SUSPEND: + cpususpend_handler(); + lapic_eoi(); + break; + case IPI_SWI: + lapic_eoi(); + ipi_swi_handler(&frame->tf_idt); + break; + case IPI_OFF: + cpuoff_handler(); + lapic_eoi(); + break; + case APIC_SPURIOUS_INT: + break; + case APIC_TIMER_INT: + lapic_handle_timer(&frame->tf_idt); + break; + case APIC_CMC_INT: + lapic_handle_cmc(); + break; + case APIC_ERROR_INT: + lapic_handle_error(); + break; + case APIC_THERMAL_INT: + lapic_handle_thermal(); + break; +#ifdef XENHVM + case IDT_EVTCHN: + xen_arch_intr_handle_upcall(&frame->tf_idt); + break; +#endif + default: + if (vec >= IPI_DYN_FIRST && vec <= IPI_DYN_LAST) { + void (*fi)(struct trapframe *); + + fi = fred_ipi_handlers[vec - IPI_DYN_FIRST]; + if (fi != NULL) { *** 749 LINES SKIPPED *** From nobody Mon Jul 20 21:53:58 2026 X-Original-To: dev-commits-src-main@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 4h3vRV4VHzz6dVWL for ; Mon, 20 Jul 2026 21:53:58 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3vRV3V8dz3GnN for ; Mon, 20 Jul 2026 21:53:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784584438; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=su1yS6FHgMlZX4Z20g4DVGcVQO2/kAMKvaSOq6zws3E=; b=GqXb4fqATDM1NimV/p5kfd+tJZtBg/fQsiAb3IvAHUgJl2cTXfBJsiD8R6r9/K2HLEuW/E BWzKsVshMGaWhOX0fFYAj/GEeJaHVV2nyoj7YXmpuv3CcVMRya3f/kQo6PmKKam5djtzUT LLHa3L6IOp5klwAw4u5CDga1/vOONXXBWtxqsz26PeMdXP4dkg1ERMVKrwPHGnClS0Pc1/ kRl6P6vcb/NKm8vgOxl9133cAFxvRwvdtqLM1VQgwQftHNq1CMIZFM708Mfz1oYfGgKWZU EuzPz97ttcsdpjInAvu96Z9lH9aDZRCyh3Kz3AdjtdaA5XU/MxbuAKX4TSGc1g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784584438; a=rsa-sha256; cv=none; b=UxrGHyTr0JCP/Ue9Y+NcXEwc7CplE+rGoc3XirXtVuPIK/unYWOHMBDKhBm17NigTM9drU 3ZEiVZZxFRARfjUpNuS69z080UzIsTtPWVZWY9955AMI8QrcdorSRSOeXbNNkCr0LPltJO OtEjpvbAwdK6VY3y2fJ4bYiQ9SZMwK2oTkpjKAU7oJGIkTeSxSCd1aT27bzrMFFHA4aJPP 14nbTjdjDbk26nwXPBjma9wNat5Z5LADr2oSMdiIXYC/6Jrxt0MZBL/9xtdq1elMJSxEq7 77YTKlpG/E76QHgNj1UnZqamrF6M7TVfU6J3mY2qGIwZQ1A2wmK5VlAUOS0cpw== 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=1784584438; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=su1yS6FHgMlZX4Z20g4DVGcVQO2/kAMKvaSOq6zws3E=; b=fFWn5D4wSlk/xWv0anpk3uk3Y9TEnQvoivRSrb7Hdn/uBwpeg0mt1pV0GqLNzkihhVHJ5w JHBXFA+yaZFdB7zqSfw9aDBTvA+GdmcjgY5J/6G2PTxXlxdBOZ47ZisLt4jJoq3s2XA+nY U/zcEm8aK3fZUc7QmWlHDoeM2GJFNsiXBkFIaM83xsam/Gw5n54xwzoVxnh3Zr++52D8tY Z/7qXSi1x+YLW1nbvJrIEGiM3/l09KPUa/dNiQPjwP1V3LuPoMekolUAXQ4EEzJohIsS3K 7iDcJONPVa/MaWdzqUrM31PdcKDnwfwo54Q9DNOHR+9mgjnAVQN5vcDkpk9XGg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3vRV2Tq0z4sm for ; Mon, 20 Jul 2026 21:53:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 23b55 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 21:53:58 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Artem Bunichev From: Alexander Ziaee Subject: git: 6ee5895f88ed - main - sh.1: Document which features are non-POSIX List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: ziaee X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6ee5895f88ed7ba6b16aae9ad5833df6df6864bc Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 21:53:58 +0000 Message-Id: <6a5e98f6.23b55.709aa08b@gitrepo.freebsd.org> The branch main has been updated by ziaee: URL: https://cgit.FreeBSD.org/src/commit/?id=6ee5895f88ed7ba6b16aae9ad5833df6df6864bc commit 6ee5895f88ed7ba6b16aae9ad5833df6df6864bc Author: Artem Bunichev AuthorDate: 2026-07-20 21:50:57 +0000 Commit: Alexander Ziaee CommitDate: 2026-07-20 21:53:53 +0000 sh.1: Document which features are non-POSIX Point out which features are non-POSIX and thus can not be safely assumed to be portable and exist in other implementations. Relnotes: YES! Reviewed by: ziaee, jilles Differential Revision: https://reviews.freebsd.org/D55333 --- bin/sh/sh.1 | 79 ++++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 63 insertions(+), 16 deletions(-) diff --git a/bin/sh/sh.1 b/bin/sh/sh.1 index a19aa7459896..927ed666b440 100644 --- a/bin/sh/sh.1 +++ b/bin/sh/sh.1 @@ -41,7 +41,7 @@ .\" the referee document. The original Standard can be obtained online at .\" http://www.opengroup.org/unix/online.html. .\" -.Dd June 16, 2026 +.Dd July 19, 2026 .Dt SH 1 .Os .Sh NAME @@ -77,9 +77,7 @@ The current version of is close to the .St -p1003.1 specification for the shell. -It only supports features -designated by POSIX, -plus a few Berkeley extensions. +Any extensions which are non-POSIX are marked below. This man page is not intended to be a tutorial nor a complete specification of the shell. .Ss Overview @@ -228,6 +226,7 @@ command line editor (disables the .Fl V option if it has been set; set automatically when interactive on terminals). +Non-POSIX option. See .Sx Command Line Editing . .It Fl e Li errexit @@ -261,8 +260,12 @@ A do-nothing option for POSIX compliance. Ignore .Dv EOF Ap s from input when in interactive mode. +The short name +.Fl I +is non-POSIX. .It Fl i Li interactive Force the shell to behave interactively. +Non-POSIX option. .It Fl l Force the shell to act as if it has been invoked as a login shell. .It Fl m Li monitor @@ -272,6 +275,7 @@ Set automatically when interactive. In a non-interactive shell, this option can be set even if no terminal is available and is useful to place processes in separate process groups. +This option is specified by POSIX, but in practice is not entirely portable. .It Fl n Li noexec If not interactive, read commands but do not execute them. @@ -288,6 +292,7 @@ commands from to .Fl P (physical directory layout). +Non-POSIX option. .It Fl p Li privileged Turn on privileged mode. This mode is enabled on startup @@ -304,6 +309,7 @@ after is sourced, and the contents of the .Ev ENV variable are ignored. +This option is non-POSIX. .It Fl s Li stdin Read commands from standard input (set automatically if no file arguments are present). @@ -312,13 +318,16 @@ no effect when set after the shell has already started running (i.e., when set with the .Ic set command). +The short name +.Fl s +is non-POSIX. .It Fl T Li trapsasync When waiting for a child, execute traps immediately. If this option is not set, traps are executed after the child exits, as specified in .St -p1003.2 . -This nonstandard option is useful for putting guarding shells around +This non-POSIX option is useful for putting guarding shells around children that block signals. The surrounding shell may kill the child or it may just return control to the tty and leave the child alone, @@ -339,6 +348,9 @@ Enable the built-in command line editor (disables .Fl E if it has been set). +The short name +.Fl V +is non-POSIX. See .Sx Command Line Editing . .It Fl v Li verbose @@ -367,10 +379,15 @@ if a command such as in the pipeline terminates with status 0 without reading its input completely. This option only has a long name. +.Li pipefail +is specified by +.St -p1003.1-2024 , +but still is not entirely portable. .It Li verify Set .Dv O_VERIFY when sourcing files or loading profiles. +Non-POSIX option. .\" See also .\" .Xr mac_veriexec 4 . TODO Does not exist; write it. .El @@ -516,6 +533,9 @@ that byte and the rest of the string until the matching single-quote are ignored. .Pp Any other string starting with a backslash is an error. +.Pp +Dollar-single quotes are specified by POSIX, but in practice are not +entirely portable. .It Double Quotes Enclosing characters within double quotes preserves the literal meaning of all characters except dollar sign @@ -1085,6 +1105,8 @@ continuing until a list terminated with or the end of the .Ic case command. +.Ic case +fallthrough is specified by POSIX, but in practice is not entirely portable. .Ss Grouping Commands Together Commands may be grouped by writing either .Sm off @@ -1173,7 +1195,7 @@ In the latter case, the function will be executed in a subshell when invoked. .Pp Variables may be declared to be local to a function by -using the +using the non-POSIX .Ic local command: .Pp @@ -1449,7 +1471,7 @@ The primary prompt string, which defaults to unless you are the superuser, in which case it defaults to .Dq Li "# " . .Va PS1 -may include any of the following formatting sequences, +may include any of the following non-POSIX formatting sequences, which are replaced by the given information: .Bl -tag -width indent .It Li \eD{format} @@ -1590,7 +1612,7 @@ If the variants with or .Ql ?\& occur within a double-quoted string, -as an extension there may be unquoted parts +as a non-POSIX extension there may be unquoted parts (via double-quotes inside the expansion); .Ql } within such parts are also not examined in determining the matching @@ -1953,7 +1975,7 @@ The character class may be complemented by making an exclamation point the first character of the character class. A caret .Pq Ql ^ -has the same effect but is non-standard. +has the same effect but is non-POSIX. .Pp To include a .Ql \&] @@ -2079,6 +2101,8 @@ List or alter key bindings for the line editor, .Xr editline 7 . This command is documented in .Xr editrc 5 . +The behavior of this command depends on the library that is used +to read user input, and thus can not be assumed to be standard. .It Ic break Op Ar num See the .Sx Flow-Control Constructs @@ -2088,6 +2112,7 @@ Execute the specified built-in command, .Ar cmd . This is useful when the user wishes to override a shell function with the same name as a built-in command. +This command is non-POSIX. .It Ic cd Oo Fl L | P Oc Oo Fl e Oc Op Ar directory .It Ic cd Fl Switch to the specified @@ -2155,6 +2180,7 @@ to return exit status 1 if the full pathname of the new directory cannot be determined reliably or at all. Normally this is not considered an error, although a warning is printed. +This option is specified by POSIX, but in practice is not entirely portable. .Pp If changing the directory fails, the exit status is greater than 1. If the directory is changed, the exit status is 0, or also 1 if @@ -2222,6 +2248,7 @@ and append a newline character. .Bl -tag -width indent .It Fl n Suppress the output of the trailing newline. +Non-POSIX option. .It Fl e Process C-style backslash escape sequences. The @@ -2271,6 +2298,7 @@ a\eb $ echo -e a\e\e\e\eb a\eb .Ed +Non-POSIX option. .El .Pp Only one of the @@ -2322,6 +2350,7 @@ With no arguments the .Ic export command lists the names of all exported variables. +Behavior with no arguments is not specified by POSIX. If the .Fl p option is specified, the exported variables are printed as @@ -2505,7 +2534,7 @@ With arguments, the command removes each specified .Ar command from the hash table (unless they are functions) and then locates it. -With the +With the non-POSIX .Fl v option, .Ic hash @@ -2524,6 +2553,7 @@ argument is omitted, use the current job. See .Sx Job Control for a list of job ID forms. +This command is non-POSIX. .It Ic jobs Oo Fl lps Oc Op Ar job ... Print information about the specified jobs, or all jobs if no .Ar job @@ -2632,7 +2662,7 @@ If the option is specified, only the process IDs for the process group leaders are printed, one per line. .Pp -If the +If the non-POSIX .Fl s option is specified, only the PIDs of the job commands are printed, one per line. @@ -2677,7 +2707,7 @@ This is the default. .Fl t Ar timeout Oc Oo Fl er Oc Ar variable ... The .Ar prompt -is printed if the +is printed if the non-POSIX .Fl p option is specified and the standard input is a terminal. @@ -2710,7 +2740,7 @@ character will be treated as though it were not in .Va IFS , even if it is. .Pp -If the +If the non-POSIX .Fl t option is specified and the .Ar timeout @@ -2736,7 +2766,7 @@ they are added up, e.g.\& .Ql 1h30m15s which adds up to 5,415 seconds. .Pp -The +The non-POSIX .Fl e option exists only for backward compatibility with older scripts. .Pp @@ -2758,6 +2788,7 @@ by using the following form: With no arguments the .Ic readonly command lists the names of all read only variables. +Behavior with no arguments is not specified by POSIX. If the .Fl p option is specified, the read-only variables are printed as @@ -2817,7 +2848,7 @@ The .Ic setvar command is intended to be used in functions that assign values to variables whose names are passed as parameters. -In general it is better to write +This command is non-POSIX, and in general it is better to write .Dq Ar variable Ns = Ns Ar value rather than using .Ic setvar . @@ -2879,7 +2910,7 @@ command has no effect on signals that were ignored on entry to the shell. .Pp Option .Fl l -causes the +is non-POSIX and causes the .Ic trap command to display a list of valid signal names. .It Ic true @@ -2920,6 +2951,11 @@ or can be given. The default is to display the soft limits, and to set both the hard and the soft limits. +Both +.Fl H +and +.Fl S +are specified by POSIX, but in practice are not entirely portable. .Pp Option .Fl a @@ -2929,6 +2965,7 @@ command to display all resources. The parameter .Ar limit is not acceptable in this mode. +This option is specified by POSIX, but in practice is not entirely portable. .Pp The remaining options specify which resource value is to be displayed or modified. @@ -2936,6 +2973,7 @@ They are mutually exclusive. .Bl -tag -width indent .It Fl b Ar sbsize The maximum size of socket buffer usage, in bytes. +Non-POSIX option. .It Fl c Ar coredumpsize The maximal size of core dump files, in 512-byte blocks. Setting @@ -2943,6 +2981,7 @@ Setting to 0 prevents core dump files from being created. .It Fl d Ar datasize The maximal size of the data segment of a process, in kilobytes. +This option is specified by POSIX, but in practice is not entirely portable. .It Fl f Ar filesize The maximal size of a file, in 512-byte blocks. .It Fl k Ar kqueues @@ -2950,31 +2989,39 @@ The maximal number of kqueues (see .Xr kqueue 2 ) for this user ID. +Non-POSIX option. .It Fl l Ar lockedmem The maximal size of memory that can be locked by a process, in kilobytes. +Non-POSIX option. .It Fl m Ar memoryuse The maximal resident set size of a process, in kilobytes. +Non-POSIX option. .It Fl n Ar nofiles The maximal number of descriptors that could be opened by a process. +This option is specified by POSIX, but in practice is not entirely portable. .It Fl o Ar umtxp The maximal number of process-shared locks (see .Xr pthread 3 ) for this user ID. +Non-POSIX option. .It Fl p Ar pseudoterminals The maximal number of pseudo-terminals for this user ID. +Non-POSIX option. .It Fl s Ar stacksize The maximal size of the stack segment, in kilobytes. .It Fl t Ar time The maximal amount of CPU time to be used by each process, in seconds. .It Fl u Ar userproc The maximal number of simultaneous processes for this user ID. +Non-POSIX option. .It Fl v Ar virtualmem The maximal virtual size of a process, in kilobytes. .It Fl w Ar swapuse The maximum amount of swap space reserved or used for this user ID, in kilobytes. +Non-POSIX option. .El .It Ic umask Oo Fl S Oc Op Ar mask Set the file creation mask (see From nobody Mon Jul 20 21:55:46 2026 X-Original-To: dev-commits-src-main@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 4h3vTg3vsqz6dVmQ for ; Mon, 20 Jul 2026 21:55:51 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3vTg3Q5yz3HJP for ; Mon, 20 Jul 2026 21:55:51 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784584551; 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=wnOD3rtuWowCPGp/IBgSoYUU5xCm0BtcIGve7ZrOu1Q=; b=UnkaEE4bGQFo6JNGb4IJQUUHNDzWRrP1M1ZEFxSNueK5s1HIXGTFIfMdzFmPh4qAUmImHm KYDIvQ4S2zFV9/2esNOIq+zbHuDmNMesrCe+h1FTzgj7gfpXaitEx8sUC21XnZslY0Mijw 5pZkI6eeUuH3laINsNgWaorZPgd8FF8gcyi++1Qs5GB5DKXFGnk1BXIJHPjntRlZOWVfOn e6hrcXEiR2XibGWGtbs/0FkOi9g9pmm1ET7/q3hFUtrfRXywUPrp0k/H37gcdrvLsCI49k usuGtjMcHtdRq2jNsRhB4HShZAIrSHe7rGurSpys3I8FVDV/uLBJh3qrFBhSoQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784584551; a=rsa-sha256; cv=none; b=B2jopkQwCTQkFb9LSSfZmgsVZCOeT2d9y1BP5FGxmLk0WJnV7h/KsxAK9I5Xkki2zUangH gfiuNi8N9KFeceSU0+KpmFPXle+C8HlKNPSuMus/gtxjDos3c8pb8bCo9HP7ZfACTt1+67 GFuBN0+GxAfu5qvIa98esCnYrpI1ElPjxiZC7wgRSHTDRRpnC8Q+ARuLdRiQpKx8jEJbg9 uBW0170oGJxgZ71X3bAqRPnWyA6bBpCgLtVpbiSY6KIH86f2XTKC2N3Ad51awahhRFbO97 /89eMiFf9E/0CSZ5Q0f5hbSSMlY35gb0rerXUSwCir5O8egLX8h8TDnKeQ0E9Q== 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=1784584551; 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=wnOD3rtuWowCPGp/IBgSoYUU5xCm0BtcIGve7ZrOu1Q=; b=u9wVUDEHKsopkRJ07oc5TKhLUXc+eRnq08JFlseTVhcEB+Lx9bWpGOgPHe9ffD/daSP1NP evxUwwJiczRCG9HO8mapnexSZkI2WLquRAw2r3PiI6iMGSI2FSrjKL2/fblc81UKv8SHon 9UDeoJiIJpJ69Eg3SdU3on+Huwa3AL3yRvf3nSXi2ftUkOUowYICPja0XRQVfOh7MECRzo Axf6hEMRepxW6m9EHx1TA1reKnuxhUhLLCwZKYBAsjTrRQgrg0ebLcR2Ctn9SXqe3qMthp OacoFrBfla/kkvQW3vQr/59fO932KU8oRybasIsHXVBGJ8yGYhbF1ge595GvrA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3vTg2JPrz4w1 for ; Mon, 20 Jul 2026 21:55:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 24375 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 21:55:46 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 29d1a3248a6d - main - lookup: do not return vp_crossmp as dvp for mount over the reg file List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 29d1a3248a6da1ed9f1a46d7d525fb779306a90f Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 21:55:46 +0000 Message-Id: <6a5e9962.24375.7eb6d7a0@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=29d1a3248a6da1ed9f1a46d7d525fb779306a90f commit 29d1a3248a6da1ed9f1a46d7d525fb779306a90f Author: Konstantin Belousov AuthorDate: 2026-07-12 11:56:13 +0000 Commit: Konstantin Belousov CommitDate: 2026-07-20 21:55:39 +0000 lookup: do not return vp_crossmp as dvp for mount over the reg file Return the covered vnode instead. Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58191 --- sys/kern/vfs_lookup.c | 34 ++++++++++++++++++++++++++++++---- sys/kern/vfs_syscalls.c | 9 ++++++++- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c index 5d66070ca142..57b536eab6ea 100644 --- a/sys/kern/vfs_lookup.c +++ b/sys/kern/vfs_lookup.c @@ -1487,15 +1487,41 @@ nextname: error = EROFS; goto bad2; } - if (!wantparent) { + if (wantparent) { + /* + * Do not return vp_crossmp for the case of mount + * over the regular file. Substitute ni_dvp with the + * covered vnode. + */ + if (ndp->ni_dvp == vp_crossmp && + (dp->v_vflag & VV_ROOT) != 0 && dp->v_type != VDIR) { + struct vnode *mvp; + + vput(ndp->ni_dvp); + mvp = dp->v_mount->mnt_vnodecovered; + vref(mvp); + ndp->ni_dvp = mvp; + if ((cnp->cn_flags & LOCKPARENT) != 0) { + vn_lock_pair(dp, true, VOP_ISLOCKED(dp), mvp, + false, LK_EXCLUSIVE); + if (VN_IS_DOOMED(dp) || VN_IS_DOOMED(mvp)) { + error = ENOENT; + goto bad2; + } + } else { + ni_dvp_unlocked = 1; + } + } else if ((cnp->cn_flags & LOCKPARENT) == 0 && + ndp->ni_dvp != dp) { + VOP_UNLOCK(ndp->ni_dvp); + ni_dvp_unlocked = 1; + } + } else { ni_dvp_unlocked = 2; if (ndp->ni_dvp != dp) vput(ndp->ni_dvp); else vrele(ndp->ni_dvp); - } else if ((cnp->cn_flags & LOCKPARENT) == 0 && ndp->ni_dvp != dp) { - VOP_UNLOCK(ndp->ni_dvp); - ni_dvp_unlocked = 1; } if (cnp->cn_flags & AUDITVNODE1) diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index 29d503bbb3fa..eeee67418877 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -3819,6 +3819,13 @@ again: } #endif fvp = fromnd.ni_vp; + if (fromnd.ni_dvp->v_type != VDIR) { + NDFREE_PNBUF(&fromnd); + vrele(fromnd.ni_dvp); + if (fvp != NULL) + vrele(fromnd.ni_vp); + return (EBUSY); + } if (exchange && fvp == NULL) { NDFREE_PNBUF(&fromnd); vrele(fromnd.ni_dvp); @@ -3840,7 +3847,7 @@ again: } tdvp = tond.ni_dvp; tvp = tond.ni_vp; - if (tdvp == vp_crossmp) { + if (tdvp->v_type != VDIR) { /* * Rename of the root vnode of the mounted * filesystem. It is possible to get there with the From nobody Mon Jul 20 22:04:31 2026 X-Original-To: dev-commits-src-main@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 4h3vgg5PMzz6dVbL for ; Mon, 20 Jul 2026 22:04:31 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3vgg2k6mz3JH6 for ; Mon, 20 Jul 2026 22:04:31 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784585071; 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=FaxbLWk373A1sPza+4ZfuL7cMMa/KkGKycxWLUk756o=; b=v3YP+kJGGSMeeaCkhauobXEBlF86MlPWv9VX5IwWPpDPu24rvW0XPpjXBNQEXK2MNWG+08 h1O5ecmc2S8CP+GcCPKdW+nGEmlcrh31tLrrIOjGB4opQ4xQUfDTMlod1NMLFQoeoopLu5 MD0so/s927waybCm8oOV+SHI8lwbepRBjdqNrl2qBJQE1vHUDcJjD18Wx72J+M6g1w3HY6 +K9o/Wo2Y10FCLjhKS55HfhJlIqVCD67i1dJJOrOEsxp6JjKV5snzRB2P0FgFrpFhfCPO3 Rgx2gij1lX2KdB/mZOr7qGpMzXWg8eaUebLrXQSxMgwKDEDDJT9r7g4djYNBVg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784585071; a=rsa-sha256; cv=none; b=VW5NtMR8gLIcmvBSTL9nlX5Gz2fgVaJxUVLsEP3NJ/7iaAFuHieYu4H51vkCAIQIv9KjVM f9OWjpOK13kaBcAqPpYuHomgJeFNXXRg0Hc6yA2Kng/4m/cE2/I5gD/evdLZrZqrkjDKON 9/ozsXHcpBm4VKhDu8A/j2RIbDQveNMvVFaWNRQQNxaavTZr+P3VU/cSHQ/RgMqjaJ8tnb ECmWrY2F/2WIyyiKetQSH5tJCmjPrp5i9UgnrRy9QENaNUTblzgiwDJ7M8tfHFqLqKcOWC hUF2pl69QTp8khqkgNw+VnSDl260axyfOqtGxKVdNrFcEpzP/uIib7PapZaV1Q== 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=1784585071; 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=FaxbLWk373A1sPza+4ZfuL7cMMa/KkGKycxWLUk756o=; b=fNYDAJKFZw+ezQsLfzebjNn5AjupksRKdJycJ+bBAtRaECM8/kyRgks8/fHV+kQvLQ22e9 CS1azL5JtJak0Y/7zcduNpOr2t2EfvVanOXxrehrFfiaajbFjK6hpuK9ckA4gZp2+/MyCg iISSiL12wF3YhWStPzOYddIMjFtPlgwR+dZ+MP4TizzEKiMW9FAAbkWTk4HYWDE0XqAkqW MKZ1tQTYpeb1ri3Du/kr7rwflKMY36vTMkZCo2dNUJoxGb71mHAjmkQcTb7IMkWMz6vMPs 5blCLe9ozihUvRYqgP/DorheWIZcGn7lKXLPramVh5lENqeCG/tFArWvCJ+XxQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3vgg1C45z5d2 for ; Mon, 20 Jul 2026 22:04:31 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 2325d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 22:04:31 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Ed Maste Subject: git: c3e38c0093f2 - main - vidcontrol: Disallow -i mode with vt(4) List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: emaste X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c3e38c0093f2dbfafdfcc585a2f06b0313e7f6b1 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 22:04:31 +0000 Message-Id: <6a5e9b6f.2325d.65429953@gitrepo.freebsd.org> The branch main has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=c3e38c0093f2dbfafdfcc585a2f06b0313e7f6b1 commit c3e38c0093f2dbfafdfcc585a2f06b0313e7f6b1 Author: Ed Maste AuthorDate: 2026-03-10 21:13:31 +0000 Commit: Ed Maste CommitDate: 2026-07-20 22:04:16 +0000 vidcontrol: Disallow -i mode with vt(4) vt(4) does not (currently) support changing the video mode. Report that -i mode is not supported rather than printing an empty list. PR: 207411 Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58163 --- usr.sbin/vidcontrol/vidcontrol.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/usr.sbin/vidcontrol/vidcontrol.c b/usr.sbin/vidcontrol/vidcontrol.c index e4cf1e8efc53..87e779eca9f2 100644 --- a/usr.sbin/vidcontrol/vidcontrol.c +++ b/usr.sbin/vidcontrol/vidcontrol.c @@ -182,7 +182,7 @@ usage(void) if (vt4_mode) fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n", "usage: vidcontrol [-Cx] [-b color] [-c appearance] [-f [[size] file]]", -" [-g geometry] [-h size] [-i active | adapter | mode]", +" [-g geometry] [-h size] [-i active | adapter]", " [-M char] [-m on | off]", " [-r foreground background] [-S on | off] [-s number]", " [-T xterm | cons25] [-t N | off] [mode]", @@ -1206,7 +1206,10 @@ show_info(char *arg) } else if (!strcmp(arg, "adapter")) { show_adapter_info(); } else if (!strcmp(arg, "mode")) { - show_mode_info(); + if (vt4_mode) + warnx("-i mode is not supported by vt(4)"); + else + show_mode_info(); } else { revert(); errx(1, "argument to -i must be active, adapter, or mode"); From nobody Mon Jul 20 22:24:32 2026 X-Original-To: dev-commits-src-main@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 4h3w6m5Bz7z6dXjl for ; Mon, 20 Jul 2026 22:24:32 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3w6m4LrTz3L47 for ; Mon, 20 Jul 2026 22:24:32 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784586272; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=cHw57lpTiGY1q8m1tqhxUCn6l0uJgy2vkoHTQKLc/mg=; b=t58wOQ+Pdw/Qd754sb3jmHQxr78ud4uL3OOxxbgb2OugCrlf/mcGKeUAK3KSexcGP0xxoF 9vVBlVfJhWkG494HRZCqeayDTCl1SsBJcmNTTCMzeT5oG9VB8OkJtVET4r1PmBOlJr7G0j mY7cBE4ZB59klR+DueKkcI0C71sAIYDKQVo3MaFRBRglzeszE48M5RAmOZCY69+UHmGRjm aW5Ud8cN35Fz1/fi7ypU95ic8H9y7/yMktMpG/z6nCcDJtGKzc+5uov3OJYCd5MVQFhEDn +O5KTlIPFYvhwCen41FUcI98/R/hsssW9Gb0omFhqxaqMJx79NsN+9BG1IwpzQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784586272; a=rsa-sha256; cv=none; b=ywEnXUtqAGs2QK+pjhoavozLtzCjyQrouJnMVryGBP80di4AS26n8er4BdexsYsTaozQTR vyZrBwcx6xOOHLOeGBRVnI2s+coyVcvFN2RZymOOOl3A2JPaNg69W48lerxbMC7w9xrODM 16yR5bbhlY0Z3n4+2yscO58CxT9UYqSP0O1I8yqArHdpIDIV5xdHgaIhlzOw4gYvU8tSiQ w86b7iLbGWD72cQ5mKMvFXOBwiQHUgELnSAjAMFOdoFHKd+Azjyzl2ydk6da8ocp9h3UtS KG39NA0ZNT0XEVIuZSPIuurNrBdHMdbRVwco0HIrh8lll+sfmAX9AN7Fg6Xvxg== 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=1784586272; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=cHw57lpTiGY1q8m1tqhxUCn6l0uJgy2vkoHTQKLc/mg=; b=FEiEaQIgcR6rxNeKJzTlwEW+m0vjfpJtn9K7SIEoXHxAYCeQ2qHx7bEwzrSEmD1AFbJdNT ATLZRnOGscAAxMQDbWdjsmh1yHykZ7LhNaMlQwblU6FGavsnO7bi/sVnNQfbgm9Vv2yuXc iRYq70jLjgRfixb5vqhpU5uBmWh5eoGK4OzkQp2/CASehnIEkCEmI9uMh+3LE7YT0db1JB 8MP7t67sXOmkzs1b/uQx8/1JTKy3BHk1felLQ9bwpaNSpgJlldBwofJSCRgcQIpXOfHeUx MgzWi47bNkXNjNvfgXt5qxGbixTJj7izhKf/JnG0/gruEiKVNtSX4muFQjvYUQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3w6m381qz5T7 for ; Mon, 20 Jul 2026 22:24:32 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 26a2f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 22:24:32 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Nick Price From: Alexander Ziaee Subject: git: 1d89845e9086 - main - aq(4): Document the Atlantic 2 (AQC113/114/115/116) devices List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: ziaee X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 1d89845e90867e2f970c651c342eb07da847b6e9 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 22:24:32 +0000 Message-Id: <6a5ea020.26a2f.32aef7fa@gitrepo.freebsd.org> The branch main has been updated by ziaee: URL: https://cgit.FreeBSD.org/src/commit/?id=1d89845e90867e2f970c651c342eb07da847b6e9 commit 1d89845e90867e2f970c651c342eb07da847b6e9 Author: Nick Price AuthorDate: 2026-07-20 22:11:51 +0000 Commit: Alexander Ziaee CommitDate: 2026-07-20 22:24:17 +0000 aq(4): Document the Atlantic 2 (AQC113/114/115/116) devices List every AQC part aq_vendor_info_array[] probes, each with the maximum speed aq_hw_capabilities() grants it. Only the Atlantic 2 parts link at 10 Megabit. The AQC100 and AQC100S are the only SFP+ controllers; the rest are twisted pair. Reviewed by: adrian, ziaee Signed-off-by: Nick Price Differential Revision: https://reviews.freebsd.org/D58144 --- share/man/man4/aq.4 | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/share/man/man4/aq.4 b/share/man/man4/aq.4 index 248502797503..caf55de1083b 100644 --- a/share/man/man4/aq.4 +++ b/share/man/man4/aq.4 @@ -1,13 +1,14 @@ +.\" .\" Copyright (c) 2025 The FreeBSD Foundation .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.Dd December 1, 2025 +.Dd July 9, 2026 .Dt AQ 4 .Os .Sh NAME .Nm aq -.Nd Aquantia / Marvell AQ1xx 10 Gigabit Ethernet driver +.Nd Aquantia / Marvell AQC1xx Ethernet driver .Sh SYNOPSIS To compile this driver into the kernel, place the following lines in your kernel configuration file: @@ -36,19 +37,47 @@ driver is experimental, and has a number of caveats and limitations. .Sh HARDWARE The .Nm -driver supports the following 10 Gigabit Ethernet PCIe controllers: +driver supports the following PCIe Ethernet controllers: .Pp .Bl -bullet -compact .It -aQuantia AQC107 +aQuantia AQC100 (100Mb/1Gb/2.5Gb/5Gb/10Gb SFP+) +.It +aQuantia AQC100S (100Mb/1Gb/2.5Gb/5Gb/10Gb SFP+) +.It +aQuantia AQC107 (100Mb/1Gb/2.5Gb/5Gb/10Gb RJ45) +.It +aQuantia AQC107S (100Mb/1Gb/2.5Gb/5Gb/10Gb RJ45) +.It +aQuantia AQC108 (100Mb/1Gb/2.5Gb/5Gb RJ45) +.It +aQuantia AQC108S (100Mb/1Gb/2.5Gb/5Gb RJ45) +.It +aQuantia AQC109 (100Mb/1Gb/2.5Gb RJ45) +.It +aQuantia AQC109S (100Mb/1Gb/2.5Gb RJ45) +.It +aQuantia AQC111 (100Mb/1Gb/2.5Gb/5Gb RJ45) +.It +aQuantia AQC111S (100Mb/1Gb/2.5Gb/5Gb RJ45) +.It +aQuantia AQC112 (100Mb/1Gb/2.5Gb RJ45) +.It +aQuantia AQC112S (100Mb/1Gb/2.5Gb RJ45) +.It +Marvell AQC113 (10Mb/100Mb/1Gb/2.5Gb/5Gb/10Gb RJ45) +.It +Marvell AQC113C (10Mb/100Mb/1Gb/2.5Gb/5Gb/10Gb RJ45) +.It +Marvell AQC113CA (10Mb/100Mb/1Gb/2.5Gb/5Gb/10Gb RJ45) .It -aQuantia AQC108 +Marvell AQC113CS (10Mb/100Mb/1Gb/2.5Gb/5Gb RJ45) .It -aQuantia AQC109 +Marvell AQC114CS (10Mb/100Mb/1Gb/2.5Gb/5Gb RJ45) .It -aQuantia AQC111 +Marvell AQC115C (10Mb/100Mb/1Gb/2.5Gb RJ45) .It -aQuantia AQC112 +Marvell AQC116C (10Mb/100Mb/1Gb RJ45) .El .Sh SEE ALSO .Xr arp 4 , From nobody Mon Jul 20 22:50:17 2026 X-Original-To: dev-commits-src-main@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 4h3whT2VXHz6dZTs for ; Mon, 20 Jul 2026 22:50: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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3whT20jGz3MVT for ; Mon, 20 Jul 2026 22:50:17 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784587817; 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=V/5OT1C49q/7ONohpPbdemZy8qxYydH13GkSutwSp1I=; b=YcNnSHnrjcp/04kKNu+drs4Qv0QEje/URuO8YeOvNR2lVExhbBbsk8nt5mW6cmnoe3bWxz h2hCU9+PPInOgUm0CLHWcP/zIHSOR5pczOeRcOoyrRv//c7RzbiM+NtnEhVpf+s2sEP5Z3 z1MNrCRVL0XT2WnkzPPFtt98u/9ttvTUG1OWAdLRbT0SahLLGsRhpv/EpOxfkBqS8BJoT6 YzZzQADDpRU4+KQ+wpEknE5uNyL5D7q+OqguuaczMzjvSGAKvr27kX3orgkHJuemkA8a3n Cc2BrhB+udC9q+3C1Pb2kKWFqp31aS5OTxeeAQjTwjRojJ3mZ7FicqH3IbzItw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784587817; a=rsa-sha256; cv=none; b=dbRtPAMR/ZrUdAruRzwDXEIuSJc8MRFGMEWDYFwnREy+0RSNq71MXItFuhim1tBajJXliG q3UKY5fFxBi4NBTvF2OrCBpf0zbfvGFCOotui+mIs8Itp9HeVKNsSKndfGdsEZngwl8LfG hW7pvGiRMKjhMVAWKJoM52fk+ZeBhwvJZsE3Kiobn2WqYXn6RSgxKVM2duY7nJzcKjmQQX UogHXjx3DdjCDGODBDorfn56kbAJbQq57KNnQxEwEZYSCiug3m+DYwhuZgDn5eqHMcE70N zb8RpH8pjIwPlIesWYWRX3VZ82B4e5Vu1UcrZG8BrCAFiCUM9ni3G+heVmKaGQ== 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=1784587817; 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=V/5OT1C49q/7ONohpPbdemZy8qxYydH13GkSutwSp1I=; b=YxvVyfB2HC1kvF/sf+HgT6RFdZ+fmaL/XLx6QJAGoqbmtjuGSy+nNgUaMJqm054BNv//SW iAXgk288o1GtB/54r/0u64jMkBl6lJ2mgcNl8VLZ+oPIdP/G8jkaJWtMW2pTnN2aChN/Gm eScvPh2Dpu+RONN8M41qvv+2hmudNlbeuN9dhz/F/CMfXlT/F0ldWqdCtEJVLPJUKB26Jy AewuBHh4IfnrqXskafs/1rEkSoq5I8EPcYkZEy1xrVTLyS95Uw49cHaEg3m4GBTUXjpCrg /FzCJTFajgOUrwnMxAB4WsiUXwyit78kzXK4tzQyb2cC0OIvaHWrw8rjY3X5dA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3whT0znYz5vc for ; Mon, 20 Jul 2026 22:50:17 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 30afb by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 22:50:17 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Adrian Chadd Subject: git: 4a4bcdc6aa3e - main - net80211: update drivers to allocate sequence numbers in the raw path List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4a4bcdc6aa3eb99948a369fe16f5cecf5828e1bb Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 22:50:17 +0000 Message-Id: <6a5ea629.30afb.25737d95@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=4a4bcdc6aa3eb99948a369fe16f5cecf5828e1bb commit 4a4bcdc6aa3eb99948a369fe16f5cecf5828e1bb Author: Adrian Chadd AuthorDate: 2026-07-08 05:44:57 +0000 Commit: Adrian Chadd CommitDate: 2026-07-20 22:37:34 +0000 net80211: update drivers to allocate sequence numbers in the raw path A bunch of drivers weren't properly converted. I mistakenly put a call to ieee80211_output_seqno_assign() wherever the crypto header was added, which isn't exactly correct. There are plenty of drivers which don't share enough of their raw and normal transmit path code for that to hold true. So after some manual review, it looks like I've captured the places (outside of iwn(4) which I committed earlier) where I missed ieee80211_output_seqno_assign() calls. * For bwi(4) and bwn(4) I refactored it out into a place that is common enough and happens in the same lock hold window, so it's serialised. * For the rest, it's just plain missing from the raw path. Locally tested: * ural(4) * ral(4) * bwi(4) Differential Revision: https://reviews.freebsd.org/D58098 --- sys/dev/bwi/if_bwi.c | 16 +++++++++++++++- sys/dev/bwn/if_bwn.c | 9 ++++++++- sys/dev/ral/rt2560.c | 2 ++ sys/dev/ral/rt2860.c | 2 ++ sys/dev/usb/wlan/if_ural.c | 2 ++ 5 files changed, 29 insertions(+), 2 deletions(-) diff --git a/sys/dev/bwi/if_bwi.c b/sys/dev/bwi/if_bwi.c index 80fc5e9e47af..a39094e3af21 100644 --- a/sys/dev/bwi/if_bwi.c +++ b/sys/dev/bwi/if_bwi.c @@ -1364,7 +1364,6 @@ bwi_start_locked(struct bwi_softc *sc) (m = mbufq_dequeue(&sc->sc_snd)) != NULL) { ni = (struct ieee80211_node *) m->m_pkthdr.rcvif; wh = mtod(m, struct ieee80211_frame *); - ieee80211_output_seqno_assign(ni, -1, m); if ((wh->i_fc[1] & IEEE80211_FC1_PROTECTED) != 0 && ieee80211_crypto_encap(ni, m) == NULL) { if_inc_counter(ni->ni_vap->iv_ifp, @@ -2903,6 +2902,12 @@ bwi_plcp_header(const struct ieee80211_rate_table *rt, panic("unsupported modulation type %u\n", modtype); } +/* + * @brief Encapsulate a frame for transmit. + * + * Note that this must be called inside the same lock / path + * as the crypto encap call in the transmit path. + */ static int bwi_encap(struct bwi_softc *sc, int idx, struct mbuf *m, struct ieee80211_node *ni) @@ -2937,6 +2942,12 @@ bwi_encap(struct bwi_softc *sc, int idx, struct mbuf *m, /* Get 802.11 frame len before prepending TX header */ pkt_len = m->m_pkthdr.len + IEEE80211_CRC_LEN; + /* + * Assign sequence number - must be done in lock-step with + * cipher encap. + */ + ieee80211_output_seqno_assign(ni, -1, m); + /* * Find TX rate */ @@ -3117,6 +3128,9 @@ bwi_encap_raw(struct bwi_softc *sc, int idx, struct mbuf *m, /* Get 802.11 frame len before prepending TX header */ pkt_len = m->m_pkthdr.len + IEEE80211_CRC_LEN; + /* Assign sequence number. */ + ieee80211_output_seqno_assign(ni, -1, m); + /* * Find TX rate */ diff --git a/sys/dev/bwn/if_bwn.c b/sys/dev/bwn/if_bwn.c index ec9d56661034..0f840c0f3276 100644 --- a/sys/dev/bwn/if_bwn.c +++ b/sys/dev/bwn/if_bwn.c @@ -1000,7 +1000,6 @@ bwn_start(struct bwn_softc *sc) continue; } wh = mtod(m, struct ieee80211_frame *); - ieee80211_output_seqno_assign(ni, -1, m); if (wh->i_fc[1] & IEEE80211_FC1_PROTECTED) { k = ieee80211_crypto_encap(ni, m); if (k == NULL) { @@ -1053,6 +1052,12 @@ full: return (1); } +/* + * @brief Queue the give frame for transmit. + * + * This must be called in the same lock/path as the crypto encap call + * to avoid reordering issues. + */ static int bwn_tx_start(struct bwn_softc *sc, struct ieee80211_node *ni, struct mbuf *m) { @@ -1066,6 +1071,8 @@ bwn_tx_start(struct bwn_softc *sc, struct ieee80211_node *ni, struct mbuf *m) return (ENXIO); } + ieee80211_output_seqno_assign(ni, -1, m); + error = (mac->mac_flags & BWN_MAC_FLAG_DMA) ? bwn_dma_tx_start(mac, ni, &m) : bwn_pio_tx_start(mac, ni, &m); if (error) { diff --git a/sys/dev/ral/rt2560.c b/sys/dev/ral/rt2560.c index 7feb324eb21d..8941d7c8772f 100644 --- a/sys/dev/ral/rt2560.c +++ b/sys/dev/ral/rt2560.c @@ -1675,6 +1675,8 @@ rt2560_tx_raw(struct rt2560_softc *sc, struct mbuf *m0, flags |= RT2560_TX_LONG_RETRY | RT2560_TX_IFS_SIFS; } + ieee80211_output_seqno_assign(ni, -1, m0); + error = bus_dmamap_load_mbuf_sg(sc->prioq.data_dmat, data->map, m0, segs, &nsegs, 0); if (error != 0) { diff --git a/sys/dev/ral/rt2860.c b/sys/dev/ral/rt2860.c index 76fe4652839d..004894125140 100644 --- a/sys/dev/ral/rt2860.c +++ b/sys/dev/ral/rt2860.c @@ -1755,6 +1755,8 @@ rt2860_tx_raw(struct rt2860_softc *sc, struct mbuf *m, return EINVAL; } + ieee80211_output_seqno_assign(ni, -1, m); + qid = params->ibp_pri & 3; ring = &sc->txq[qid]; diff --git a/sys/dev/usb/wlan/if_ural.c b/sys/dev/usb/wlan/if_ural.c index adef924a085c..61381ed740f4 100644 --- a/sys/dev/usb/wlan/if_ural.c +++ b/sys/dev/usb/wlan/if_ural.c @@ -1189,6 +1189,8 @@ ural_tx_raw(struct ural_softc *sc, struct mbuf *m0, struct ieee80211_node *ni, STAILQ_REMOVE_HEAD(&sc->tx_free, next); sc->tx_nfree--; + ieee80211_output_seqno_assign(ni, -1, m0); + data->m = m0; data->ni = ni; data->rate = rate; From nobody Mon Jul 20 22:50:18 2026 X-Original-To: dev-commits-src-main@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 4h3whV4ddPz6dZTw for ; Mon, 20 Jul 2026 22:50:18 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3whV3j1bz3MZh for ; Mon, 20 Jul 2026 22:50:18 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784587818; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ui0/qFdxn5C5+rHoYqdl75+FUC4YqqGFs9+HFnh4cic=; b=VpWfe1+uHkeeFd4b+QxXqUvkzRBvb2WTziqPyL75xBcM3HgsbUTvuOPp9o3VHmTQ4Lw0hI X1iattr46wyHgZKie3fr8pZxZ3p0dyRAX5nZmNjL1FdYpERLNcQysRrAQOBYFg9GcqoJuo 9JHoWFO008Jh5xHASlT6YV4zMwggXWty0rmjrblLEqRO41YIkVN6XjgyKuarTdHRaxAheC eM9ypIM/eZH0Cc8ag0H3+asS30gTrdqLTdTG2x9niPxHmluhZXy+vkzaC9kgZV+Zc82jbj Yvfws997ggOPA0/pNdubbWwHuxg4rMK/YqI9KSqg8B0mHxwyZLYlqM7gmjKtvA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784587818; a=rsa-sha256; cv=none; b=PYj/5R+CuzyEzo0FDBIl6MOoffQMfltZHJ1K6iuxT2kclk/bEkg5PXUbusk7K+MkAWZCj/ EuU9xjSbI4agBKvPUjNO9LNUEVYrMWq2CMeXjvA0lzuFaFBT2lmOFOqX/LCNMSH3Fb7Hcv aMO0hEh94ZYa6HSYtRaLCIb3Iti+QCSpO1BXJfD0RHSG4Dj0wsKxn2rWZQG7R/oV/tBPQf ZE6CfqXveZXTzJ7vB8o3ThKEFZKleyMOCv/afe3R4ovANwlbeXeqC6Q/Imzjq5ncmt0j7t ggnrMIX5kX51VAAehQXGeqzA6OexFiHYk145GSvKIs/+NQM8KyAXQIt/xPHM1Q== 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=1784587818; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ui0/qFdxn5C5+rHoYqdl75+FUC4YqqGFs9+HFnh4cic=; b=XQPI3cjH2cY3GEJkpcegHxVHKgVjCzae42RNiR6Pu3otOWnNOuL5+P5TvHAcDYYga1jQon SZ/k9b5d/4zYIrmsi1KN7qo0f3FhoqPKft70imY9ple7hU/5SWT1GY7jBBAemlBqyaCXNN v5r7lOOl8bwVf1vSl+BCI5ZM9mRSNV3HFt4vX8jP1bYr7rw8CKtyXyGcZpbrtq2/c+9GXI 5GY1X0cBH1V5FG81/ZKPIBabr3A/IOzY1PGUAImEOeEhVHF4Ej1rPeIsnJT7uwAUuBtumb 8u0mGaFYwV9GKwiYMKt/R3b6DSnFl0jxFI124NHPvzldU7WLzyrv3fHJnwvilg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3whV1Zp9z5vd for ; Mon, 20 Jul 2026 22:50:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 31d85 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 22:50:18 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Abdelkader Boudih From: Adrian Chadd Subject: git: d3259935f778 - main - firewire: add warn-only CRC validation for CSR ROM directories List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d3259935f7780507248044cdce67646b5fa3e7c6 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 22:50:18 +0000 Message-Id: <6a5ea62a.31d85.65b25dd6@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=d3259935f7780507248044cdce67646b5fa3e7c6 commit d3259935f7780507248044cdce67646b5fa3e7c6 Author: Abdelkader Boudih AuthorDate: 2026-07-20 22:38:41 +0000 Commit: Adrian Chadd CommitDate: 2026-07-20 22:38:47 +0000 firewire: add warn-only CRC validation for CSR ROM directories Implemented crom_crc_valid() helper to validate IEEE 1394 config ROM CRC-16 checksums. Skipped root header CRC validation since csrhdr.crc_len cover the entire ROM body which is not fully read at header parse time. Per-directory CRC checks below catch corruption where it needed. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58307 --- sys/dev/firewire/firewire.c | 15 ++++++++++++++- sys/dev/firewire/fwcam.c | 5 +++++ sys/dev/firewire/fwcrom.c | 7 +++++++ sys/dev/firewire/fwisound.c | 5 +++++ sys/dev/firewire/iec13213.h | 1 + 5 files changed, 32 insertions(+), 1 deletion(-) diff --git a/sys/dev/firewire/firewire.c b/sys/dev/firewire/firewire.c index 3d41b4691276..d3808f5c8e62 100644 --- a/sys/dev/firewire/firewire.c +++ b/sys/dev/firewire/firewire.c @@ -1519,7 +1519,11 @@ fw_explore_csrblock(struct fw_device *fwdev, int offset, int recur) if (err) return (-1); - /* TODO: validate directory CRC */ + if (!crom_crc_valid((uint32_t *)reg, dir->crc_len, dir->crc)) { + if (firewire_debug) + printf("%s: bad CRC in directory at 0x%x\n", + __func__, offset - (int)sizeof(uint32_t)); + } off = CSRROMOFF + offset + sizeof(uint32_t) * (dir->crc_len - 1); if (fwdev->rommax < off) @@ -1586,6 +1590,7 @@ fw_explore_node(struct fw_device *dfwdev) return (-1); } binfo = (struct bus_info *)&csr[1]; + /* Root header CRC spans entire ROM; validated per-directory below. */ if (binfo->bus_name != CSR_BUS_NAME_IEEE1394) { dfwdev->status = FWDEVINVAL; return (-1); @@ -1828,6 +1833,10 @@ fw_parse_units(struct fw_device *fwdev) root_len = rootdir->crc_len; if (root_off + 1 + root_len > rom_quads) return; + if (!crom_crc_valid((uint32_t *)&rootdir->entry[0], root_len, + rootdir->crc) && firewire_debug) + device_printf(fwdev->fc->bdev, + "fw_parse_units: bad root directory CRC\n"); uindex = 0; for (ri = 0; ri < (int)root_len; ri++) { @@ -1844,6 +1853,10 @@ fw_parse_units(struct fw_device *fwdev) udir_len = udir->crc_len; if (udir_qoff + 1 + udir_len > rom_quads) continue; + if (!crom_crc_valid((uint32_t *)&udir->entry[0], udir_len, + udir->crc) && firewire_debug) + printf("fw_parse_units: bad CRC in unit dir at 0x%x\n", + udir_qoff); spec_id = 0; sw_version = 0; diff --git a/sys/dev/firewire/fwcam.c b/sys/dev/firewire/fwcam.c index b2381c4be3f9..72bf429f061a 100644 --- a/sys/dev/firewire/fwcam.c +++ b/sys/dev/firewire/fwcam.c @@ -98,6 +98,11 @@ fwcam_search_dir_cmd_base(uint32_t *csrrom, uint32_t dir_qoff, dir_len = dir->crc_len; if (dir_qoff + 1 + dir_len > rom_quads) return (0); + if (!crom_crc_valid((uint32_t *)&dir->entry[0], dir_len, dir->crc)) { + if (firewire_debug) + printf("fwcam: bad CRC in directory at 0x%x\n", + dir_qoff); + } for (i = 0; i < (int)dir_len; i++) { if (dir_qoff + 1 + i >= rom_quads) diff --git a/sys/dev/firewire/fwcrom.c b/sys/dev/firewire/fwcrom.c index 6e588b08a40f..ec88902e582e 100644 --- a/sys/dev/firewire/fwcrom.c +++ b/sys/dev/firewire/fwcrom.c @@ -237,6 +237,13 @@ crom_crc(uint32_t *ptr, int len) return ((uint16_t) crc); } +int +crom_crc_valid(uint32_t *data, int len, uint16_t expected) +{ + + return (crom_crc(data, len) == expected); +} + #if !defined(_KERNEL) && !defined(_BOOT) static void crom_desc_specver(uint32_t spec, uint32_t ver, char *buf, int len) diff --git a/sys/dev/firewire/fwisound.c b/sys/dev/firewire/fwisound.c index 63ebd5f01917..12a32fb25aab 100644 --- a/sys/dev/firewire/fwisound.c +++ b/sys/dev/firewire/fwisound.c @@ -123,6 +123,11 @@ fwisound_find_audio_base(struct fw_unit *unit) udir_len = udir->crc_len; if (udir_qoff + 1 + udir_len > rom_quads) return (0); + if (!crom_crc_valid((uint32_t *)&udir->entry[0], udir_len, udir->crc)) { + if (firewire_debug) + printf("fwisound: bad CRC in unit directory at 0x%x\n", + udir_qoff); + } for (i = 0; i < (int)udir_len; i++) { if (udir_qoff + 1 + i >= rom_quads) diff --git a/sys/dev/firewire/iec13213.h b/sys/dev/firewire/iec13213.h index 0f6ac5b35224..a0d57ab4781a 100644 --- a/sys/dev/firewire/iec13213.h +++ b/sys/dev/firewire/iec13213.h @@ -215,6 +215,7 @@ struct csrreg *crom_get(struct crom_context *); void crom_next(struct crom_context *); void crom_parse_text(struct crom_context *, char *, int); uint16_t crom_crc(uint32_t *r, int); +int crom_crc_valid(uint32_t *data, int len, uint16_t expected); struct csrreg *crom_search_key(struct crom_context *, uint8_t); int crom_has_specver(uint32_t *, uint32_t, uint32_t); From nobody Mon Jul 20 22:50:20 2026 X-Original-To: dev-commits-src-main@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 4h3whY04B0z6db49 for ; Mon, 20 Jul 2026 22:50: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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3whX3FWbz3MgR for ; Mon, 20 Jul 2026 22:50:20 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784587820; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=lhqw1amwOF+aTiowFQlL/c1ain+U1pN30LHir0kDmNc=; b=UcKnie9YjEWrNESqajE4xTp+i1MR1Icpym8lqM1QQGKWk0CfkwYIMkfyZCJJd/cRNBcb/N fWFPKcv2NKJ/KzhVK4TkqLBZa5ozn03uS+dlebx61PEHJjKzFXeb/tc/VG272EfV4r9Z+P unnQF4yJb04+tabsavHgYsQBoHRMAcZaCCCYpzK0m5vZ8ygmfFa0lww60jY+X/YVfwxWbq S78mL+60e7grIRY4+Cd51zEK1jYAmYxg4aFHTBt1GsAedsBpQuRfUxDRdpkHBXDSnY3i9r GzO1a9gCrapzfcFerlmDzgEJmUu1scg0cQVgH8yzLO66BoscvKsO3hCHU5DQ+Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784587820; a=rsa-sha256; cv=none; b=taZBCw0u3GAjOPxOCCVZk4+lVUilkEbb/M9E95TguDue4GR1KL9P4dkAOgLxLhduj8meq5 selpdF3GWBHdpDZ4h+iZeiVk+BlLtHbm28k+4FbNHmhjtzM1QSsRBrgpYQ6y+D90IpUxtx h61Ei93C+1+RHyEZM7PlmdEb67wDu1v9IARpeRZZMStfb3G9JfAjVee1j9eBj3IqYZV1qX /dw7+a8ZE/Hbg4b4qexTHOtWfuKU0l+J3A+XRENnrJrUI3jn6pNOqV6IMDQ6IHForsqMyY lpN2eCnhb+Er1SuX7EsdaH+r+y9miA0gjBwgpa4YFRsI//+BnSMUb62G46tmkA== 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=1784587820; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=lhqw1amwOF+aTiowFQlL/c1ain+U1pN30LHir0kDmNc=; b=arv3YE+A/5y7zwoAcTusnrVSQACkP9TQ9bEzyMVSGBQ1nXP6kXPiGLnA705Q4AEUJCqm7K HE0LOUnQjlUuGFSTVgyC+O1ukvcaob7axHr6GzBMDrngfcfSI0loOVcgwz0fVdnoaeV0VJ gB9Vbfn52YVeoT0x5feaFBGmVu8Ma1TCI8eKji//cFIk1ZCWY+BqZdCCpvWssa+l+bJE5j nU+zLq0QdyuDeG0w0jDDxl3jXU1QG9hJQJSrLKL239uMF5UY8lIU5ewS0Xt2ioBAp6t/TL uivSrY+IptO6t+Ur44fFOizin53WKqFcKnVWX6Bnkqe0vb2n5+e2sq9yvWRikA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3whX2Chhz6CB for ; Mon, 20 Jul 2026 22:50:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 31b90 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 22:50:20 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Abdelkader Boudih From: Adrian Chadd Subject: git: 23ea903f6801 - main - firewire: force root change when root node is not cycle master capable List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 23ea903f68017f781ff579325caa01c928612d57 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 22:50:20 +0000 Message-Id: <6a5ea62c.31b90.15b33c5b@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=23ea903f68017f781ff579325caa01c928612d57 commit 23ea903f68017f781ff579325caa01c928612d57 Author: Abdelkader Boudih AuthorDate: 2026-07-20 22:47:49 +0000 Commit: Adrian Chadd CommitDate: 2026-07-20 22:47:58 +0000 firewire: force root change when root node is not cycle master capable When a FireWire bus resets, all devices negotiate who is the new boss. when we detect the root node can't be cycle master, we send a PHY config packet that forces a reelection. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58309 --- sys/dev/firewire/firewire.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sys/dev/firewire/firewire.c b/sys/dev/firewire/firewire.c index cc0cf9e5b7ad..1020aff31929 100644 --- a/sys/dev/firewire/firewire.c +++ b/sys/dev/firewire/firewire.c @@ -2491,9 +2491,10 @@ fw_bmr(struct firewire_comm *fc) cmstr = fc->max_node; else { device_printf(fc->bdev, - "root node is not cycle master capable\n"); - /* TODO: issue PHY config to force root change + bus reset */ - cmstr = fc->nodeid; + "root node is not cycle master capable, " + "forcing root to node %d\n", fc->nodeid); + fw_phy_config(fc, fc->nodeid, -1); + return 0; } } else cmstr = -1; From nobody Mon Jul 20 22:50:19 2026 X-Original-To: dev-commits-src-main@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 4h3whX3VgYz6dZgv for ; Mon, 20 Jul 2026 22:50:20 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3whW5SZfz3Mjc for ; Mon, 20 Jul 2026 22:50:19 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784587819; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=VTtbxH+27rPiOUchY/SkYg8iE3B3I5QQZ3a50Y0tmZ4=; b=LFLNOslvkK8qFbORkrwAFBSYRrqR4K5UVU24QMmB7NdAyvrY+HP95t1sXtlXl2bdqN2Y01 sMe3pL7ywuANMTLsJxanYskGSCqg8AeJhHNSIsRafVYyGXDx3hu+htR8OzzF3bY0G9po+e FmFDQ9NZa+4rXoVJlhEuXX+aCAb25O4nWngqj5Br2hW2REGGSJ9ki0q16htPRzGxiLF1lH lAXExIqR9w+puHZmbC8O3et5NlSBXJvAXrCXB8+JCSoe+7zRiOy5XqsDSmP8UPHfnyK1AC raisU0G7EaMxRdoksosH+qpsvl9iLnX9YM+1bizmrm9fvbbBIVt6Tda10LYL3g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784587819; a=rsa-sha256; cv=none; b=VGDsdprbPhe99bkuVuYlIlJ7eC1JubrEf6cn6yA7NzaovX+bCJxrd4YJRKwG6VSj4JBp6U 1/4U92ldl2Fcp3gF21XBr+Qu9lEWf0UdYMDA2T3oBcsv1Bmykcra6tbpC1khbmBocLBAzY 6C6HPK62upXG/ecpg5iJCcK92fAfKw9y9V9OCTC/t70GaVlOF21caaNQowtGPxf0EaKsrT 5ZQqBRyHAenJaBA5FAUp8wyGDhIp9LRmC0sntcupAKrZFySzon4yb4jU75SSz6sWVs3rhy f1bjZud66xSud6E/j6lhHPmUjub4oQ9eCgN78CU4Jsk6AIzK+w5h5yZ/U1liTA== 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=1784587819; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=VTtbxH+27rPiOUchY/SkYg8iE3B3I5QQZ3a50Y0tmZ4=; b=sG/3f3fvw4BrhQH9nFngs/QGXxP2L4Vc1EsxIx4y4nk7jdXKysFYUBWMl/B7sRsim/HsVy S718PLEH2CXGUVLeIrfpWAfTeEDN1icxwlQkJmromviYgSdpK+SnJzo+OEAtZOwYXGptnM KITVdq4iO4MA1538tGuMZoP4q5EObPYRXgsGIRg5dlVb5orNvmZQ237EMi8qzgCQfsyelm 1isUsoli9GDrRckKAg9+ZRo00ro8tKP8pWjpoVsbFouD/d5m8ANkqMkXV8FY25mgVcBDqS SxlMDUjTtZZEY5ZAlNad+YHPrzEYKwaqxGgExYvNM+YthXZQHfU+anujqy7EBQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3whW1sYZz6MR for ; Mon, 20 Jul 2026 22:50:19 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 30aff by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 22:50:19 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Abdelkader Boudih From: Adrian Chadd Subject: git: 5b7449ad47be - main - firewire: drain pending xfers after callout stop in detach List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5b7449ad47be4582ff451ce4615753dab4a6f882 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 22:50:19 +0000 Message-Id: <6a5ea62b.30aff.5360d636@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=5b7449ad47be4582ff451ce4615753dab4a6f882 commit 5b7449ad47be4582ff451ce4615753dab4a6f882 Author: Abdelkader Boudih AuthorDate: 2026-07-20 22:47:02 +0000 Commit: Adrian Chadd CommitDate: 2026-07-20 22:47:22 +0000 firewire: drain pending xfers after callout stop in detach Removes a TODO that predates the existing drain call. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58308 --- sys/dev/firewire/firewire.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sys/dev/firewire/firewire.c b/sys/dev/firewire/firewire.c index d3808f5c8e62..cc0cf9e5b7ad 100644 --- a/sys/dev/firewire/firewire.c +++ b/sys/dev/firewire/firewire.c @@ -564,7 +564,9 @@ firewire_detach(device_t dev) callout_stop(&fc->bmr_callout); callout_stop(&fc->busprobe_callout); - /* TODO: cancel pending xfers in atq/ats queues */ + /* Drain xfers queued by children during detach or pending callouts. */ + fw_drain_txq(fc); + for (fwdev = STAILQ_FIRST(&fc->devices); fwdev != NULL; fwdev = fwdev_next) { fwdev_next = STAILQ_NEXT(fwdev, link); From nobody Mon Jul 20 22:50:21 2026 X-Original-To: dev-commits-src-main@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 4h3whY579Jz6db4H for ; Mon, 20 Jul 2026 22:50: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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3whY3qsQz3Mbf for ; Mon, 20 Jul 2026 22:50:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784587821; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=o/rKN5easv/K/NjSuhz5JW5bpQMvVqhuMn+XjDqa+JQ=; b=CRsBLG3PQq5nGux+9e9ii5X2Y1F+76igRLJFAo1QRsjyMAsKAMOwwZA56/cdAm7QOVCTB9 YA7AKqyOkeTaMvJQoZknTRPZJ3Tw21CF6DnzhUIX2b587mw6e/JKvmyTFvg8/mV4NCSh2J KMYJX3qGrz+z0JrQo1yDTvhERE/48tB497PqGaM5w/iH1Ai/j1vbZXNaX1Ojt/ncrmkEM1 IIHE4Pue7d7whDC2OuHrBvD2Ccr7fozs9pUM6W1Dwg9ODk+dGk26RC9/d4c6ZvZKsRh5sb YvfSTp9OBiT5TeUzT3/nJixZCBr/5/oHEsMlDSTlZm2ho+of4sdAhYDNCtubmw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784587821; a=rsa-sha256; cv=none; b=Wv+gyj/t1puhPO/6CjNln3cvrK/pa+ZqzMwePFoVahcRG7A3DmLD0e3uWNpFwEyiq6y5YV QSZjRQu/4xUdiMoE2/WgK+At73/gwk07WW0PUofwGsJVsjPtAlVkqXlwQOMqHk76qo46BM LixwAovnr3uYOKI4Pw/3tOySIDPaeO626of7cGd/yoJyVpe91+m85W7560EknoE3hHTn+D 5zJ73S4sNKDhuiGp+sPuzpFTLjah59MClskBv45ep5ZQcXSKyQw+GyggDUE+xONg8oU9Wu K0xyJkH4Si1aOvyb9i9kCyrW38tbGk7EGgzbJfMyyxcjxJEjacd7dhRjL2ebRw== 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=1784587821; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=o/rKN5easv/K/NjSuhz5JW5bpQMvVqhuMn+XjDqa+JQ=; b=I9WBhC96KAr6kYkj1hM2vOqVuiy/5BIELBTh8ryb2HKokThmerTS4HzHP5hS+BZJZ5dItR zrkqzuITaAcj/1cvXRiAKtJKA9/BNyYJs+7H4r+LtIf74m5V0+/ucG2LOZI5bFvA/Bu+q9 EVEp9VhnCEoSUtPHPT9Yc0NYeCPZFAHSIekmRrEE/HXS6rJPSv5xshAdUu3mVUS5KDu6/2 HgT6+xT9PfjZgECpKYrJ8M4XfWCYbXWG1strczF3N/9jWuw9SPBPErbQ1zWrZxcKueFQMc Ox0ux9SvFREToAJ1pc0pWlQ3Vu9VfGOvtfqeuxhZqst9SS+eumLe6OY3LnZHnw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3whY2kY9z6HD for ; Mon, 20 Jul 2026 22:50:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 320bc by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 22:50:21 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Abdelkader Boudih From: Adrian Chadd Subject: git: 8a765654f937 - main - firewire: remove dead code across the subsystem List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8a765654f937e30104b6ebc28be66241b53d2a9e Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 22:50:21 +0000 Message-Id: <6a5ea62d.320bc.600e19c2@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=8a765654f937e30104b6ebc28be66241b53d2a9e commit 8a765654f937e30104b6ebc28be66241b53d2a9e Author: Abdelkader Boudih AuthorDate: 2026-07-20 22:48:17 +0000 Commit: Adrian Chadd CommitDate: 2026-07-20 22:48:20 +0000 firewire: remove dead code across the subsystem Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58310 --- sys/dev/firewire/firewire.c | 120 +------------------------------- sys/dev/firewire/fwcrom.c | 5 -- sys/dev/firewire/fwdev.c | 9 --- sys/dev/firewire/fwohci.c | 158 ------------------------------------------ sys/dev/firewire/fwohci_pci.c | 9 +-- sys/dev/firewire/if_fwe.c | 32 --------- sys/dev/firewire/if_fwip.c | 11 --- sys/dev/firewire/sbp.c | 54 --------------- sys/dev/firewire/sbp_targ.c | 33 --------- 9 files changed, 3 insertions(+), 428 deletions(-) diff --git a/sys/dev/firewire/firewire.c b/sys/dev/firewire/firewire.c index 1020aff31929..e4624485e0c0 100644 --- a/sys/dev/firewire/firewire.c +++ b/sys/dev/firewire/firewire.c @@ -306,9 +306,6 @@ fw_asystart(struct fw_xfer *xfer) FW_GLOCK(fc); xfer->flag = FWXF_INQ; STAILQ_INSERT_TAIL(&xfer->q->q, xfer, link); -#if 0 - xfer->q->queued++; -#endif FW_GUNLOCK(fc); /* Kick DMA for non-mbuf xfers */ if (xfer->mbuf == NULL) @@ -588,9 +585,6 @@ fw_xferq_drain(struct fw_xferq *xferq) while ((xfer = STAILQ_FIRST(&xferq->q)) != NULL) { STAILQ_REMOVE_HEAD(&xferq->q, link); -#if 0 - xferq->queued--; -#endif xfer->resp = EAGAIN; xfer->flag = FWXF_SENTERR; fw_xfer_done(xfer); @@ -880,21 +874,6 @@ void fw_init(struct firewire_comm *fc) STAILQ_INIT(&fc->tlabels[i]); } -/* DV depend CSRs see blue book */ -#if 0 - CSRARC(fc, oMPR) = 0x3fff0001; /* # output channel = 1 */ - CSRARC(fc, oPCR) = 0x8000007a; - for (i = 4; i < 0x7c/4; i += 4) { - CSRARC(fc, i + oPCR) = 0x8000007a; - } - - CSRARC(fc, iMPR) = 0x00ff0001; /* # input channel = 1 */ - CSRARC(fc, iPCR) = 0x803f0000; - for (i = 4; i < 0x7c/4; i += 4) { - CSRARC(fc, i + iPCR) = 0x0; - } -#endif - fc->crom_src_buf = NULL; #ifdef FW_VMACCESS @@ -980,9 +959,6 @@ fw_bindadd(struct firewire_comm *fc, struct fw_bind *fwb) int fw_bindremove(struct firewire_comm *fc, struct fw_bind *fwb) { -#if 0 - struct fw_xfer *xfer, *next; -#endif struct fw_bind *tfw; FW_GLOCK(fc); @@ -996,14 +972,6 @@ fw_bindremove(struct firewire_comm *fc, struct fw_bind *fwb) FW_GUNLOCK(fc); return (1); found: -#if 0 - /* shall we do this? */ - for (xfer = STAILQ_FIRST(&fwb->xferlist); xfer != NULL; xfer = next) { - next = STAILQ_NEXT(xfer, link); - fw_xfer_free(xfer); - } - STAILQ_INIT(&fwb->xferlist); -#endif FW_GUNLOCK(fc); return 0; @@ -1210,9 +1178,6 @@ fw_xfer_unload(struct fw_xfer *xfer) if (xfer->flag & FWXF_INQ) { STAILQ_REMOVE(&xfer->q->q, xfer, fw_xfer, link); xfer->flag &= ~FWXF_INQ; - #if 0 - xfer->q->queued--; - #endif } FW_GUNLOCK(xfer->fc); @@ -1221,15 +1186,8 @@ fw_xfer_unload(struct fw_xfer *xfer) * xfer after it's freed. */ fw_tl_free(xfer->fc, xfer); -#if 1 - if (xfer->flag & FWXF_START) - /* - * This could happen if: - * 1. We call fwohci_arcv() before fwohci_txd(). - * 2. firewire_watch() is called. - */ + if (firewire_debug && (xfer->flag & FWXF_START)) printf("fw_xfer_free FWXF_START\n"); -#endif } xfer->flag = FWXF_INIT; xfer->resp = 0; @@ -1267,10 +1225,6 @@ fw_xfer_free(struct fw_xfer *xfer) void fw_asy_callback_free(struct fw_xfer *xfer) { -#if 0 - printf("asyreq done flag=0x%02x resp=%d\n", - xfer->flag, xfer->resp); -#endif fw_xfer_free(xfer); } @@ -2110,20 +2064,7 @@ fw_rcv(struct fw_rcv_buf *rb) struct fw_bind *bind; int tcode; int oldstate; -#if 0 - int i, len; - { - uint32_t *qld; - int i; - qld = (uint32_t *)buf; - printf("spd %d len:%d\n", spd, len); - for (i = 0; i <= len && i < 32; i+= 4) { - printf("0x%08x ", ntohl(qld[i/4])); - if ((i % 16) == 15) printf("\n"); - } - if ((i % 16) != 15) printf("\n"); - } -#endif + fp = (struct fw_pkt *)rb->vec[0].iov_base; tcode = fp->mode.common.tcode; switch (tcode) { @@ -2142,17 +2083,7 @@ fw_rcv(struct fw_rcv_buf *rb) fp->mode.hdr.tlrt >> 2, fp->mode.hdr.tlrt & 3, fp->mode.rresq.data); -#if 0 - printf("try ad-hoc work around!!\n"); - rb->xfer = fw_tl2xfer(rb->fc, fp->mode.hdr.src, - (fp->mode.hdr.tlrt >> 2)^3); - if (rb->xfer == NULL) { - printf("no use...\n"); - return; - } -#else return; -#endif } fw_rcv_copy(rb); if (rb->xfer->recv.hdr.mode.wres.rtcode != RESP_CMP) @@ -2167,10 +2098,6 @@ fw_rcv(struct fw_rcv_buf *rb) fw_xfer_done(rb->xfer); break; case FWXF_START: -#if 0 - if (firewire_debug) - printf("not sent yet tl=%x\n", rb->xfer->tl); -#endif break; default: device_printf(rb->fc->bdev, "%s: " @@ -2230,19 +2157,11 @@ fw_rcv(struct fw_rcv_buf *rb) resfp->mode.rresb.rtcode = RESP_ADDRESS_ERROR; resfp->mode.rresb.extcode = 0; resfp->mode.rresb.len = 0; -/* - rb->xfer->hand = fw_xferwake; -*/ rb->xfer->hand = fw_xfer_free; if (fw_asyreq(rb->fc, -1, rb->xfer)) fw_xfer_free(rb->xfer); return; } -#if 0 - len = 0; - for (i = 0; i < rb->nvec; i++) - len += rb->vec[i].iov_len; -#endif rb->xfer = STAILQ_FIRST(&bind->xferlist); if (rb->xfer == NULL) { device_printf(rb->fc->bdev, "%s: " @@ -2253,41 +2172,6 @@ fw_rcv(struct fw_rcv_buf *rb) fw_rcv_copy(rb); rb->xfer->hand(rb->xfer); return; -#if 0 /* shouldn't happen ?? or for GASP */ - case FWTCODE_STREAM: - { - struct fw_xferq *xferq; - - xferq = rb->fc->ir[sub]; -#if 0 - printf("stream rcv dma %d len %d off %d spd %d\n", - sub, len, off, spd); -#endif - if (xferq->queued >= xferq->maxq) { - printf("receive queue is full\n"); - return; - } - rb->xfer = fw_xfer_alloc_buf(M_FWXFER, 0, - vec[0].iov_len); - if (rb->xfer == NULL) - return; - fw_rcv_copy(rb) - xferq->queued++; - STAILQ_INSERT_TAIL(&xferq->q, rb->xfer, link); - sc = device_get_softc(rb->fc->bdev); - if (SEL_WAITING(&xferq->rsel)) - selwakeuppri(&xferq->rsel, FWPRI); - if (xferq->flag & FWXFERQ_WAKEUP) { - xferq->flag &= ~FWXFERQ_WAKEUP; - wakeup((caddr_t)xferq); - } - if (xferq->flag & FWXFERQ_HANDLER) { - xferq->hand(xferq); - } - return; - break; - } -#endif default: device_printf(rb->fc->bdev,"%s: unknown tcode %d\n", __func__, tcode); diff --git a/sys/dev/firewire/fwcrom.c b/sys/dev/firewire/fwcrom.c index ec88902e582e..32c391f0b11f 100644 --- a/sys/dev/firewire/fwcrom.c +++ b/sys/dev/firewire/fwcrom.c @@ -309,12 +309,7 @@ crom_desc(struct crom_context *cc, char *buf, int len) reg = crom_get(cc); switch (reg->key & CSRTYPE_MASK) { case CSRTYPE_I: -#if 0 - len -= snprintf(buf, len, "%d", reg->val); - buf += strlen(buf); -#else *buf = '\0'; -#endif break; case CSRTYPE_C: len -= snprintf(buf, len, "offset=0x%04x(%d)", diff --git a/sys/dev/firewire/fwdev.c b/sys/dev/firewire/fwdev.c index 18c2da6d2d94..cea5ad3075ad 100644 --- a/sys/dev/firewire/fwdev.c +++ b/sys/dev/firewire/fwdev.c @@ -284,10 +284,6 @@ fw_read_async(struct fw_drv1 *d, struct uio *uio, int ioflag) STAILQ_REMOVE_HEAD(&d->rq, link); FW_GUNLOCK(xfer->fc); fp = &xfer->recv.hdr; -#if 0 /* for GASP ?? */ - if (fc->irx_post != NULL) - fc->irx_post(fc, fp->mode.ld); -#endif tinfo = &xfer->fc->tcode[fp->mode.hdr.tcode]; err = uiomove(fp, tinfo->hdr_len, uio); if (err) @@ -469,11 +465,6 @@ isoloop: it->queued = 0; } else if (slept == 0) { slept = 1; -#if 0 /* XXX to avoid lock recursion */ - err = fc->itx_enable(fc, it->dmach); - if (err) - goto out; -#endif err = msleep(it, FW_GMTX(fc), FWPRI, "fw_write", hz); if (err) goto out; diff --git a/sys/dev/firewire/fwohci.c b/sys/dev/firewire/fwohci.c index d78312682e0c..1d5a4d686d81 100644 --- a/sys/dev/firewire/fwohci.c +++ b/sys/dev/firewire/fwohci.c @@ -465,11 +465,7 @@ fwohci_probe_phy(struct fwohci_softc *sc, device_t dev) /* check programPhyEnable */ reg2 = fwphy_rddata(sc, 5); -#if 0 - if (e1394a && (OREAD(sc, OHCI_HCCCTL) & OHCI_HCC_PRPHY)) { -#else /* XXX force to enable 1394a */ if (e1394a) { -#endif if (firewire_debug) device_printf(dev, "Enable 1394a Enhancements\n"); @@ -687,18 +683,6 @@ fwohci_init(struct fwohci_softc *sc, device_t dev) return ENOMEM; } -#if 0 - bzero(&sc->fc.config_rom[0], CROMSIZE); - sc->fc.config_rom[1] = 0x31333934; - sc->fc.config_rom[2] = 0xf000a002; - sc->fc.config_rom[3] = OREAD(sc, OHCI_EUID_HI); - sc->fc.config_rom[4] = OREAD(sc, OHCI_EUID_LO); - sc->fc.config_rom[5] = 0; - sc->fc.config_rom[0] = (4 << 24) | (5 << 16); - - sc->fc.config_rom[0] |= fw_crc16(&sc->fc.config_rom[1], 5*4); -#endif - /* SID receive buffer must align 2^11 */ #define OHCI_SIDSIZE (1 << 11) sc->sid_buf = fwdma_malloc(&sc->fc, OHCI_SIDSIZE, OHCI_SIDSIZE, @@ -897,11 +881,6 @@ txloop: if (xfer == NULL) { goto kick; } -#if 0 - if (dbch->xferq.queued == 0) { - device_printf(sc->fc.dev, "TX queue empty\n"); - } -#endif STAILQ_REMOVE_HEAD(&dbch->xferq.q, link); db_tr->xfer = xfer; xfer->flag = FWXF_START; @@ -990,11 +969,6 @@ again: printf("dmamap_load: err=%d\n", err); bus_dmamap_sync(dbch->dmat, db_tr->dma_map, BUS_DMASYNC_PREWRITE); -#if 0 /* OHCI_OUTPUT_MODE == 0 */ - for (i = 2; i < db_tr->dbcnt; i++) - FWOHCI_DMA_SET(db_tr->db[i].db.desc.cmd, - OHCI_OUTPUT_MORE); -#endif } if (maxdesc < db_tr->dbcnt) { maxdesc = db_tr->dbcnt; @@ -1099,10 +1073,8 @@ fwohci_txd(struct fwohci_softc *sc, struct fwohci_dbch *dbch) bus_dmamap_sync(dbch->dmat, tr->dma_map, BUS_DMASYNC_POSTWRITE); bus_dmamap_unload(dbch->dmat, tr->dma_map); -#if 1 if (firewire_debug > 1) dump_db(sc, ch); -#endif if (status & OHCI_CNTL_DMA_DEAD) { /* Stop DMA */ OWRITE(sc, OHCI_DMACTLCLR(off), OHCI_CNTL_DMA_RUN); @@ -1143,10 +1115,6 @@ fwohci_txd(struct fwohci_softc *sc, struct fwohci_dbch *dbch) if (tr->xfer != NULL) { xfer = tr->xfer; if (xfer->flag & FWXF_RCVD) { -#if 0 - if (firewire_debug) - printf("already rcvd\n"); -#endif fw_xfer_done(xfer); } else { microtime(&xfer->tv); @@ -1480,11 +1448,7 @@ fwohci_next_cycle(struct firewire_comm *fc, int cycle_now) cycle = cycle_now & 0x1fff; sec = cycle_now >> 13; #define CYCLE_MOD 0x10 -#if 1 #define CYCLE_DELAY 8 /* min delay to start DMA */ -#else -#define CYCLE_DELAY 7000 /* min delay to start DMA */ -#endif cycle = cycle + CYCLE_DELAY; if (cycle >= 8000) { sec++; @@ -1540,18 +1504,8 @@ fwohci_itxbuf_enable(struct firewire_comm *fc, int dmach) fwohci_txbufdb(sc, dmach, chunk); if (prev != NULL) { db = ((struct fwohcidb_tr *)(prev->end))->db; -#if 0 /* XXX necessary? */ - FWOHCI_DMA_SET(db[ldesc].db.desc.cmd, - OHCI_BRANCH_ALWAYS); -#endif -#if 0 /* if bulkxfer->npacket changes */ - db[ldesc].db.desc.depend = db[0].db.desc.depend = - ((struct fwohcidb_tr *) - (chunk->start))->bus_addr | dbch->ndesc; -#else FWOHCI_DMA_SET(db[0].db.desc.depend, dbch->ndesc); FWOHCI_DMA_SET(db[ldesc].db.desc.depend, dbch->ndesc); -#endif } STAILQ_REMOVE_HEAD(&it->stvalid, link); STAILQ_INSERT_TAIL(&it->stdma, chunk, link); @@ -1567,9 +1521,6 @@ fwohci_itxbuf_enable(struct firewire_comm *fc, int dmach) if (stat & (OHCI_CNTL_DMA_ACTIVE | OHCI_CNTL_CYCMATCH_S)) return 0; -#if 0 - OWRITE(sc, OHCI_ITCTLCLR(dmach), OHCI_CNTL_DMA_RUN); -#endif OWRITE(sc, OHCI_IT_MASKCLR, 1 << dmach); OWRITE(sc, OHCI_IT_STATCLR, 1 << dmach); OWRITE(sc, OHCI_IT_MASK, 1 << dmach); @@ -1580,17 +1531,12 @@ fwohci_itxbuf_enable(struct firewire_comm *fc, int dmach) ((struct fwohcidb_tr *)(first->start))->bus_addr | dbch->ndesc); if (firewire_debug > 1) { printf("fwohci_itxbuf_enable: kick 0x%08x\n", stat); -#if 1 dump_dma(sc, ITX_CH + dmach); -#endif } if ((stat & OHCI_CNTL_DMA_RUN) == 0) { -#if 1 /* Don't start until all chunks are buffered */ if (STAILQ_FIRST(&it->stfree) != NULL) goto out; -#endif -#if 1 /* Clear cycle match counter bits */ OWRITE(sc, OHCI_ITCTLCLR(dmach), 0xffff0000); @@ -1601,9 +1547,6 @@ fwohci_itxbuf_enable(struct firewire_comm *fc, int dmach) OWRITE(sc, OHCI_ITCTL(dmach), OHCI_CNTL_CYCMATCH_S | (cycle_match << 16) | OHCI_CNTL_DMA_RUN); -#else - OWRITE(sc, OHCI_ITCTL(dmach), OHCI_CNTL_DMA_RUN); -#endif if (firewire_debug > 1) { printf("cycle_match: 0x%04x->0x%04x\n", cycle_now, cycle_match); @@ -1710,9 +1653,6 @@ fwohci_irx_enable(struct firewire_comm *fc, int dmach) | dbch->ndesc); OWRITE(sc, OHCI_IRCTL(dmach), OHCI_CNTL_DMA_RUN); OWRITE(sc, FWOHCI_INTMASK, OHCI_INT_DMA_IR); -#if 0 - dump_db(sc, IRX_CH + dmach); -#endif return err; } @@ -1952,17 +1892,9 @@ fwohci_intr_dma(struct fwohci_softc *sc, uint32_t stat, int count) } } if (stat & OHCI_INT_DMA_PRRS) { -#if 0 - dump_dma(sc, ARRS_CH); - dump_db(sc, ARRS_CH); -#endif fwohci_arcv(sc, &sc->arrs, count); } if (stat & OHCI_INT_DMA_PRRQ) { -#if 0 - dump_dma(sc, ARRQ_CH); - dump_db(sc, ARRQ_CH); -#endif fwohci_arcv(sc, &sc->arrq, count); } if (stat & OHCI_INT_CYC_LOST) { @@ -1970,9 +1902,6 @@ fwohci_intr_dma(struct fwohci_softc *sc, uint32_t stat, int count) sc->cycle_lost++; if (sc->cycle_lost > 10) { sc->cycle_lost = -1; -#if 0 - OWRITE(sc, OHCI_LNKCTLCLR, OHCI_CNTL_CYCTIMER); -#endif OWRITE(sc, FWOHCI_INTMASKCLR, OHCI_INT_CYC_LOST); device_printf(fc->dev, "too many cycles lost, " "no cycle master present?\n"); @@ -2195,9 +2124,6 @@ fwohci_tbuf_update(struct fwohci_softc *sc, int dmach) STAILQ_REMOVE_HEAD(&it->stdma, link); switch (stat & FWOHCIEV_MASK) { case FWOHCIEV_ACKCOMPL: -#if 0 - device_printf(fc->dev, "0x%08x\n", count); -#endif break; default: device_printf(fc->dev, @@ -2225,9 +2151,6 @@ fwohci_rbuf_update(struct fwohci_softc *sc, int dmach) ir = fc->ir[dmach]; ldesc = sc->ir[dmach].ndesc - 1; -#if 0 - dump_db(sc, dmach); -#endif if ((ir->flag & FWXFERQ_HANDLER) == 0) FW_GLOCK(fc); fwdma_sync_multiseg_all(sc->ir[dmach].am, BUS_DMASYNC_POSTREAD); @@ -2326,11 +2249,6 @@ dump_db(struct fwohci_softc *sc, uint32_t ch) struct fwohci_dbch *dbch; struct fwohcidb_tr *cp = NULL, *pp; struct fwohcidb *curr = NULL; -#if 0 - struct fwohcidb *prev - struct fwohcidb *next = NULL; - struct fwohcidb_tr *np = NULL; -#endif int idb, jdb; uint32_t cmd, off; @@ -2360,28 +2278,15 @@ dump_db(struct fwohci_softc *sc, uint32_t ch) return; } pp = dbch->top; -#if 0 - prev = pp->db; -#endif for (idb = 0; idb < dbch->ndb; idb++) { cp = STAILQ_NEXT(pp, link); if (cp == NULL) { curr = NULL; goto outdb; } -#if 0 - np = STAILQ_NEXT(cp, link); -#endif for (jdb = 0; jdb < dbch->ndesc; jdb++) { if ((cmd & 0xfffffff0) == cp->bus_addr) { curr = cp->db; -#if 0 - if (np != NULL) { - next = np->db; - } else { - next = NULL; - } -#endif goto outdb; } } @@ -2390,22 +2295,11 @@ dump_db(struct fwohci_softc *sc, uint32_t ch) curr = NULL; goto outdb; } -#if 0 - prev = pp->db; -#endif } outdb: if (curr != NULL) { -#if 0 - printf("Prev DB %d\n", ch); - print_db(pp, prev, ch, dbch->ndesc); -#endif printf("Current DB %d\n", ch); print_db(cp, curr, ch, dbch->ndesc); -#if 0 - printf("Next DB %d\n", ch); - print_db(np, next, ch, dbch->ndesc); -#endif } else { printf("dbdump err ch = %d cmd = 0x%08x\n", ch, cmd); } @@ -2517,15 +2411,9 @@ fwohci_ibr(struct firewire_comm *fc) * Set root hold-off bit so that non cyclemaster capable node * shouldn't became the root node. */ -#if 1 fun = fwphy_rddata(sc, FW_PHY_IBR_REG); fun |= FW_PHY_IBR | FW_PHY_RHB; fun = fwphy_wrdata(sc, FW_PHY_IBR_REG, fun); -#else /* Short bus reset */ - fun = fwphy_rddata(sc, FW_PHY_ISBR_REG); - fun |= FW_PHY_ISBR | FW_PHY_RHB; - fun = fwphy_wrdata(sc, FW_PHY_ISBR_REG, fun); -#endif FW_GUNLOCK(fc); } @@ -2533,9 +2421,6 @@ void fwohci_txbufdb(struct fwohci_softc *sc, int dmach, struct fw_bulkxfer *bulkxfer) { struct fwohcidb_tr *db_tr; -#if 0 - struct fwohcidb_tr *fdb_tr; -#endif struct fwohci_dbch *dbch; struct fwohcidb *db; struct fw_pkt *fp; @@ -2549,10 +2434,6 @@ fwohci_txbufdb(struct fwohci_softc *sc, int dmach, struct fw_bulkxfer *bulkxfer) chtag = sc->it[dmach].xferq.flag & 0xff; db_tr = (struct fwohcidb_tr *)(bulkxfer->start); -#if 0 - fdb_tr = (struct fwohcidb_tr *)(bulkxfer->end); -device_printf(sc->fc.dev, "DB %08x %08x %08x\n", bulkxfer, db_tr->bus_addr, fdb_tr->bus_addr); -#endif for (idb = 0; idb < dbch->xferq.bnpacket; idb++) { db = db_tr->db; fp = (struct fw_pkt *)db_tr->buf; @@ -2570,33 +2451,14 @@ device_printf(sc->fc.dev, "DB %08x %08x %08x\n", bulkxfer, db_tr->bus_addr, fdb_ FWOHCI_DMA_CLEAR(db[2].db.desc.cmd, OHCI_COUNT_MASK); FWOHCI_DMA_SET(db[2].db.desc.cmd, fp->mode.stream.len); FWOHCI_DMA_WRITE(db[2].db.desc.res, 0); -#if 0 /* if bulkxfer->npackets changes */ - db[2].db.desc.cmd = OHCI_OUTPUT_LAST - | OHCI_UPDATE - | OHCI_BRANCH_ALWAYS; - db[0].db.desc.depend = - = db[dbch->ndesc - 1].db.desc.depend - = STAILQ_NEXT(db_tr, link)->bus_addr | dbch->ndesc; -#else FWOHCI_DMA_SET(db[0].db.desc.depend, dbch->ndesc); FWOHCI_DMA_SET(db[dbch->ndesc - 1].db.desc.depend, dbch->ndesc); -#endif bulkxfer->end = (caddr_t)db_tr; db_tr = STAILQ_NEXT(db_tr, link); } db = ((struct fwohcidb_tr *)bulkxfer->end)->db; FWOHCI_DMA_CLEAR(db[0].db.desc.depend, 0xf); FWOHCI_DMA_CLEAR(db[dbch->ndesc - 1].db.desc.depend, 0xf); -#if 0 /* if bulkxfer->npackets changes */ - db[dbch->ndesc - 1].db.desc.control |= OHCI_INTERRUPT_ALWAYS; - /* OHCI 1.1 and above */ - db[0].db.desc.control |= OHCI_INTERRUPT_ALWAYS; -#endif -#if 0 - db_tr = (struct fwohcidb_tr *)bulkxfer->start; - fdb_tr = (struct fwohcidb_tr *)bulkxfer->end; -device_printf(sc->fc.dev, "DB %08x %3d %08x %08x\n", bulkxfer, bulkxfer->npacket, db_tr->bus_addr, fdb_tr->bus_addr); -#endif return; } @@ -2625,10 +2487,8 @@ fwohci_add_tx_buf(struct fwohci_dbch *dbch, struct fwohcidb_tr *db_tr, FWOHCI_DMA_WRITE(db[2].db.desc.cmd, OHCI_OUTPUT_LAST | OHCI_UPDATE | OHCI_BRANCH_ALWAYS); -#if 1 FWOHCI_DMA_WRITE(db[0].db.desc.res, 0); FWOHCI_DMA_WRITE(db[2].db.desc.res, 0); -#endif return 0; } @@ -2697,9 +2557,6 @@ fwohci_arcv_swap(struct fw_pkt *fp, int len) #endif ld0 = FWOHCI_DMA_READ(fp->mode.ld[0]); -#if 0 - printf("ld0: x%08x\n", ld0); -#endif fp0 = (struct fw_pkt *)&ld0; /* determine length to swap */ switch (fp0->mode.common.tcode) { @@ -2817,12 +2674,6 @@ fwohci_arcv(struct fwohci_softc *sc, struct fwohci_dbch *dbch, int count) status = FWOHCI_DMA_READ(db_tr->db[0].db.desc.res) >> OHCI_STATUS_SHIFT; resCount = FWOHCI_DMA_READ(db_tr->db[0].db.desc.res) & OHCI_COUNT_MASK; while (status & OHCI_CNTL_DMA_ACTIVE) { -#if 0 - - if (off == OHCI_ARQOFF) - printf("buf 0x%08x, status 0x%04x, resCount 0x%04x\n", - db_tr->bus_addr, status, resCount); -#endif len = dbch->xferq.psize - resCount; ld = (uint8_t *)db_tr->buf; if (dbch->pdb_tr == NULL) { @@ -2931,17 +2782,10 @@ fwohci_arcv(struct fwohci_softc *sc, struct fwohci_dbch *dbch, int count) /* DMA result-code will be written at the tail of packet */ stat = FWOHCI_DMA_READ(*(uint32_t *)(ld - sizeof(struct fwohci_trailer))); -#if 0 - printf("plen: %d, stat %x\n", - plen ,stat); -#endif spd = (stat >> 21) & 0x3; event = (stat >> 16) & 0x1f; switch (event) { case FWOHCIEV_ACKPEND: -#if 0 - printf("fwohci_arcv: ack pending tcode=0x%x..\n", fp->mode.common.tcode); -#endif /* fall through */ case FWOHCIEV_ACKCOMPL: { @@ -2971,9 +2815,7 @@ fwohci_arcv(struct fwohci_softc *sc, struct fwohci_dbch *dbch, int count) dbch->buf_offset, len, OREAD(sc, OHCI_DMACTL(off)), fp->mode.common.tcode, stat); -#if 1 /* XXX */ goto err; -#endif break; } #ifdef COUNT_PACKETS diff --git a/sys/dev/firewire/fwohci_pci.c b/sys/dev/firewire/fwohci_pci.c index 4abebb3b9468..609651aad849 100644 --- a/sys/dev/firewire/fwohci_pci.c +++ b/sys/dev/firewire/fwohci_pci.c @@ -206,9 +206,7 @@ fwohci_pci_init(device_t self) cmd = pci_read_config(self, PCIR_COMMAND, 2); cmd |= PCIM_CMD_BUSMASTEREN | PCIM_CMD_MWRICEN; -#if 1 /* for broken hardware */ - cmd &= ~PCIM_CMD_MWRICEN; -#endif + cmd &= ~PCIM_CMD_MWRICEN; /* for broken hardware */ pci_write_config(self, PCIR_COMMAND, cmd, 2); latency = olatency = pci_read_config(self, PCIR_LATTIMER, 1); @@ -242,11 +240,6 @@ fwohci_pci_attach(device_t self) int err; int rid; -#if 0 - if (bootverbose) - firewire_debug = bootverbose; -#endif - mtx_init(FW_GMTX(&sc->fc), "firewire", NULL, MTX_DEF); fwohci_pci_init(self); diff --git a/sys/dev/firewire/if_fwe.c b/sys/dev/firewire/if_fwe.c index 763950e59bac..bf7ed29fc5b4 100644 --- a/sys/dev/firewire/if_fwe.c +++ b/sys/dev/firewire/if_fwe.c @@ -319,10 +319,6 @@ fwe_init(void *arg) if_setdrvflagbits(ifp, IFF_DRV_RUNNING, 0); if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE); -#if 0 - /* attempt to start output */ - fwe_start(ifp); -#endif } @@ -442,9 +438,6 @@ fwe_as_output(struct fwe_softc *fwe, if_t ifp) FWE_LOCK(fwe); xfer = STAILQ_FIRST(&fwe->xferlist); if (xfer == NULL) { -#if 0 - printf("if_fwe: lack of xfer\n"); -#endif FWE_UNLOCK(fwe); break; } @@ -478,10 +471,6 @@ fwe_as_output(struct fwe_softc *fwe, if_t ifp) i++; } } -#if 0 - if (i > 1) - printf("%d queued\n", i); -#endif if (i > 0) xferq->start(fwe->fd.fc); } @@ -496,9 +485,6 @@ fwe_as_input(struct fw_xferq *xferq) struct fw_bulkxfer *sxfer; struct fw_pkt *fp; struct epoch_tracker et; -#if 0 - u_char *c; -#endif fwe = (struct fwe_softc *)xferq->sc; ifp = fwe->eth_softc.ifp; @@ -527,26 +513,8 @@ fwe_as_input(struct fw_xferq *xferq) } m->m_data += HDR_LEN + ETHER_ALIGN; -#if 0 - c = mtod(m, u_char *); -#endif m->m_len = m->m_pkthdr.len = fp->mode.stream.len - ETHER_ALIGN; m->m_pkthdr.rcvif = ifp; -#if 0 - FWEDEBUG(ifp, "%02x %02x %02x %02x %02x %02x\n" - "%02x %02x %02x %02x %02x %02x\n" - "%02x %02x %02x %02x\n" - "%02x %02x %02x %02x\n" - "%02x %02x %02x %02x\n" - "%02x %02x %02x %02x\n", - c[0], c[1], c[2], c[3], c[4], c[5], - c[6], c[7], c[8], c[9], c[10], c[11], - c[12], c[13], c[14], c[15], - c[16], c[17], c[18], c[19], - c[20], c[21], c[22], c[23], - c[20], c[21], c[22], c[23] - ); -#endif NET_EPOCH_ENTER(et); if_input(ifp, m); NET_EPOCH_EXIT(et); diff --git a/sys/dev/firewire/if_fwip.c b/sys/dev/firewire/if_fwip.c index 8ac139361a89..103ccf75b863 100644 --- a/sys/dev/firewire/if_fwip.c +++ b/sys/dev/firewire/if_fwip.c @@ -341,10 +341,6 @@ fwip_init(void *arg) if_setdrvflagbits(ifp, IFF_DRV_RUNNING, 0); if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE); -#if 0 - /* attempt to start output */ - fwip_start(ifp); -#endif } static int @@ -488,9 +484,6 @@ fwip_async_output(struct fwip_softc *fwip, if_t ifp) xfer = STAILQ_FIRST(&fwip->xferlist); if (xfer == NULL) { FWIP_UNLOCK(fwip); -#if 0 - printf("if_fwip: lack of xfer\n"); -#endif break; } STAILQ_REMOVE_HEAD(&fwip->xferlist, link); @@ -633,10 +626,6 @@ fwip_async_output(struct fwip_softc *fwip, if_t ifp) i++; } } -#if 0 - if (i > 1) - printf("%d queued\n", i); -#endif if (i > 0) xferq->start(fc); } diff --git a/sys/dev/firewire/sbp.c b/sys/dev/firewire/sbp.c index d8c5f2dd68b7..81f4ac50f5cf 100644 --- a/sys/dev/firewire/sbp.c +++ b/sys/dev/firewire/sbp.c @@ -153,9 +153,6 @@ struct sbp_ocb { struct sbp_dev { #define SBP_DEV_RESET 0 /* accept login */ #define SBP_DEV_LOGIN 1 /* to login */ -#if 0 -#define SBP_DEV_RECONN 2 /* to reconnect */ -#endif #define SBP_DEV_TOATTACH 3 /* to attach */ #define SBP_DEV_PROBE 4 /* scan lun */ #define SBP_DEV_ATTACHED 5 /* in operation */ @@ -223,9 +220,6 @@ struct sbp_softc { static void sbp_post_explore (void *); static void sbp_recv (struct fw_xfer *); static void sbp_mgm_callback (struct fw_xfer *); -#if 0 -static void sbp_cmd_callback (struct fw_xfer *); -#endif static void sbp_orb_pointer (struct sbp_dev *, struct sbp_ocb *); static void sbp_doorbell(struct sbp_dev *); static void sbp_execute_ocb (void *, bus_dma_segment_t *, int, int); @@ -323,11 +317,6 @@ END_DEBUG device_set_desc(dev, "SBP-2/SCSI over FireWire"); -#if 0 - if (bootverbose) - debug = bootverbose; -#endif - return (0); } @@ -368,11 +357,6 @@ static struct { struct fw_eui64 eui; } wired[] = { /* Bus Target EUI64 */ -#if 0 - {0, 2, {0x00018ea0, 0x01fd0154}}, /* Logitec HDD */ - {0, 0, {0x00018ea6, 0x00100682}}, /* Logitec DVD */ - {0, 1, {0x00d03200, 0xa412006a}}, /* Yano HDD */ -#endif {-1, -1, {0,0}} }; @@ -1566,25 +1550,15 @@ END_DEBUG inq = (struct scsi_inquiry_data *) ccb->csio.data_ptr; switch (SID_TYPE(inq)) { case T_DIRECT: -#if 0 - /* - * XXX Convert Direct Access device to RBC. - * I've never seen FireWire DA devices which support READ_6. - */ - if (SID_TYPE(inq) == T_DIRECT) - inq->device |= T_RBC; /* T_DIRECT == 0 */ -#endif /* fall through */ case T_RBC: /* * Override vendor/product/revision information. * Some devices sometimes return strange strings. */ -#if 1 bcopy(sdev->vendor, inq->vendor, sizeof(inq->vendor)); bcopy(sdev->product, inq->product, sizeof(inq->product)); bcopy(sdev->revision + 2, inq->revision, sizeof(inq->revision)); -#endif break; } /* @@ -2220,11 +2194,6 @@ sbp_mgm_timeout(void *arg) __func__, sdev->bustgtlun, (uint32_t)ocb->bus_addr); target->mgm_ocb_cur = NULL; sbp_free_ocb(sdev, ocb); -#if 0 - /* XXX */ - printf("run next request\n"); - sbp_mgm_orb(sdev, ORB_FUN_RUNQUEUE, NULL); -#endif device_printf(sdev->target->sbp->fd.dev, "%s:%s reset start\n", __func__, sdev->bustgtlun); @@ -2255,16 +2224,6 @@ sbp_timeout(void *arg) case 3: sbp_target_reset(sdev, sdev->timeout - 1); break; -#if 0 - default: - /* XXX give up */ - sbp_cam_detach_target(target); - if (target->luns != NULL) - free(target->luns, M_SBP); - target->num_lun = 0; - target->luns = NULL; - target->fwdev = NULL; -#endif } } @@ -2388,19 +2347,6 @@ END_DEBUG xpt_done(ccb); return; } -#if 0 - /* if we are in probe stage, pass only probe commands */ - if (sdev->status == SBP_DEV_PROBE) { - char *name; - name = xpt_path_periph(ccb->ccb_h.path)->periph_name; - printf("probe stage, periph name: %s\n", name); - if (strcmp(name, "probe") != 0) { - ccb->ccb_h.status = CAM_REQUEUE_REQ; - xpt_done(ccb); - return; - } - } -#endif if ((ocb = sbp_get_ocb(sdev)) == NULL) { ccb->ccb_h.status = CAM_RESRC_UNAVAIL; if (sdev->freeze == 0) { diff --git a/sys/dev/firewire/sbp_targ.c b/sys/dev/firewire/sbp_targ.c index cd4b3eb3b537..5c0897a2b570 100644 --- a/sys/dev/firewire/sbp_targ.c +++ b/sys/dev/firewire/sbp_targ.c @@ -526,12 +526,6 @@ static void sbp_targ_send_lstate_events(struct sbp_targ_softc *sc, struct sbp_targ_lstate *lstate) { -#if 0 - struct ccb_hdr *ccbh; - struct ccb_immediate_notify *inot; - - printf("%s: not implemented yet\n", __func__); -#endif } @@ -707,24 +701,6 @@ process_scsi_status: sbp_cmd_status->status = ccb->csio.scsi_status; sense = &ccb->csio.sense_data; -#if 0 /* XXX What we should do? */ -#if 0 - sbp_targ_abort(orbi->sc, STAILQ_NEXT(orbi, link)); -#else - norbi = STAILQ_NEXT(orbi, link); - while (norbi) { - printf("%s: status=%d\n", __func__, norbi->state); - if (norbi->ccb != NULL) { - norbi->ccb->ccb_h.status = CAM_REQ_ABORTED; *** 35 LINES SKIPPED *** From nobody Mon Jul 20 22:50:22 2026 X-Original-To: dev-commits-src-main@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 4h3whZ6NZHz6db1T for ; Mon, 20 Jul 2026 22:50:22 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3whZ4pHnz3MpS for ; Mon, 20 Jul 2026 22:50:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784587822; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=lHSwMSG4yvTd6kCzn6DW219H9MSpYz5ynb5Bd/9noQc=; b=og3DNFMB3CXpAu/2Tm1/9VkkZaZw8alT5U0CEwsaR912H1YKZxxEdjbeF4lZWveNngSaHT 6K5YdGzO01BsrAo21uEf0Onc/iznWIYh79AfriI4ugFhKq9ukeSp96BYU/b22vpxT1cXoa uIrghnyi5do5Lei3En054Ifu1ffDPtvnD7S0GIH1YU9QeIJmAVc5camOHKWDJge9JgMDyY E+4wVgn+o8hdXrAogRQK3WeuGj/v1J9Bx6LfIftRCbnn7k8JMdFSeA0mRh9nXnqhdMJOHh PoOMTNQZBd3yE5LXloB7t7IscbdZBMQxv5nKOu0eeh9pOmaNpWnPsFirxBnAIg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784587822; a=rsa-sha256; cv=none; b=JQ92zaz10MsatLxBh8qbvQ22rJaPQQ/ThZDRe0ZsvYPsaSUUzU+hnFCgJdCp3EoOFXWLtL tnbLyqYeN0/X6/3pYfEXyfy/XkaNjfJnubYfAgzrGlodLKtp68gidQk3Vz8kvjTXObxPqG 3MvjwgwGNgCOLo9PZz7NOzR5qJFzuV+j06YvmX+rRGN4W/WkAiK0ckOOtHJVosKvhPNuTJ mmppdn6ktIFt52Ay/aT0/gMXiwITIT8bnLAeqHvehqigdGb19IiHjupp8WtccTqcr8RENG 3GU6k/OB+2hC2Lok8tbsfjvYyJX2lno1oJvciwFmr+IP1+Gwlc7+KnutGQZ8xg== 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=1784587822; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=lHSwMSG4yvTd6kCzn6DW219H9MSpYz5ynb5Bd/9noQc=; b=QxiJE1NZm92A5S4SDgRCeM+jVac9JQzdBshM1NiUfmUa9eD2banA7ICqKohX0rZZi66bPY JbI7zKZbwu9kExHDltaRMvzqIUzFAPeqtPTy7dQdQyMrODejpidpqBfmZJvzqvjVle7aj7 7Bm7I8OyGwnh6qqCTiHmLsaBUtm8jbt89k48BLNfPBZnzQ16uZtyY6wUTOxZgWA5RmmyhL argtAloL4W2a9K+tDAY8jFd5BMXdGbhWJ4DwuSJxH7IPJAx7DBGmasthhYuRihBuqGoqfD tOo3Ca63bhNWzkc3y9xcDLHK8dxwVNQYhfkzIYpq53KepthbzNQB0+8Esah8eg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3whZ3c1lz6CC for ; Mon, 20 Jul 2026 22:50:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 320bd by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 22:50:22 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Abdelkader Boudih From: Adrian Chadd Subject: git: dd56711e8353 - main - firewire: replace magic numbers with named constants List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: dd56711e83533ffe40f3f54b01565537f85381cc Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 22:50:22 +0000 Message-Id: <6a5ea62e.320bd.15eafdb0@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=dd56711e83533ffe40f3f54b01565537f85381cc commit dd56711e83533ffe40f3f54b01565537f85381cc Author: Abdelkader Boudih AuthorDate: 2026-07-20 22:48:42 +0000 Commit: Adrian Chadd CommitDate: 2026-07-20 22:48:44 +0000 firewire: replace magic numbers with named constants No functional change. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58311 --- sys/dev/firewire/firewire.c | 57 ++++++++++++++++++++++++++++-------------- sys/dev/firewire/firewirereg.h | 15 +++++++++-- sys/dev/firewire/fwdev.c | 2 +- sys/dev/firewire/fwisound.c | 2 +- sys/dev/firewire/fwisound.h | 7 +++--- sys/dev/firewire/fwmem.c | 5 ++-- sys/dev/firewire/fwohci.c | 40 ++++++++++++++++++----------- sys/dev/firewire/fwohci_pci.c | 10 +++++--- sys/dev/firewire/if_fwe.c | 6 ++--- sys/dev/firewire/if_fwip.c | 20 +++++++++------ sys/dev/firewire/sbp.c | 3 ++- sys/dev/firewire/sbp_targ.c | 3 ++- 12 files changed, 112 insertions(+), 58 deletions(-) diff --git a/sys/dev/firewire/firewire.c b/sys/dev/firewire/firewire.c index e4624485e0c0..038ae1d1ba53 100644 --- a/sys/dev/firewire/firewire.c +++ b/sys/dev/firewire/firewire.c @@ -77,6 +77,23 @@ MALLOC_DEFINE(M_FWXFER, "fw_xfer", "XFER/FireWire"); #define FW_MAXASYRTY 4 +/* Split timeout: 800 cycles (see IEEE 1394-1995 8.3.2.2.2) */ +#define FW_SPLIT_TIMEOUT_CYCLES 800 +/* Default available isochronous bandwidth units (IEEE 1394-1995 Table 8-4) */ +#define FW_BANDWIDTH_AVAILABLE 4915 +/* ROM header size in quads: bus info block (4) + CRC quad (1) */ +#define FW_ROM_HEADER_QUADS 5 +/* Maximum retries when exploring a remote node's CSR ROM */ +#define FW_EXPLORE_MAX_RETRIES 3 +/* maxrec value encoding 512-byte payload (2^(maxrec+1) = 512 => maxrec=8) */ +#define FW_MAXREC_512 8 + +/* PHY configuration packet bit fields (IEEE 1394-1995 4.3.4.1) */ +#define FW_PHY_ROOT_BIT (1 << 23) +#define FW_PHY_ROOT_SHIFT 24 +#define FW_PHY_GAP_BIT (1 << 22) +#define FW_PHY_GAP_SHIFT 16 + devclass_t firewire_devclass; static void firewire_identify(driver_t *, device_t); @@ -608,7 +625,7 @@ fw_drain_txq(struct firewire_comm *fc) FW_GUNLOCK(fc); mtx_lock(&fc->tlabel_lock); - for (i = 0; i < 0x40; i++) + for (i = 0; i < FW_NUM_TLABELS; i++) while ((xfer = STAILQ_FIRST(&fc->tlabels[i])) != NULL) { if (firewire_debug) printf("tl=%d flag=%d\n", i, xfer->flag); @@ -638,18 +655,18 @@ fw_reset_csr(struct firewire_comm *fc) fc->max_node = -1; - for (i = 2; i < 0x100 / 4 - 2; i++) { + for (i = 2; i < FW_MAX_NODES - 2; i++) { CSRARC(fc, SPED_MAP + i * 4) = 0; } CSRARC(fc, STATE_CLEAR) = 1 << 23 | 0 << 17 | 1 << 16 | 1 << 15 | 1 << 14; CSRARC(fc, STATE_SET) = CSRARC(fc, STATE_CLEAR); CSRARC(fc, RESET_START) = 0; CSRARC(fc, SPLIT_TIMEOUT_HI) = 0; - CSRARC(fc, SPLIT_TIMEOUT_LO) = 800 << 19; + CSRARC(fc, SPLIT_TIMEOUT_LO) = FW_SPLIT_TIMEOUT_CYCLES << 19; CSRARC(fc, CYCLE_TIME) = 0x0; CSRARC(fc, BUS_TIME) = 0x0; - CSRARC(fc, BUS_MGR_ID) = 0x3f; - CSRARC(fc, BANDWIDTH_AV) = 4915; + CSRARC(fc, BUS_MGR_ID) = FW_NO_BUS_MANAGER; + CSRARC(fc, BANDWIDTH_AV) = FW_BANDWIDTH_AVAILABLE; CSRARC(fc, CHANNELS_AV_HI) = 0xffffffff; CSRARC(fc, CHANNELS_AV_LO) = 0xffffffff; CSRARC(fc, IP_CHANNELS) = (1U << 31); @@ -870,7 +887,7 @@ void fw_init(struct firewire_comm *fc) /* Initialize Async handlers */ STAILQ_INIT(&fc->binds); - for (i = 0; i < 0x40; i++) { + for (i = 0; i < FW_NUM_TLABELS; i++) { STAILQ_INIT(&fc->tlabels[i]); } @@ -1248,9 +1265,11 @@ fw_phy_config(struct firewire_comm *fc, int root_node, int gap_count) fp = &xfer->send.hdr; fp->mode.ld[1] = 0; if (root_node >= 0) - fp->mode.ld[1] |= (1 << 23) | (root_node & 0x3f) << 24; + fp->mode.ld[1] |= FW_PHY_ROOT_BIT | + (root_node & FW_NODE_MASK) << FW_PHY_ROOT_SHIFT; if (gap_count >= 0) - fp->mode.ld[1] |= (1 << 22) | (gap_count & 0x3f) << 16; + fp->mode.ld[1] |= FW_PHY_GAP_BIT | + (gap_count & FW_NODE_MASK) << FW_PHY_GAP_SHIFT; fp->mode.ld[2] = ~fp->mode.ld[1]; fp->mode.common.tcode |= FWTCODE_PHY; @@ -1303,7 +1322,7 @@ void fw_sidrcv(struct firewire_comm *fc, uint32_t *sid, u_int len) u_int i, j, node, c_port = 0, i_branch = 0; fc->sid_cnt = len / (sizeof(uint32_t) * 2); - fc->max_node = fc->nodeid & 0x3f; + fc->max_node = fc->nodeid & FW_NODE_MASK; CSRARC(fc, NODE_IDS) = ((uint32_t)fc->nodeid) << 16; fc->status = FWBUSCYMELECT; fc->topology_map->crc_len = 2; @@ -1311,7 +1330,7 @@ void fw_sidrcv(struct firewire_comm *fc, uint32_t *sid, u_int len) fc->topology_map->self_id_count = 0; fc->topology_map->node_count= 0; fc->speed_map->generation++; - fc->speed_map->crc_len = 1 + (64 * 64 + 3) / 4; + fc->speed_map->crc_len = 1 + (FW_MAX_NODES * FW_MAX_NODES + 3) / 4; self_id = &fc->topology_map->self_id[0]; for (i = 0; i < fc->sid_cnt; i++) { if (sid[1] != ~sid[0]) { @@ -1377,7 +1396,7 @@ void fw_sidrcv(struct firewire_comm *fc, uint32_t *sid, u_int len) (fc->irm == -1) ? "Not IRM capable" : "cable IRM", fc->irm, (fc->irm == fc->nodeid) ? " (me) " : ""); - if (try_bmr && (fc->irm != -1) && (CSRARC(fc, BUS_MGR_ID) == 0x3f)) { + if (try_bmr && (fc->irm != -1) && (CSRARC(fc, BUS_MGR_ID) == FW_NO_BUS_MANAGER)) { if (fc->irm == fc->nodeid) { fc->status = FWBUSMGRDONE; CSRARC(fc, BUS_MGR_ID) = fc->set_bmr(fc, fc->irm); @@ -1633,7 +1652,7 @@ fw_explore_node(struct fw_device *dfwdev) fwdev->dst = node; fwdev->status = FWDEVINIT; /* unchanged ? */ - if (bcmp(&csr[0], &fwdev->csrrom[0], sizeof(uint32_t) * 5) == 0) { + if (bcmp(&csr[0], &fwdev->csrrom[0], sizeof(uint32_t) * FW_ROM_HEADER_QUADS) == 0) { if (!STAILQ_EMPTY(&fwdev->units)) { if (firewire_debug) device_printf(fc->dev, @@ -1651,7 +1670,7 @@ fw_explore_node(struct fw_device *dfwdev) bzero(&fwdev->csrrom[0], CROMSIZE); /* copy first quad and bus info block */ - bcopy(&csr[0], &fwdev->csrrom[0], sizeof(uint32_t) * 5); + bcopy(&csr[0], &fwdev->csrrom[0], sizeof(uint32_t) * FW_ROM_HEADER_QUADS); fwdev->rommax = CSRROMOFF + sizeof(uint32_t) * 4; err = fw_explore_csrblock(fwdev, 0x14, 1); /* root directory */ @@ -1690,7 +1709,7 @@ static void fw_explore(struct firewire_comm *fc) { int node, err, i, todo, todo2, trys; - char nodes[63]; + char nodes[FW_MAX_NODES - 1]; struct fw_device dfwdev; union fw_self_id *fwsid; @@ -1698,7 +1717,7 @@ fw_explore(struct firewire_comm *fc) /* setup dummy fwdev */ dfwdev.fc = fc; dfwdev.speed = 0; - dfwdev.maxrec = 8; /* 512 */ + dfwdev.maxrec = FW_MAXREC_512; dfwdev.status = FWDEVINIT; for (node = 0; node <= fc->max_node; node++) { @@ -1725,7 +1744,7 @@ fw_explore(struct firewire_comm *fc) nodes[todo++] = node; } - for (trys = 0; todo > 0 && trys < 3; trys++) { + for (trys = 0; todo > 0 && trys < FW_EXPLORE_MAX_RETRIES; trys++) { todo2 = 0; for (i = 0; i < todo; i++) { dfwdev.dst = nodes[i]; @@ -1977,11 +1996,11 @@ fw_get_tlabel(struct firewire_comm *fc, struct fw_xfer *xfer) u_int dst, new_tlabel; struct fw_xfer *txfer; - dst = xfer->send.hdr.mode.hdr.dst & 0x3f; + dst = xfer->send.hdr.mode.hdr.dst & FW_NODE_MASK; mtx_lock(&fc->tlabel_lock); - new_tlabel = (fc->last_tlabel[dst] + 1) & 0x3f; + new_tlabel = (fc->last_tlabel[dst] + 1) & FW_TLABEL_MASK; STAILQ_FOREACH(txfer, &fc->tlabels[new_tlabel], tlabel) - if ((txfer->send.hdr.mode.hdr.dst & 0x3f) == dst) + if ((txfer->send.hdr.mode.hdr.dst & FW_NODE_MASK) == dst) break; if (txfer == NULL) { fc->last_tlabel[dst] = new_tlabel; diff --git a/sys/dev/firewire/firewirereg.h b/sys/dev/firewire/firewirereg.h index 656b7e2a448e..f4043987c3fe 100644 --- a/sys/dev/firewire/firewirereg.h +++ b/sys/dev/firewire/firewirereg.h @@ -98,6 +98,17 @@ struct firewire_softc { #define FW_MAX_DEVCH FW_MAX_DMACH #define FW_XFERTIMEOUT 1 +/* 6-bit transaction label space (IEEE 1394 6.2.4.2) */ +#define FW_NUM_TLABELS 0x40 +#define FW_TLABEL_MASK 0x3f + +/* 6-bit node ID fields */ +#define FW_MAX_NODES 64 +#define FW_NODE_MASK 0x3f + +/* BUS_MGR_ID register value when no bus manager is elected */ +#define FW_NO_BUS_MANAGER 0x3f + struct firewire_dev_comm { device_t dev; struct firewire_comm *fc; @@ -145,8 +156,8 @@ struct firewire_comm { struct fw_eui64 eui; struct fw_xferq *arq, *atq, *ars, *ats, *it[FW_MAX_DMACH],*ir[FW_MAX_DMACH]; - struct fw_xferlist tlabels[0x40]; - u_char last_tlabel[0x40]; + struct fw_xferlist tlabels[FW_NUM_TLABELS]; + u_char last_tlabel[FW_NUM_TLABELS]; struct mtx tlabel_lock; STAILQ_HEAD(, fw_bind) binds; STAILQ_HEAD(, fw_device) devices; diff --git a/sys/dev/firewire/fwdev.c b/sys/dev/firewire/fwdev.c index cea5ad3075ad..03e9eec5172c 100644 --- a/sys/dev/firewire/fwdev.c +++ b/sys/dev/firewire/fwdev.c @@ -408,7 +408,7 @@ fw_write_async(struct fw_drv1 *d, struct uio *uio, int ioflag) xfer->fc = d->fc; xfer->sc = NULL; xfer->hand = fw_xferwake; - xfer->send.spd = 2 /* XXX */; + xfer->send.spd = FWSPD_S400; if ((err = fw_asyreq(xfer->fc, -1, xfer))) goto out; diff --git a/sys/dev/firewire/fwisound.c b/sys/dev/firewire/fwisound.c index 12a32fb25aab..da04ae9f034b 100644 --- a/sys/dev/firewire/fwisound.c +++ b/sys/dev/firewire/fwisound.c @@ -381,7 +381,7 @@ fwisound_iso_input(struct fw_xferq *xferq) } sample_count = ntohl(pay->sample_count); - if (sample_count == 0 || sample_count > 475) { + if (sample_count == 0 || sample_count > FWISOUND_MAX_SAMPLES) { m_freem(m); continue; } diff --git a/sys/dev/firewire/fwisound.h b/sys/dev/firewire/fwisound.h index 47a9790e074c..02108237c8e8 100644 --- a/sys/dev/firewire/fwisound.h +++ b/sys/dev/firewire/fwisound.h @@ -32,17 +32,18 @@ #define FWISOUND_AUDIO_ENABLE (1u << 31) #define FWISOUND_RATE_48000 (1u << 31) +#define FWISOUND_MAX_SAMPLES 475 /* max samples per ISO packet */ +#define FWISOUND_SIGNATURE 0x73676874u /* "sght" */ + /* Apple FireWire audio ISO payload. */ struct fwisound_payload { uint32_t sample_count; /* samples in this packet */ uint32_t signature; /* 0x73676874 = "sght" */ uint32_t sample_total; /* running total (drop detect)*/ uint32_t reserved; - int16_t samples[2 * 475]; /* stereo S16BE; *2 valid */ + int16_t samples[2 * FWISOUND_MAX_SAMPLES]; /* stereo S16BE */ }; -#define FWISOUND_SIGNATURE 0x73676874u /* "sght" */ - /* ISO DMA parameters */ #define FWISOUND_ISO_CHANNEL 1 #define FWISOUND_ISO_NCHUNK 64 diff --git a/sys/dev/firewire/fwmem.c b/sys/dev/firewire/fwmem.c index e2d114f69661..6941fc8ec513 100644 --- a/sys/dev/firewire/fwmem.c +++ b/sys/dev/firewire/fwmem.c @@ -61,7 +61,7 @@ #include #include -static int fwmem_speed = 2, fwmem_debug = 0; +static int fwmem_speed = FWSPD_S400, fwmem_debug = 0; static struct fw_eui64 fwmem_eui64; SYSCTL_DECL(_hw_firewire); static SYSCTL_NODE(_hw_firewire, OID_AUTO, fwmem, @@ -78,7 +78,8 @@ SYSCTL_INT(_debug, OID_AUTO, fwmem_debug, CTLFLAG_RW, &fwmem_debug, 0, static MALLOC_DEFINE(M_FWMEM, "fwmem", "fwmem/FireWire"); -#define MAXLEN (512 << fwmem_speed) +#define FW_MAXPKT_S100 512 /* S100 max async payload */ +#define MAXLEN (FW_MAXPKT_S100 << fwmem_speed) struct fwmem_softc { struct fw_eui64 eui; diff --git a/sys/dev/firewire/fwohci.c b/sys/dev/firewire/fwohci.c index 1d5a4d686d81..dad9ff03ab6d 100644 --- a/sys/dev/firewire/fwohci.c +++ b/sys/dev/firewire/fwohci.c @@ -84,10 +84,20 @@ char fwohcicode[32][0x20]= { "Undef", "Undef", "Undef", "ack tardy", "Undef", "ack data_err", "ack type_err", ""}; -#define MAX_SPEED 3 +#define MAX_SPEED FWSPD_S800 extern char *linkspeed[]; uint32_t tagbit[4] = {1 << 28, 1 << 29, 1 << 30, 1 << 31}; +/* OHCI-local timing and protocol constants */ +#define FWOHCI_PHY_DELAY 100 /* us delay after PHY register write */ +#define FWOHCI_PHY_POLL_LIMIT 1000 /* poll iterations for bus manager CSR */ +#define FW_MAXREC_BASE 8 /* maxrec = speed + FW_MAXREC_BASE */ +#define FWOHCI_ATRETRY_MAX 0x0f /* max AT retries (phy/resp/req) */ +#define FW_CYCLES_PER_SEC 8000 /* ISO cycles per second */ +#define FW_CYCLETIMER_CYCLE_SHIFT 12 /* shift to extract cycle from cycletimer */ +#define FW_CYCLETIMER_CYCLE_MASK 0x7fff /* mask after shift (2-bit sec + 13-bit cycle) */ +#define FWOHCI_MAX_CYCLE_LOST 10 /* max CYC_LOST events before disabling */ + static struct tcode_info tinfo[] = { /* hdr_len block flag valid_response */ /* 0 WREQQ */ {16, FWTI_REQ | FWTI_TLABEL, FWTCODE_WRES}, @@ -271,7 +281,7 @@ fwphy_wrdata(struct fwohci_softc *sc, uint32_t addr, uint32_t data) fun = (PHYDEV_WRCMD | (addr << PHYDEV_REGADDR) | (data << PHYDEV_WRDATA)); OWRITE(sc, OHCI_PHYACCESS, fun); - DELAY(100); + DELAY(FWOHCI_PHY_DELAY); return (fwphy_rddata(sc, addr)); } @@ -291,10 +301,10 @@ fwohci_set_bus_manager(struct firewire_comm *fc, u_int node) OWRITE(sc, OHCI_CSR_DATA, node); OWRITE(sc, OHCI_CSR_COMP, 0x3f); OWRITE(sc, OHCI_CSR_CONT, OHCI_BUS_MANAGER_ID); - for (i = 0; !(OREAD(sc, OHCI_CSR_CONT) & (1<<31)) && (i < 1000); i++) + for (i = 0; !(OREAD(sc, OHCI_CSR_CONT) & (1<<31)) && (i < FWOHCI_PHY_POLL_LIMIT); i++) DELAY(10); bm = OREAD(sc, OHCI_CSR_DATA); - if ((bm & 0x3f) == 0x3f) + if ((bm & FW_NODE_MASK) == FW_NO_BUS_MANAGER) bm = node; if (firewire_debug) device_printf(sc->fc.dev, "%s: %d->%d (loop=%d)\n", @@ -537,7 +547,7 @@ fwohci_reset(struct fwohci_softc *sc, device_t dev) device_printf(dev, "Link %s, max_rec %d bytes.\n", linkspeed[speed], MAXREC(max_rec)); /* XXX fix max_rec */ - sc->fc.maxrec = sc->fc.speed + 8; + sc->fc.maxrec = sc->fc.speed + FW_MAXREC_BASE; if (max_rec != sc->fc.maxrec) { reg2 = (reg2 & 0xffff0fff) | (sc->fc.maxrec << 12); device_printf(dev, "max_rec %d -> %d\n", @@ -571,7 +581,7 @@ fwohci_reset(struct fwohci_softc *sc, device_t dev) /* AT Retries */ OWRITE(sc, FWOHCI_RETRY, /* CycleLimit PhyRespRetries ATRespRetries ATReqRetries */ - (0xffff << 16) | (0x0f << 8) | (0x0f << 4) | 0x0f); + (0xffff << 16) | (FWOHCI_ATRETRY_MAX << 8) | (FWOHCI_ATRETRY_MAX << 4) | FWOHCI_ATRETRY_MAX); sc->atrq.top = STAILQ_FIRST(&sc->atrq.db_trq); sc->atrs.top = STAILQ_FIRST(&sc->atrs.db_trq); @@ -905,7 +915,7 @@ txloop: hdr_len = 12; ld[1] = fp->mode.ld[1]; ld[2] = fp->mode.ld[2]; - ohcifp->mode.common.spd = 0; + ohcifp->mode.common.spd = FWSPD_S100; ohcifp->mode.common.tcode = FWOHCITCODE_PHY; } else { ohcifp->mode.asycomm.dst = fp->mode.hdr.dst; @@ -1450,14 +1460,14 @@ fwohci_next_cycle(struct firewire_comm *fc, int cycle_now) #define CYCLE_MOD 0x10 #define CYCLE_DELAY 8 /* min delay to start DMA */ cycle = cycle + CYCLE_DELAY; - if (cycle >= 8000) { + if (cycle >= FW_CYCLES_PER_SEC) { sec++; - cycle -= 8000; + cycle -= FW_CYCLES_PER_SEC; } cycle = roundup2(cycle, CYCLE_MOD); - if (cycle >= 8000) { + if (cycle >= FW_CYCLES_PER_SEC) { sec++; - if (cycle == 8000) + if (cycle == FW_CYCLES_PER_SEC) cycle = 0; else cycle = CYCLE_MOD; @@ -1541,7 +1551,7 @@ fwohci_itxbuf_enable(struct firewire_comm *fc, int dmach) OWRITE(sc, OHCI_ITCTLCLR(dmach), 0xffff0000); /* 2bit second + 13bit cycle */ - cycle_now = (fc->cyctimer(fc) >> 12) & 0x7fff; + cycle_now = (fc->cyctimer(fc) >> FW_CYCLETIMER_CYCLE_SHIFT) & FW_CYCLETIMER_CYCLE_MASK; cycle_match = fwohci_next_cycle(fc, cycle_now); OWRITE(sc, OHCI_ITCTL(dmach), @@ -1900,7 +1910,7 @@ fwohci_intr_dma(struct fwohci_softc *sc, uint32_t stat, int count) if (stat & OHCI_INT_CYC_LOST) { if (sc->cycle_lost >= 0) sc->cycle_lost++; - if (sc->cycle_lost > 10) { + if (sc->cycle_lost > FWOHCI_MAX_CYCLE_LOST) { sc->cycle_lost = -1; OWRITE(sc, FWOHCI_INTMASKCLR, OHCI_INT_CYC_LOST); device_printf(fc->dev, "too many cycles lost, " @@ -2439,10 +2449,10 @@ fwohci_txbufdb(struct fwohci_softc *sc, int dmach, struct fw_bulkxfer *bulkxfer) fp = (struct fw_pkt *)db_tr->buf; ohcifp = (struct fwohci_txpkthdr *) db[1].db.immed; ohcifp->mode.ld[0] = fp->mode.ld[0]; - ohcifp->mode.common.spd = 0 & 0x7; + ohcifp->mode.common.spd = FWSPD_S100; ohcifp->mode.stream.len = fp->mode.stream.len; ohcifp->mode.stream.chtag = chtag; - ohcifp->mode.stream.tcode = 0xa; + ohcifp->mode.stream.tcode = FWTCODE_STREAM; #if BYTE_ORDER == BIG_ENDIAN FWOHCI_DMA_WRITE(db[1].db.immed[0], db[1].db.immed[0]); FWOHCI_DMA_WRITE(db[1].db.immed[1], db[1].db.immed[1]); diff --git a/sys/dev/firewire/fwohci_pci.c b/sys/dev/firewire/fwohci_pci.c index 609651aad849..d15e4deafb1d 100644 --- a/sys/dev/firewire/fwohci_pci.c +++ b/sys/dev/firewire/fwohci_pci.c @@ -60,6 +60,10 @@ #include #include +#define FWOHCI_DMA_MAXSIZE 0x100000 /* 1MB */ +#define FWOHCI_DMA_NSEG 0x20 /* 32 segments */ +#define FWOHCI_DMA_MAXSEGSZ 0x8000 /* 32KB per segment */ + static int fwohci_pci_attach(device_t self); static int fwohci_pci_detach(device_t self); @@ -284,9 +288,9 @@ fwohci_pci_attach(device_t self) #endif /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, - /*maxsize*/0x100000, - /*nsegments*/0x20, - /*maxsegsz*/0x8000, + /*maxsize*/FWOHCI_DMA_MAXSIZE, + /*nsegments*/FWOHCI_DMA_NSEG, + /*maxsegsz*/FWOHCI_DMA_MAXSEGSZ, /*flags*/BUS_DMA_ALLOCNOW, /*lockfunc*/busdma_lock_mutex, /*lockarg*/FW_GMTX(&sc->fc), diff --git a/sys/dev/firewire/if_fwe.c b/sys/dev/firewire/if_fwe.c index bf7ed29fc5b4..322410b140c4 100644 --- a/sys/dev/firewire/if_fwe.c +++ b/sys/dev/firewire/if_fwe.c @@ -78,7 +78,7 @@ static void fwe_as_input (struct fw_xferq *); static int fwedebug = 0; static int stream_ch = 1; -static int tx_speed = 2; +static int tx_speed = FWSPD_S400; static int rx_queue_len = FWMAXQUEUE; static MALLOC_DEFINE(M_FWE, "if_fwe", "Ethernet over FireWire interface"); @@ -269,7 +269,7 @@ fwe_init(void *arg) FWEDEBUG(ifp, "initializing\n"); - /* XXX keep promiscoud mode */ + /* keep promiscuous mode */ if_setflagbits(ifp, IFF_PROMISC, 0); fc = fwe->fd.fc; @@ -338,7 +338,7 @@ fwe_ioctl(if_t ifp, u_long cmd, caddr_t data) if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) fwe_stop(fwe); } - /* XXX keep promiscoud mode */ + /* keep promiscuous mode */ if_setflagbits(ifp, IFF_PROMISC, 0); break; case SIOCADDMULTI: diff --git a/sys/dev/firewire/if_fwip.c b/sys/dev/firewire/if_fwip.c index 103ccf75b863..23e2e619a14e 100644 --- a/sys/dev/firewire/if_fwip.c +++ b/sys/dev/firewire/if_fwip.c @@ -91,9 +91,15 @@ static void fwip_start_send (void *, int); static void fwip_stream_input (struct fw_xferq *); static void fwip_unicast_input(struct fw_xfer *); +/* tag field: bits [7:6] = 0b11 (broadcast), channel field: bits [5:0] = 31 */ +#define FWXFERQ_TAG_ALL (3 << 6) +#define FW_IP_CHANNEL 31 +/* GASP header: specifier_hi + specifier_lo/version + payload */ +#define FW_GASP_HDR_LEN (3 * sizeof(uint32_t)) + static int fwipdebug = 0; -static int broadcast_channel = 0xc0 | 0x1f; /* tag | channel(XXX) */ -static int tx_speed = 2; +static int broadcast_channel = FWXFERQ_TAG_ALL | FW_IP_CHANNEL; +static int tx_speed = FWSPD_S400; static int rx_queue_len = FWMAXQUEUE; static MALLOC_DEFINE(M_FWIP, "if_fwip", "IP over FireWire interface"); @@ -548,9 +554,9 @@ fwip_async_output(struct fwip_softc *fwip, if_t ifp) fp->mode.stream.chtag = broadcast_channel; fp->mode.stream.tcode = FWTCODE_STREAM; fp->mode.stream.sy = 0; - xfer->send.spd = 0; + xfer->send.spd = FWSPD_S100; p[0] = htonl(nodeid << 16); - p[1] = htonl((0x5e << 24) | 1); + p[1] = htonl((CSRVAL_IETF << 24) | 1); } else { /* * Unicast packets are sent as block writes to the @@ -702,7 +708,7 @@ fwip_stream_input(struct fw_xferq *xferq) * version. */ p = mtod(m, uint32_t *); - if ((((ntohl(p[1]) & 0xffff) << 8) | ntohl(p[2]) >> 24) != 0x00005e + if ((((ntohl(p[1]) & 0xffff) << 8) | ntohl(p[2]) >> 24) != CSRVAL_IETF || (ntohl(p[2]) & 0xffffff) != 1) { FWIPDEBUG(ifp, "Unrecognised GASP header %#08x %#08x\n", ntohl(p[1]), ntohl(p[2])); @@ -724,7 +730,7 @@ fwip_stream_input(struct fw_xferq *xferq) struct fw_device *fd; uint32_t *p = (uint32_t *) (mtag + 1); fd = fw_noderesolve_nodeid(fwip->fd.fc, - src & 0x3f); + src & FW_NODE_MASK); if (fd) { p[0] = htonl(fd->eui.hi); p[1] = htonl(fd->eui.lo); @@ -739,7 +745,7 @@ fwip_stream_input(struct fw_xferq *xferq) /* * Trim off the GASP header */ - m_adj(m, 3*sizeof(uint32_t)); + m_adj(m, FW_GASP_HDR_LEN); m->m_pkthdr.rcvif = ifp; firewire_input(ifp, m, src); if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1); diff --git a/sys/dev/firewire/sbp.c b/sys/dev/firewire/sbp.c index 81f4ac50f5cf..8d5ad7e2ad8c 100644 --- a/sys/dev/firewire/sbp.c +++ b/sys/dev/firewire/sbp.c @@ -74,6 +74,7 @@ #define SBP_LOGIN_SIZE sizeof(struct sbp_login_res) #define SBP_QUEUE_LEN ((SBP_DMA_SIZE - SBP_LOGIN_SIZE) / sizeof(struct sbp_ocb)) #define SBP_NUM_OCB (SBP_QUEUE_LEN * SBP_NUM_TARGETS) +#define SBP_MAX_XFER 5 /* max concurrent xfers per target */ /* * STATUS FIFO addressing @@ -1287,7 +1288,7 @@ sbp_write_cmd(struct sbp_dev *sdev, int tcode, int offset) target = sdev->target; xfer = STAILQ_FIRST(&target->xferlist); if (xfer == NULL) { - if (target->n_xfer > 5 /* XXX */) { + if (target->n_xfer > SBP_MAX_XFER) { printf("sbp: no more xfer for this target\n"); return (NULL); } diff --git a/sys/dev/firewire/sbp_targ.c b/sys/dev/firewire/sbp_targ.c index 5c0897a2b570..120159ffdedb 100644 --- a/sys/dev/firewire/sbp_targ.c +++ b/sys/dev/firewire/sbp_targ.c @@ -82,6 +82,7 @@ #define SBP_TARG_BIND_END (((u_int64_t)SBP_TARG_BIND_HI << 32) | \ SBP_TARG_BIND_LO(MAX_LOGINS)) #define SBP_TARG_LOGIN_ID(lo) (((lo) - SBP_TARG_BIND_LO(0))/0x20) +#define SBP_TARG_MAX_CHUNK 2048 /* max DMA chunk per xfer */ #define FETCH_MGM 0 #define FETCH_CMD 1 @@ -931,7 +932,7 @@ sbp_targ_xfer_buf(struct orb_info *orbi, u_int offset, while (size > 0) { /* XXX assume dst_lo + off doesn't overflow */ - len = MIN(size, 2048 /* XXX */); + len = MIN(size, SBP_TARG_MAX_CHUNK); size -= len; orbi->refcount ++; if (ccb_dir == CAM_DIR_OUT) { From nobody Mon Jul 20 22:50:23 2026 X-Original-To: dev-commits-src-main@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 4h3whb74xNz6dZdZ for ; Mon, 20 Jul 2026 22:50:23 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3whb60YLz3MdP for ; Mon, 20 Jul 2026 22:50:23 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784587823; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8zcI586n9wLFKMOm30XN7V1osBFRkENquEMnEyhpElo=; b=RUMVHW5UrD7whJXO0ShRubYrt7tLbPglJd1ibJIgLv/UzE29jLa3jsiEP2v1Ez7vMWe1r4 7jgdQWPu2tcW0zY6d6yjsQj9TX4fF4MDkfw6ZHTCqx7ImdJQUhry48m0uZ+C+tEds3alpQ sQIhZXeZIoQhdpv7P0x5IFmAKzjLRfBnxL4VuTVJkX5cDR7LmjIv2xBnkVb+Lbxt7rEjJ6 45chU4BdVb/Vscbkh33RDj9kGFjjNJDgcw627dengynnNsBqZNs/BpYHzMhK0t/44XR9IY z/JnwkC3aB0h83U9Hqjog3mpGYV90BDUDDW0ji8b3O0KFE2dQB3yqw4JokihEw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784587823; a=rsa-sha256; cv=none; b=WGOEEvqMc3Uej6SXdnFDm5spfXmNV1sk47lv85RF7m0f1E1xn0ocwydQ9ApZj2NQu//csf bTcwDiYcVaBpcYc27npZ+v2LYbS/rIt2ezJgllcuHBrxA0KCVMNdHMyOG7v3yz3y1OANHf VywLKkOUdqb9+KB1/cjCMFHWO0T2bPDHP4fOH53B41402ES9kUGnI8f9Z/m8e0pb+kC7o9 ihXSbH7NAvGFZAW+q91TlXFcju9XQNmAFwY9FFMoHFflhklPpBxFkUu7G2RGTgkSCNQ9jj wWnvisp8UGzmuJ7DM/JTEBToq9n5zGMBIrTFilfQIqGaAI6L6aXvwCC3tKoZzA== 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=1784587823; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8zcI586n9wLFKMOm30XN7V1osBFRkENquEMnEyhpElo=; b=r7IqcvVu+pRIYUgdEBfAM7ZuTv3WF51ON0L8bkbI7Aq/Fw70RjnXfzHgc6sZr4kNbSyWYi L2Rj+zdVywH4z722pO+2m1VFTRU+xkRqJb+nXN7NMQk6m5V5tZFrM/JBudVhvipGJj8AC8 FRlXdYX7tV8mFzQNrdpqMzFc8gjzwfBgiOIR9qYG+hrWeukGhKjk5JJ7lsHYNOgg0qHbHC K1rAQyjg5ag8FatiYRpJ7HMLiNwo410NGyjlfBhLUNsVRcNmvs3vDCzkc4ulD1ZJgGenMJ lxrvnTxNzJj9hm5wLKQxl52H9Xc96Kpv/8UTckinU0X73k30O8fyTiONzXOJOw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3whb4Pdmz6dc for ; Mon, 20 Jul 2026 22:50:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 32137 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 22:50:23 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Abdelkader Boudih From: Adrian Chadd Subject: git: e7efe2f059a4 - main - firewire: remove deprecation notice from manual page List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e7efe2f059a474f8f8e14393713071761a633e65 Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 22:50:23 +0000 Message-Id: <6a5ea62f.32137.d944ae6@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=e7efe2f059a474f8f8e14393713071761a633e65 commit e7efe2f059a474f8f8e14393713071761a633e65 Author: Abdelkader Boudih AuthorDate: 2026-07-20 22:49:58 +0000 Commit: Adrian Chadd CommitDate: 2026-07-20 22:50:03 +0000 firewire: remove deprecation notice from manual page Reviewed by: ziaee, imp Differential Revision: https://reviews.freebsd.org/D58267 --- share/man/man4/firewire.4 | 5 ----- 1 file changed, 5 deletions(-) diff --git a/share/man/man4/firewire.4 b/share/man/man4/firewire.4 index a7253443b5cf..99d2b3ef96c6 100644 --- a/share/man/man4/firewire.4 +++ b/share/man/man4/firewire.4 @@ -49,11 +49,6 @@ module at boot time, place the following line in .Bd -literal -offset indent firewire_load="YES" .Ed -.Sh DEPRECATION NOTICE -The -.Nm -driver is slated to be removed prior to -.Fx 16.0 . .Sh DESCRIPTION .Fx provides machine-independent bus support and raw drivers for From nobody Tue Jul 21 02:26:53 2026 X-Original-To: dev-commits-src-main@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 4h41VQ1lWbz6lM2f for ; Tue, 21 Jul 2026 02:26:54 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h41VQ0tCCz3mvT for ; Tue, 21 Jul 2026 02:26:54 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784600814; 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=k6Iw5YOmRZdG+LBHEE7b84LgNYA8D5P349IKbxReHRk=; b=v8PTLtt34onc4RxS59njrK4Y5H3u4qeuNhTuc2q17IQWfyeftMmbTJpbEpxnr8IQ+JQjI/ hdW6eMuUYY+FikW6vqjucIQNpX1eRDbiA2WUxMuCvDkSGcSGLLBxCg09FNaZd6bynHVghb YDptdB/hZnnK/zPbe5dW3R4H47J8RYqgIcaf4kvptJReLJUCklj1E1izI3DAQY5gWG963S tJ/Yuf2H+oOwVeatFC+qojwBaWn9hL01mQc7VCQWjhGsT1Wh39MJ+a2bzlLVoidipUyQ/b rUYYmAgxVtognmyNXjaj+tp90ddEFO5ML2frZqAHttmmr54ozixTdz8CE1CqRQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784600814; a=rsa-sha256; cv=none; b=Jfm1BH8QeR40JC58ELMPAJEs9WKWzfy33fU2xcdDE09C5qbwOGgsnoKmlOOf9KC5TtNYtX s+gi0Ds0EzIiadtxd13j9te/ZB5qXxGJtaLBd/JtmsMi1G71ey+Io0fpc5JVz6NmVrgXh/ 8g3qSPg8qNdlKY8hNuCEw6Qn4ZuFxHwJYo+ZQhV7rLS7HH9VEIOGkVyoD89Qbt3SuIRxNS XfW+4BKsO/ZQcLwtyg6Khwu+a0yFSowlH6DaUIaDZIMp72bCA/WwN9DU3rzEha7DHmwp/g m9VwrnF3BFC/v6QRTyd32NBhEtqVsNKQk5Qy1bytnhQxlyj6srEg28Mt7BhwNQ== 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=1784600814; 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=k6Iw5YOmRZdG+LBHEE7b84LgNYA8D5P349IKbxReHRk=; b=bGLUJSdknzeXxB+OLt0LrKmNlzfvE6B1ReWSMSFj6A6rjAmtouwf1EH17D2YpaxSV0+5IB w7eITjkeQaMq0EsEJpj/0NJZIbFCxMIXc315h0PMFOMLG1oAqBT4DS7GNwlzflBX5k695V zmF240UARrksqtvw3cYQqjPKAoQGF6JBF4Qh3XfqluWYCHJzRTVgITJsUTd/vfbquEtdS7 5bbJRuyngZUdPx8+UUv/V40VXfEkyrS3reTB1voyEoaC7dBN3KytR7ZAq4xO+EpV3WAT5/ m/z8KvIYO/jOz2k2KsnwHypqcykXXi5cVHNW2lTa10CMyEkTlWeqsJXvjXav9Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h41VP62V8zDJM for ; Tue, 21 Jul 2026 02:26:53 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 21c87 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 02:26:53 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Olivier Certner Subject: git: e8dec0038bd9 - main - sched_4bsd: Fix conflating priority of differently-niced CPU-bound threads List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e8dec0038bd95f6d940afa19b4d101f466280fd6 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 02:26:53 +0000 Message-Id: <6a5ed8ed.21c87.393dab61@gitrepo.freebsd.org> The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=e8dec0038bd95f6d940afa19b4d101f466280fd6 commit e8dec0038bd95f6d940afa19b4d101f466280fd6 Author: Olivier Certner AuthorDate: 2026-06-13 13:09:42 +0000 Commit: Olivier Certner CommitDate: 2026-07-21 02:24:10 +0000 sched_4bsd: Fix conflating priority of differently-niced CPU-bound threads We introduced (PRI_MAX_TIMESHARE - PRI_MIN_TIMESHARE) as part of ESTCPULIM() in commit eebc148f25c3 ("sched_4bsd: ESTCPULIM(): Allow any value in the timeshare range") in order to use more than a fixed number (40) of all the available priority levels in the timeshare range (136 before the 256-queue runqueue work, 224 now) to take into account the number of ticks a thread has run ('ts_estcpu'). In the computation of a new thread's priority (resetpriority()), in addition to the "ticks running" contribution, the final priority also includes a "nice" value contribution. The final value is clamped into the [PRI_MIN_TIMESHARE; PRI_MAX_TRIMESHARE] range. Problem is that the new "ticks running" contribution now can lead to a computed priority value that exceeds PRI_MAX_TRIMESHARE, and is thus finally clamped to PRI_MAX_TIMESHARE, which becomes an alias for all out-of-bound values. In particular, this can conflate CPU-hungry threads. With at least two of them competing on the same CPU, with an increase of 'ts_estcpu' of ~64 per second (stathz being 127) and the minimal decay of 4/5 (load average 2 or more), both threads will easily reach the current clamping of 224 (+ PRI_MIN_TIMESHARE), and be considered indifferently by the scheduler. Fix this problem by ensuring that the maximum contribution of 'ts_estcpu' (via ESTCPULIM()) cannot exceed the timeshare range of priorities when the nice contribution is added to it, so the nice contribution continues to have an effect on CPU-bound threads. Introduction of the nice term in ESTCPULIM() (then NICE_WEIGHT * PRIO_MAX) has been done in commit bdf423572ee3 ("Scheduler fixes equivalent to the ones logged in the following NetBSD commit...") and does not appear to have made any real sense even then. Fixes: bdf423572ee3 ("Scheduler fixes equivalent to the ones logged in the following NetBSD commit...") Fixes: eebc148f25c3 ("sched_4bsd: ESTCPULIM(): Allow any value in the timeshare range") MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57826 --- sys/kern/sched_4bsd.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/sys/kern/sched_4bsd.c b/sys/kern/sched_4bsd.c index 53e32026029d..f86dcda218a4 100644 --- a/sys/kern/sched_4bsd.c +++ b/sys/kern/sched_4bsd.c @@ -78,8 +78,8 @@ #define NICE_WEIGHT 1 /* Priorities per nice level. */ #define ESTCPULIM(e) \ min((e), INVERSE_ESTCPU_WEIGHT * \ - (NICE_WEIGHT * (PRIO_MAX - PRIO_MIN) + \ - PRI_MAX_TIMESHARE - PRI_MIN_TIMESHARE) \ + (PRI_MAX_TIMESHARE - PRI_MIN_TIMESHARE - \ + (PRIO_MAX - PRIO_MIN) * NICE_WEIGHT) \ + INVERSE_ESTCPU_WEIGHT - 1) #define TS_NAME_LEN (MAXCOMLEN + sizeof(" td ") + sizeof(__XSTRING(UINT_MAX))) @@ -596,11 +596,13 @@ resetpriority(struct thread *td) if (td->td_pri_class != PRI_TIMESHARE) return; - newpriority = PUSER + + newpriority = PRI_MIN_TIMESHARE + td_get_sched(td)->ts_estcpu / INVERSE_ESTCPU_WEIGHT + NICE_WEIGHT * (td->td_proc->p_nice - PRIO_MIN); - newpriority = min(max(newpriority, PRI_MIN_TIMESHARE), - PRI_MAX_TIMESHARE); + KASSERT(PRI_MIN_TIMESHARE <= newpriority && + newpriority <= PRI_MAX_TIMESHARE, + ("Out-of-bounds priority, probably 'ts_estcpu' not clamped " + "correctly, see ESTCPULIM()")); sched_user_prio(td, newpriority); } From nobody Tue Jul 21 02:26:54 2026 X-Original-To: dev-commits-src-main@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 4h41VR33N8z6lLxS for ; Tue, 21 Jul 2026 02:26: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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h41VR1w1Jz3n7Q for ; Tue, 21 Jul 2026 02:26:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784600815; 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=88D7ncFYMA1Ucif+2S1aHjzeyzOvoYP13ND0hu3jmcI=; b=V3lmxmBwipVBRhAKqVuynZrWXjwNjhCNvDRIxtrQ7SW3lEXbAx86r4QFuP3csGKpq80ixC Xxs4RB5sQLgnjT/S5KfG+vRGia6tRYOK+z2KPA/rjCnoDmWam8lRCdiKxu7l2L8x75fjix OJGZ50fVFgcq7WP1JPxfLr8F5ZI3MtaXynSIzMVafRrdgqQNV7QPcZwjd23yp6vvaaLaR5 4MCu7KiJk69MCLnY95Fc7ti6i67X2UPAxzlKgEKTcj/wYYqyGhZRL7YGHidLqLTJ5IU4k/ CkZ3OlBirMSlrtW0w2G1WbG+/N/r+wJmnrVwKQ171MgJvLSdMo9AcA895tJpLQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784600815; a=rsa-sha256; cv=none; b=E1Ehl9UnTt1NnsNbClYmB7zA+XWMf7e1vCABsHhB2Ny9G1dGgqDIowOTTsMAnk2cWKm1+h L778yko7+RzGW68DBEpcqg7GFuRamf56YVWfBLShD8eArjsWZFE3Ph1cajQleNLCGDxMeS 6HjVDSe7Ld49vtvSv3Ou+sWXGIiQle2p6y0Sx0xTrdiMySgWloOQc830rhahaAoUnDMV7J ujX4M2z90FZQfWit//Hho3CaI+ki9UXe5GptvcaPnKcl+1YYxLcS/j6UmnZAG4/i8Shc1y yRxm8kLCY7c6iJle6DnVKCAXdSTYqA3kHx4P+G6JkvA4BBmomoKP90S6XiuiPw== 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=1784600815; 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=88D7ncFYMA1Ucif+2S1aHjzeyzOvoYP13ND0hu3jmcI=; b=Ef8I7CvtNfn3/k9QfEFtdiynVBoggJJskKpmM8H0cBLjYqECKVNvgb8mxGeFSL3PR0DSRo akn4Nid5RqW5fDfJHMfWRrc8oginbEAzM8K8QM81dV1VMdLM3aes2vs/+UlXubk/oAAySZ 0q9FB+BnYlzYx/8MK16fr7m30bl8mj1OYZDCMBCrBgfRURcVytSggUjYlVrzsAHcNAUiXl JQe+gMgFa4Bl35O25ds0ReqEBzRxuH+kj/vnPNF/9I8C+T0QlL+E3PU+iZiOZ4FSnRO/rP r5IdyawEuXFLjL4y7ek7FlS2HxAVInTirPusoLn91mB/dxQVpjpIqn14MWXC+Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h41VQ6sc0zDJN for ; Tue, 21 Jul 2026 02:26:54 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 21c4f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 02:26:54 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Olivier Certner Subject: git: 5217b4a728dc - main - sched_4bsd: Remove obsolete SMP scaling for ticks per priority level List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5217b4a728dc9fd72bc844c2a6bb30a2a28119c4 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 02:26:54 +0000 Message-Id: <6a5ed8ee.21c4f.3395bd77@gitrepo.freebsd.org> The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=5217b4a728dc9fd72bc844c2a6bb30a2a28119c4 commit 5217b4a728dc9fd72bc844c2a6bb30a2a28119c4 Author: Olivier Certner AuthorDate: 2026-06-13 14:19:18 +0000 Commit: Olivier Certner CommitDate: 2026-07-21 02:24:17 +0000 sched_4bsd: Remove obsolete SMP scaling for ticks per priority level The INVERSE_ESTCPU_WEIGHT scaling had been introduced by commit b698380f33ef ("Quick fix for scaling of statclock ticks in the SMP case. ...") to leave more discrimination room for multiple CPUs possibly adding their ticks to the same 'struct ksegrp' (but also slightly changing how CPU hogs are penalized). Then, commit 8460a577a4b4 ("Make KSE a kernel option, ...") introduced the current thread-based code, where tick accounting is only done on the current thread, which renders this trick obsolete on !KSE. Finally, when KSE was removed, the trick became generally obsolete. The trick is actually even harmful because it changes the intended behavior of priorizing more the CPUs that use the less ticks (and so, impairs boosting "interactive" processes). Remove it now. Clamping of 'ts_estcpu' and its relation to the load-average-based decay may be re-examined later. Fixes: 8460a577a4b4 ("Make KSE a kernel option, ...") MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57827 --- sys/kern/sched_4bsd.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/sys/kern/sched_4bsd.c b/sys/kern/sched_4bsd.c index f86dcda218a4..98c5cd8836a8 100644 --- a/sys/kern/sched_4bsd.c +++ b/sys/kern/sched_4bsd.c @@ -70,11 +70,7 @@ * INVERSE_ESTCPU_WEIGHT is only suitable for statclock() frequencies in * the range 100-256 Hz (approximately). */ -#ifdef SMP -#define INVERSE_ESTCPU_WEIGHT (8 * smp_cpus) -#else #define INVERSE_ESTCPU_WEIGHT 8 /* 1 / (priorities per estcpu level). */ -#endif #define NICE_WEIGHT 1 /* Priorities per nice level. */ #define ESTCPULIM(e) \ min((e), INVERSE_ESTCPU_WEIGHT * \ From nobody Tue Jul 21 02:26:55 2026 X-Original-To: dev-commits-src-main@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 4h41VS3Qyjz6lLWp for ; Tue, 21 Jul 2026 02:26:56 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h41VS1Mxwz3mvV for ; Tue, 21 Jul 2026 02:26:56 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784600816; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Z6vWo2KK1ijbAaDVaZbeEnYAIjpunybvAszhGtVqa/U=; b=LWQCyT8yM0edzeplHB6FdwPovLyiEVVoKzmtvT2XZZcDpOvhaTtuNV5xL4nNhXUOLKnIXr VgtmOeqR12BpK4VINXW9G6N7mOzmGShBcPMkQLzFaRYzdwDz/MHeQEgNkA56oeW5kMJLf6 p7QBtuN/NExHugdk8wvNHD//xlkK5Sw3+Yv4CGIhzIxT7JhSEyVvHvcwWnc3YUTuJ7tmlJ by0o2DA7DmhnCpTUFZ0GVhTNMQaoSlbrC1lxcc+S9RsgM21xE644UyDaO/vnISFNDmqq0R LN689Ug/n1x1R7L+c8yYoq2ZJifK9I290SXLvG7Ohr/WW9wLO/xRTxKFvOQFZA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784600816; a=rsa-sha256; cv=none; b=PG2QLn/1DSMpnbNMqETSVdh4fTgxbw5H5ns4p6cWx6kqwEqhD0Fi/CKmYZqa15atCW/qrV dbh/Dl4o1YkJpOOWaRY6k+Ht64Ac133Y4Hu0MvQeXcCCVzCvr8akc75040QxJ6V4GcNRzg ugygElhljwAdb0xs+jn0MDNRISEcZmRs2sZlzb6IRBFfp6eVKGmLMH7eibc+n3YHoiyVAV 9C19h9B0maSNi8Jn8cCA1Pw4ceIULOwV79SN9qD44PQmEPfhIeqop2V3n49e1JyfpZ5mvN w22cSyXHB64DGg245C4KFcJFyjxvNlMa2sZ0jmFupy6Qw/O4qrWnmXnvuFkdpQ== 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=1784600816; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Z6vWo2KK1ijbAaDVaZbeEnYAIjpunybvAszhGtVqa/U=; b=qM8L4ZOWLvsntX/Vlaj6CMPXLhcGOVmqxkBph+e1WfJGwb8VaiWD6JCqyl0my4CG+1ulMH 6l05JDToCiVcpDMcm04DMURQCipQPWKwmc4e0C24jnL3F+fdBf9+f0A3WligHcjkNF3OFn q20G+uEBVKsKB3FuOICJOzk9Yv2OhdLkre/2WlD8+mHVFzB4qAlzRHev+lJ/nrH9uFXjCJ nfHyRhsIWwvqNCAPAyXC2htki4boFUlZfvsHRKllV7cZ8+9RytKDtIG2aMGPyOp1IPCQS5 7HN5SznhRBmPRMEpANwvO4rfX1obTcqgFAS4kG1ESrxbrcyE6OagmDnn0u68aA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h41VS02PlzD3v for ; Tue, 21 Jul 2026 02:26:56 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1fbc7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 02:26:55 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Minsoo Choo From: Olivier Certner Subject: git: 26ef66653448 - main - sched_4bsd: Rename the global runqueue List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 26ef6665344823f405c7fafba5baaacd9baacf72 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 02:26:55 +0000 Message-Id: <6a5ed8ef.1fbc7.3173dc7f@gitrepo.freebsd.org> The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=26ef6665344823f405c7fafba5baaacd9baacf72 commit 26ef6665344823f405c7fafba5baaacd9baacf72 Author: Minsoo Choo AuthorDate: 2026-07-20 02:34:13 +0000 Commit: Olivier Certner CommitDate: 2026-07-21 02:24:18 +0000 sched_4bsd: Rename the global runqueue In an upcoming change whose purpose is to stop having 4BSD always allocate MAXCPU runqueues, wasting space on most machines, 'struct td_sched' will store the CPU ID to which a thread is bound/pinned instead of a pointer to the corresponding runqueue. As a consequence, existing functions manipulating a thread's runqueue will need to point to the inferred runqueue through a local variable. The name 'runq' is the ideal one for these local variables, but before this change it designated the global runqueue, also causing unnecessary ambiguity. Thus, rename the global runqueue to the more explicit 'runq_global'. Arguably, this should have been performed as part of commit e17c57b14ba9 ("- Implement cpu pinning and binding. (...)"). No functional change (intended). [olce: Massaged the commit message. Tested with source builds.] Suggested by: olce Reviewed by: olce Tested by: olce MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58065 --- sys/kern/sched_4bsd.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/sys/kern/sched_4bsd.c b/sys/kern/sched_4bsd.c index 98c5cd8836a8..11dc2fbcec5b 100644 --- a/sys/kern/sched_4bsd.c +++ b/sys/kern/sched_4bsd.c @@ -110,7 +110,7 @@ struct td_sched { #define TSF_AFFINITY 0x0001 /* Has a non-"full" CPU set. */ #define SKE_RUNQ_PCPU(ts) \ - ((ts)->ts_runq != 0 && (ts)->ts_runq != &runq) + ((ts)->ts_runq != 0 && (ts)->ts_runq != &runq_global) #define THREAD_CAN_SCHED(td, cpu) \ CPU_ISSET((cpu), &(td)->td_cpuset->cs_mask) @@ -154,7 +154,7 @@ sched_4bsd_schedcpu(void) /* * Global run queue. */ -static struct runq runq; +static struct runq runq_global; #ifdef SMP /* @@ -182,7 +182,7 @@ setup_runqs(void) runq_init(&runq_pcpu[i]); #endif - runq_init(&runq); + runq_init(&runq_global); } static int @@ -682,10 +682,10 @@ static bool sched_4bsd_runnable(void) { #ifdef SMP - return (runq_not_empty(&runq) || + return (runq_not_empty(&runq_global) || runq_not_empty(&runq_pcpu[PCPU_GET(cpuid)])); #else - return (runq_not_empty(&runq)); + return (runq_not_empty(&runq_global)); #endif } @@ -1371,7 +1371,7 @@ sched_4bsd_add(struct thread *td, int flags) "sched_add: adding td_sched:%p (td:%p) to gbl runq", ts, td); cpu = NOCPU; - ts->ts_runq = &runq; + ts->ts_runq = &runq_global; } if ((td->td_flags & TDF_NOLOAD) == 0) @@ -1435,7 +1435,7 @@ sched_4bsd_add(struct thread *td, int flags) } TD_SET_RUNQ(td); CTR2(KTR_RUNQ, "sched_add: adding td_sched:%p (td:%p) to runq", ts, td); - ts->ts_runq = &runq; + ts->ts_runq = &runq_global; if ((td->td_flags & TDF_NOLOAD) == 0) sched_load_add(); @@ -1466,7 +1466,7 @@ sched_4bsd_rem(struct thread *td) if ((td->td_flags & TDF_NOLOAD) == 0) sched_load_rem(); #ifdef SMP - if (ts->ts_runq != &runq) + if (ts->ts_runq != &runq_global) runq_length[ts->ts_runq - runq_pcpu]--; #endif runq_remove(ts->ts_runq, td); @@ -1481,14 +1481,14 @@ static struct thread * sched_4bsd_choose(void) { struct thread *td; - struct runq *rq; + struct runq *runq; mtx_assert(&sched_lock, MA_OWNED); #ifdef SMP struct thread *tdcpu; - rq = &runq; - td = runq_choose_fuzz(&runq, runq_fuzz); + runq = &runq_global; + td = runq_choose_fuzz(&runq_global, runq_fuzz); tdcpu = runq_choose(&runq_pcpu[PCPU_GET(cpuid)]); if (td == NULL || @@ -1497,14 +1497,14 @@ sched_4bsd_choose(void) CTR2(KTR_RUNQ, "choosing td %p from pcpu runq %d", tdcpu, PCPU_GET(cpuid)); td = tdcpu; - rq = &runq_pcpu[PCPU_GET(cpuid)]; + runq = &runq_pcpu[PCPU_GET(cpuid)]; } else { CTR1(KTR_RUNQ, "choosing td_sched %p from main runq", td); } #else - rq = &runq; - td = runq_choose(&runq); + runq = &runq_global; + td = runq_choose(&runq_global); #endif if (td) { @@ -1512,7 +1512,7 @@ sched_4bsd_choose(void) if (td == tdcpu) runq_length[PCPU_GET(cpuid)]--; #endif - runq_remove(rq, td); + runq_remove(runq, td); td->td_flags |= TDF_DIDRUN; KASSERT(td->td_flags & TDF_INMEM, @@ -1794,7 +1794,7 @@ sched_4bsd_affinity(struct thread *td) * If we are on a per-CPU runqueue that is in the set, * then nothing needs to be done. */ - if (ts->ts_runq != &runq && + if (ts->ts_runq != &runq_global && THREAD_CAN_SCHED(td, ts->ts_runq - runq_pcpu)) return; From nobody Tue Jul 21 02:26:57 2026 X-Original-To: dev-commits-src-main@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 4h41VT4Bc4z6lLtv for ; Tue, 21 Jul 2026 02:26:57 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h41VT1Rzqz3mjM for ; Tue, 21 Jul 2026 02:26:57 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784600817; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=iUROfVqZeJlBPsQ9cSqVMybxh+1P7BxDTwEBfwFIsM4=; b=nFBThErheueQUTXPFH60QNkwXNZ2wMc0I83m587P+nbRrPgJWUA+kdnUiL9krt7YzLjdt8 Ggv3Ow/8Pjw+OhWeXu8bbPQOOEttFEVD4k4dMaOfknV8nMBxWqqmzZEV3ehffTPsV2nHeX Uf4aqzg/nYfVkgYcPwjdBfHyOEUZUVPoNLo21tUeJ8I35P6bQSX/ADpj/lozDKr2JIK7l+ gt2Vh9hDXoD8fnruZCNpk6bjRq5WJh8tId6mb9Hgp8I9XKCsMVpFmC8EAmI27re38iE6FP cRixAJHkx/wALgM3+ickBpma3QBeE/Tcrc+IzXtF9ZQiCLoQikWee/z0u+tjKg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784600817; a=rsa-sha256; cv=none; b=fRj4ohkfzx5SqzKqKZq5S6+8+m2bnRe1mqtj7EcorA9kVKCApn4Lcg/ti0Ars3lOdnklYv ve1D3LidRrbLY1ySi7UWkkEhazvSvUVq4VKgtthq6q1VJxQGSdF0J6GkSjsYCtRxCz0MfJ yHn5FU5p5ZTILeukszEeRwrkjgvgQ9+L0gEfp6qEiVq/0jUNVfWdeJSbI8Gq70DUFUBzgc mOHPAvupLY1O2YxuyDM2nVB+qhS3d3KC4bcxIW7aEKGQHRFXijLnHOKBA6eQQn0odVLxqH xt5LNNxAJJR5i1HxC+FfknfMKy7+AWvGpsuRgWi/44vTyPeyC+jqEPUwhzbvcQ== 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=1784600817; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=iUROfVqZeJlBPsQ9cSqVMybxh+1P7BxDTwEBfwFIsM4=; b=CskLSEWE7NewjVABkcnw1YjsWVJBkINwm8B3H7VvJHGfYsT1czSL6zcQf+f+EG5ZxkRMJY n/+/yXGDZXHgLik/jWWZpzNst1HYS9BnWjaa3hvwRfiK3yUdBuhnv79s1YWErKaxvdy87K gYktcZWzyPNY5PJ5EQyNOiXAXRZtSEPeSSsJqEyKMGwxwTo8zzkMNxH14ZS0zS8eF4JOS0 18D90Nq1HCJcu9oWJhSK7R68DgaqdFwU2vNhfV4bL9/TWYObweAFYW8GTXsjkRw19P2iwz wTSNRwFrOD2MwszNkXgGdU/QFYb/NMWwuYubISfEHjX1tB24wWtVTIpHu9fbZg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h41VT0V0jzD6r for ; Tue, 21 Jul 2026 02:26:57 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 21412 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 02:26:57 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Minsoo Choo From: Olivier Certner Subject: git: deddfa3db956 - main - sched_4bsd: Allocate runqueues only for present CPUs List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: deddfa3db956ebed584a859010a10b6d9a4e2e5d Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 02:26:57 +0000 Message-Id: <6a5ed8f1.21412.5ac576b6@gitrepo.freebsd.org> The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=deddfa3db956ebed584a859010a10b6d9a4e2e5d commit deddfa3db956ebed584a859010a10b6d9a4e2e5d Author: Minsoo Choo AuthorDate: 2026-07-20 02:37:56 +0000 Commit: Olivier Certner CommitDate: 2026-07-21 02:24:18 +0000 sched_4bsd: Allocate runqueues only for present CPUs 4BSD has been allocating an array of MAXCPU runqueues, runq_pcpu[], instead of one runqueue per actually present CPU. On amd64, MAXCPU is 1024 and 'struct runq' is 4128 bytes, causing runq_pcpu[] to take more than 4 MiB of memory. On the vast majority of current systems, which have at most 32 cores with SMT, this is a waste of memory. Besides providing per-CPU runqueues, runq_pcpu[] has also been used to determine the CPU ID of a given thread's associated runqueue through pointer arithmetic. Since per-CPU structures are only allocated for present CPUs, in order to save space, move the runqueues to per-CPU fields and, for each thread ('struct ts_sched'), replace its runqueue pointer by the CPU ID of the runqueue it is in (new 'ts_rqcpu' field). Set the thread's CPU ID to the special NOCPU value when it is running on the global runqueue. Drop the SKE_RUNQ_PCPU() macro as it is now simply equivalent to 'ts_rqcpu != NOCPU'. Introduce the TS_RUNQ_PTR() macro to get a pointer to the thread's runqueue, which must be passed to runq_add() and runq_remove(). [olce: Massaged the commit message. Fixed an inverted KASSERT(). Tested with source builds.] Reviewed by: olce Tested by: olce MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58000 --- sys/kern/sched_4bsd.c | 57 +++++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/sys/kern/sched_4bsd.c b/sys/kern/sched_4bsd.c index 11dc2fbcec5b..9c3a8821e2c9 100644 --- a/sys/kern/sched_4bsd.c +++ b/sys/kern/sched_4bsd.c @@ -93,7 +93,7 @@ struct td_sched { int ts_slptime; /* Seconds !RUNNING. */ int ts_slice; /* Remaining part of time slice. */ int ts_flags; - struct runq *ts_runq; /* runq the thread is currently on */ + int ts_rqcpu; /* That CPU's runq or NOCPU => global */ #ifdef KTR char ts_name[TS_NAME_LEN]; #endif @@ -109,8 +109,12 @@ struct td_sched { /* flags kept in ts_flags */ #define TSF_AFFINITY 0x0001 /* Has a non-"full" CPU set. */ -#define SKE_RUNQ_PCPU(ts) \ - ((ts)->ts_runq != 0 && (ts)->ts_runq != &runq_global) +#ifdef SMP +#define TS_RUNQ_PTR(ts) ((ts)->ts_rqcpu == NOCPU ? \ + (&runq_global) : (DPCPU_ID_PTR((ts)->ts_rqcpu, runq_pcpu))) +#else +#define TS_RUNQ_PTR(ts) (&runq_global) +#endif #define THREAD_CAN_SCHED(td, cpu) \ CPU_ISSET((cpu), &(td)->td_cpuset->cs_mask) @@ -160,8 +164,8 @@ static struct runq runq_global; /* * Per-CPU run queues */ -static struct runq runq_pcpu[MAXCPU]; -long runq_length[MAXCPU]; +DPCPU_DEFINE_STATIC(struct runq, runq_pcpu); +DPCPU_DEFINE_STATIC(long, runq_length); static cpuset_t idle_cpus_mask; #endif @@ -176,10 +180,10 @@ static void setup_runqs(void) { #ifdef SMP - int i; + int cpu; - for (i = 0; i < MAXCPU; ++i) - runq_init(&runq_pcpu[i]); + CPU_FOREACH(cpu) + runq_init(DPCPU_ID_PTR(cpu, runq_pcpu)); #endif runq_init(&runq_global); @@ -683,7 +687,7 @@ sched_4bsd_runnable(void) { #ifdef SMP return (runq_not_empty(&runq_global) || - runq_not_empty(&runq_pcpu[PCPU_GET(cpuid)])); + runq_not_empty(DPCPU_PTR(runq_pcpu))); #else return (runq_not_empty(&runq_global)); #endif @@ -1291,7 +1295,7 @@ sched_pickcpu(struct thread *td) if (best == NOCPU) best = cpu; - else if (runq_length[cpu] < runq_length[best]) + else if (DPCPU_ID_GET(cpu, runq_length) < DPCPU_ID_GET(best, runq_length)) best = cpu; } KASSERT(best != NOCPU, ("no valid CPUs")); @@ -1355,13 +1359,13 @@ sched_4bsd_add(struct thread *td, int flags) cpu = td->td_lastcpu; else if (td->td_flags & TDF_BOUND) { /* Find CPU from bound runq. */ - KASSERT(SKE_RUNQ_PCPU(ts), + KASSERT(ts->ts_rqcpu != NOCPU, ("sched_add: bound td_sched not on cpu runq")); - cpu = ts->ts_runq - &runq_pcpu[0]; + cpu = ts->ts_rqcpu; } else /* Find a valid CPU for our cpuset */ cpu = sched_pickcpu(td); - ts->ts_runq = &runq_pcpu[cpu]; + ts->ts_rqcpu = cpu; single_cpu = 1; CTR3(KTR_RUNQ, "sched_add: Put td_sched:%p(td:%p) on cpu%d runq", ts, td, @@ -1371,14 +1375,14 @@ sched_4bsd_add(struct thread *td, int flags) "sched_add: adding td_sched:%p (td:%p) to gbl runq", ts, td); cpu = NOCPU; - ts->ts_runq = &runq_global; + ts->ts_rqcpu = NOCPU; } if ((td->td_flags & TDF_NOLOAD) == 0) sched_load_add(); - runq_add(ts->ts_runq, td, flags); + runq_add(TS_RUNQ_PTR(ts), td, flags); if (cpu != NOCPU) - runq_length[cpu]++; + (*DPCPU_ID_PTR(cpu, runq_length))++; cpuid = PCPU_GET(cpuid); if (single_cpu && cpu != cpuid) { @@ -1435,11 +1439,11 @@ sched_4bsd_add(struct thread *td, int flags) } TD_SET_RUNQ(td); CTR2(KTR_RUNQ, "sched_add: adding td_sched:%p (td:%p) to runq", ts, td); - ts->ts_runq = &runq_global; + ts->ts_rqcpu = NOCPU; if ((td->td_flags & TDF_NOLOAD) == 0) sched_load_add(); - runq_add(ts->ts_runq, td, flags); + runq_add(TS_RUNQ_PTR(ts), td, flags); if (!maybe_preempt(td)) maybe_resched(td); if ((flags & SRQ_HOLDTD) == 0) @@ -1466,10 +1470,10 @@ sched_4bsd_rem(struct thread *td) if ((td->td_flags & TDF_NOLOAD) == 0) sched_load_rem(); #ifdef SMP - if (ts->ts_runq != &runq_global) - runq_length[ts->ts_runq - runq_pcpu]--; + if (ts->ts_rqcpu != NOCPU) + (*DPCPU_ID_PTR(ts->ts_rqcpu, runq_length))--; #endif - runq_remove(ts->ts_runq, td); + runq_remove(TS_RUNQ_PTR(ts), td); TD_SET_CAN_RUN(td); } @@ -1489,7 +1493,7 @@ sched_4bsd_choose(void) runq = &runq_global; td = runq_choose_fuzz(&runq_global, runq_fuzz); - tdcpu = runq_choose(&runq_pcpu[PCPU_GET(cpuid)]); + tdcpu = runq_choose(DPCPU_PTR(runq_pcpu)); if (td == NULL || (tdcpu != NULL && @@ -1497,7 +1501,7 @@ sched_4bsd_choose(void) CTR2(KTR_RUNQ, "choosing td %p from pcpu runq %d", tdcpu, PCPU_GET(cpuid)); td = tdcpu; - runq = &runq_pcpu[PCPU_GET(cpuid)]; + runq = DPCPU_PTR(runq_pcpu); } else { CTR1(KTR_RUNQ, "choosing td_sched %p from main runq", td); } @@ -1510,7 +1514,7 @@ sched_4bsd_choose(void) if (td) { #ifdef SMP if (td == tdcpu) - runq_length[PCPU_GET(cpuid)]--; + (*DPCPU_PTR(runq_length))--; #endif runq_remove(runq, td); td->td_flags |= TDF_DIDRUN; @@ -1561,7 +1565,7 @@ sched_4bsd_bind(struct thread *td, int cpu) td->td_flags |= TDF_BOUND; #ifdef SMP - ts->ts_runq = &runq_pcpu[cpu]; + ts->ts_rqcpu = cpu; if (PCPU_GET(cpuid) == cpu) return; @@ -1794,8 +1798,7 @@ sched_4bsd_affinity(struct thread *td) * If we are on a per-CPU runqueue that is in the set, * then nothing needs to be done. */ - if (ts->ts_runq != &runq_global && - THREAD_CAN_SCHED(td, ts->ts_runq - runq_pcpu)) + if (ts->ts_rqcpu != NOCPU && THREAD_CAN_SCHED(td, ts->ts_rqcpu)) return; /* Put this thread on a valid per-CPU runqueue. */ From nobody Tue Jul 21 02:58:49 2026 X-Original-To: dev-commits-src-main@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 4h42CG2FMYz6lP9T for ; Tue, 21 Jul 2026 02:58:50 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h42CG1C5zz3rfK for ; Tue, 21 Jul 2026 02:58:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784602730; 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=rG3ocdQeziJ3y9jZu33nUvW72FoOFu0OTuxXyxyQ2bw=; b=y0B4FgHZ4c3ACa1NJ3TaYGUJ2fsDHOi1OoVpVzm/bjLuEgcLeZ11yVsualDw99v0+Nh7bu 1QKvwyKQJno+SgQIbwekKTaFpkI6pnbYB/gyvnDMtkum4UYM9JhZksGaw4caKFFP89BuNI wBYYJmKYm1koZ7VqGu5JP4dZ4kmnJi+wyMHunCeflDQX0ylNOvB5p3EUISPQUoz6M4yZv1 yENQSd2eTiXaOtD89/RpNV9xYWRDQp0fe0lkQNsI3JbIP+iJnMto11/zuxa0howLqlm+Bo cvrV9qrAGg9UyyIOa2ryjVpwqkxt8Mweg/BkXaCX/FB10MmEIalS6T6gm36F/A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784602730; a=rsa-sha256; cv=none; b=EbYihyEzVDwKk08YYgy6boVnuGwF8ilkWFo1G3bmnTTicWkUs+fGIXCS5fjrrhTMrvunLC bQ6DQ8CsJVeqqbLWsMVuaN7Vz+treohyOp2F3P7/FEpXCHSFY23gWKXGk+JsSpwcx74mpK JXrKdsxdTawNeosOCE3gf3OSc/g8kfpFZXuiWhPxP0uFFrUXoDkNgaGhuVSCI4INrrBVOU u/okHfSfdjmnZ6UcaWTAaVh3bU0mQdrjv6FiGB/IJgcg6bvV0Yb0a1N1wEasOPGnr976SY KwEqekGLixD3N106PhOgXblHMEHj07O3hhO9/PysQ2EXdKd6BQq/HjW14PkYAQ== 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=1784602730; 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=rG3ocdQeziJ3y9jZu33nUvW72FoOFu0OTuxXyxyQ2bw=; b=iMXtsigt0/mp+4nIkmdMjo6XNLOneb0a+gQkEFjiGf7s0uzVTZ61IAWhAtjc2neaIDLb09 T1C8dpzAWCx4x1IFP33VkbCm7sXQRxcnt5piZxGfYGNOVdnyHB+dHKPcNZIqvvRjNt5Ns+ Ife0OL+E/hJ+yrzXrWKAqDJ+ZqGSZ09PJY0jrWZPHBxvd9zFSAfqvEXSFokSpxYhhNG087 bP2yDqExPjsi0Iu/6m/KiCK9A7Wv85d5Z0iqXPlT70MlmEzpy5g5eNhnwnnEZFYsupyGja JXwavbelUH2+4kH8xwjNJ0fL8+/78UctiaW/1nLMtnJT91kPMkpi8V2ttJTmTw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h42CF6swGzVLH for ; Tue, 21 Jul 2026 02:58:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 24c6d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 02:58:49 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: eca7b25c101a - main - kern/sys_ptrace: do not skip P2_PTRACEREQ wait for PT_CLEARSTEP/PT_GET_CHILDREN List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: eca7b25c101a240472c4c274e725bc294284c827 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 02:58:49 +0000 Message-Id: <6a5ee069.24c6d.55bce11@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=eca7b25c101a240472c4c274e725bc294284c827 commit eca7b25c101a240472c4c274e725bc294284c827 Author: Konstantin Belousov AuthorDate: 2026-07-20 22:09:59 +0000 Commit: Konstantin Belousov CommitDate: 2026-07-21 02:58:30 +0000 kern/sys_ptrace: do not skip P2_PTRACEREQ wait for PT_CLEARSTEP/PT_GET_CHILDREN Reported and reviewed by: markj Fixes: d3b7bbee9275 ("ptrace(2): add PT_GET_CHILDREN") Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58364 --- sys/kern/sys_process.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c index fc81ac4ca6c8..73e6b64e900b 100644 --- a/sys/kern/sys_process.c +++ b/sys/kern/sys_process.c @@ -1075,7 +1075,7 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) #ifdef COMPAT_FREEBSD32 int wrap32 = 0, safe = 0; #endif - bool proctree_locked, p2_req_set; + bool need_can_ptrace, proctree_locked, p2_req_set; curp = td->td_proc; proctree_locked = false; @@ -1162,6 +1162,7 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) /* * Permissions check */ + need_can_ptrace = true; switch (req) { case PT_TRACE_ME: /* @@ -1204,26 +1205,24 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) /* OK */ break; - case PT_CLEARSTEP: - /* Allow thread to clear single step for itself */ - if (td->td_tid == tid) - break; - goto default_check; - - case PT_GET_CHILDREN: - if (p == curp) - break; - goto default_check; - -default_check: default: + /* + * Allow thread to clear single step for itself. + * PT_GET_CHILDREN on itself does not need P_TRACED. + */ + if ((req == PT_CLEARSTEP && td->td_tid == tid) || + (req == PT_GET_CHILDREN && p == curp)) + need_can_ptrace = false; + /* * Check for ptrace eligibility before waiting for * holds to drain. */ - error = proc_can_ptrace(td, p); - if (error != 0) - goto fail; + if (need_can_ptrace) { + error = proc_can_ptrace(td, p); + if (error != 0) + goto fail; + } /* * Block parallel ptrace requests. Most important, do @@ -1241,7 +1240,7 @@ default_check: } if (error == 0 && td2->td_proc != p) error = ESRCH; - if (error == 0) + if (error == 0 && need_can_ptrace) error = proc_can_ptrace(td, p); if (error != 0) goto fail; From nobody Tue Jul 21 07:08:21 2026 X-Original-To: dev-commits-src-main@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 4h47lB0MHTz6ljd5 for ; Tue, 21 Jul 2026 07:08:22 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h47l94Kbpz3PHd for ; Tue, 21 Jul 2026 07:08:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784617701; 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=9dw1qjE/vifPyVOCiKPgbGf8nBWwA4XF+ZrqLHeBpCo=; b=N+QdwBT5w+UMHAU+X5V+IYK2w08VH5m+JGG4l008XFsjbZ7gmtYwT/gVTK7lDZuN8qYtT7 6iDXrFS0TnGYrk7sLXbrT+6AwPFlIBPm+nse5ufcRTsyMcnrGnFiBjv2bjeRCS/piQbiai kMescMyLXD1YxCpGX0jrr0ZFgAdDRcAOMgaVj2bxTYu6d8DBv4WPHH9kd0WFiqdLZ8s8dz IEd7YgWqHjtSP5JDes4MVQrCUb7oEpq+lds8O/lCsmCcOTAAgi36i0IoIied6ukSzRc0uE DMtTAC7DI4JvsWu1lyl3a8bzVSaDfUicK3bLbBtGijv29CMdtVmkT+sZ8HaEig== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784617701; a=rsa-sha256; cv=none; b=kE2HoyoYugR5dDJDddA7GJ1GSzutZrJBJ+JmQez2wfCsHWzzP1qjqzHwtvuFLzgety5pUm zuYYZ0Jq/nzIEnCOOQ/XHDWTexwv/HeXwIsCV5Qy3/KrPfXVuC9rRtKiKrns+KHwGbj1qO 6V+5uMW6CVxXLotVc0ijWSCkFBXOMezAZWsjRaA7aOyv94v5GA+LsXXRp8grti3KLlPkAW 0cR+QUK5zj+OCigebyTbW2SBEFKkotf1v8/eErF3ED9gjGdezhXGq4DmMV4vbNPdzABKVa p4ryJRdYy9WZyZ9VBxneA+j4CE7dIQM7AKi07gOlOat19/e9srsYnxFq3EqrrQ== 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=1784617701; 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=9dw1qjE/vifPyVOCiKPgbGf8nBWwA4XF+ZrqLHeBpCo=; b=eVr35YEx5CWV/WAqSarTkB+g9I7egl74wLkQ7eHt8NU4OQtDe4w2qiM6wAfLPycjoNgce0 wr9UpX0dlrarBybZy58JBsB0+LCAVPBh2WJ09zpfdAIKYOsPPqSzGX4acP5HgI6euRV9+w zIP6IwLPMMpYSYb4zJfdge8Zt1St1ioPoptEhynQQ2KklwNkR43eN2BgTWHNJggKEBPbUU hrs9AjlJb8zeq36lhGlloc/U52rbKXAoiYCha8+KJwfliLKAaNaKXLu+d2pqipsi+u9/UR 6NxBfAqPlK/RrCBrUxOT9e66VFdSMv4/0qf3r3d882zHxRxCd5BQIVwRU/meZg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h47l91dvPzdpp for ; Tue, 21 Jul 2026 07:08:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 44ba8 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 07:08:21 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Toomas Soome Subject: git: a0486017c2a4 - main - bhyve: check upper bounds for value from qsz List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: tsoome X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a0486017c2a453ce5e8b6e678a14e7d5577c1300 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 07:08:21 +0000 Message-Id: <6a5f1ae5.44ba8.3df9ddeb@gitrepo.freebsd.org> The branch main has been updated by tsoome: URL: https://cgit.FreeBSD.org/src/commit/?id=a0486017c2a453ce5e8b6e678a14e7d5577c1300 commit a0486017c2a453ce5e8b6e678a14e7d5577c1300 Author: Toomas Soome AuthorDate: 2026-07-21 06:33:38 +0000 Commit: Toomas Soome CommitDate: 2026-07-21 06:33:38 +0000 bhyve: check upper bounds for value from qsz The max_qentries in pci_nvme_softc is uint16_t and too large int may get truncated to invalid value. While there, use local declarations for val. Suggested by: Bill Sommerfeld Reviewed by: chuck Differential Revision: https://reviews.freebsd.org/D58293 --- usr.sbin/bhyve/pci_nvme.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr.sbin/bhyve/pci_nvme.c b/usr.sbin/bhyve/pci_nvme.c index 3656ee7a8d65..b2b9f0ff88a8 100644 --- a/usr.sbin/bhyve/pci_nvme.c +++ b/usr.sbin/bhyve/pci_nvme.c @@ -3185,7 +3185,7 @@ pci_nvme_parse_config(struct pci_nvme_softc *sc, nvlist_t *nvl) value = get_config_value_node(nvl, "qsz"); if (value != NULL) { val = atoi(value); - if (val <= 0) { + if (val <= 0 || val > UINT16_MAX) { EPRINTLN("nvme: Invalid qsz option %d", val); return (-1); } From nobody Tue Jul 21 07:53:48 2026 X-Original-To: dev-commits-src-main@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 4h48ld1Wpwz6lmt6 for ; Tue, 21 Jul 2026 07:53:49 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h48ld0v2Dz3TSF for ; Tue, 21 Jul 2026 07:53:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784620429; 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=PtserBwU/boM79s5vZQRT2IIoKoX0XUkdRUebjywIJw=; b=g2ORrFJW/TPc63Nsk5Gt2tfyYk+3YBA7iEQd9Pe7DZsJUSGZlAQbhP/rSQPhuYvRMcSmIA bHCGvYlZGPzPLY10kV0p8UayyVQ8xAIDF2WVxt9ql+9UoGiDDCSstWq+gBjIpDMgjD3q6/ WPECrjuMRfh3VM0mPO5stladV8bDlbGxGjD1gXNit/Dahfoo98Vq7ne35p1y6mnzidWsou IkkR8m26Io9n+Lah3F23f5G/D8tEPs45FO8tgflwlXfcupszP2kySDxyJV126o8u16yuom /FO7B7odZJgeQwarp8j2ZheHiEsSr/PgHMNh7UnIBe8FCnl7Tyjz6oDdPQXhtA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784620429; a=rsa-sha256; cv=none; b=oohTn5941k0APYXebe7nFPYl92NXiLT8+AZ6nwQNDgrZaD8uJ0Z1k5MA2YlEyFXWg0VXpg r7ZtYOjUNs2IEWFDLdJrm6K9tZcoSBnptYoY5I171HIVMpywIP+WJhUHahs6obVYOLm6C6 ix7dr031dhiyyTpzmqfY7YMnp5yVAkw3PX2a4vypT0xYchqLUnHE/jX0ymdfZhtst9m7Fs q4e1wKlnHxB5SyMqq/KKm2HL8AYHbfPY6jBm21R4+3VZUHqksIyGeU38dqz8Nd0aDYSXC7 2OzfaLdnwhViP0oIKL4WWFlXdU4ZY/HKvPfACkyatOmUHCkpkQP22Jz0w5LCMA== 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=1784620429; 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=PtserBwU/boM79s5vZQRT2IIoKoX0XUkdRUebjywIJw=; b=lWR4pN6b3f80Y60K2W9fsvJAtayIXYcXjdMl3aRWWrqRjJ6MJz84Hpsr/r1RDilNSarwgN 8PNB4dQ/Xd41qf+CLo2QoxRW28ODDNuS5R7FqlJrwvqCsWhukXR/NjhTPqZTiUvVLgzMIE MJTkcs7l4ZrPxLAxGAPcKeNu64/66v390aFzpE4LFW5PNkxfEt3EU0x4MtCyuvRCNVcMmd h21U+N69XeZ4G6g5bzDuf8S9aenv7oZywa346r3ml3yKOxkxn/u+kTZrwh+nJ1EMBOAiTw nL5rpVCoart2pauczyHo1We/Q5mFqN6OvjWI0Tnh25rCpmcJyuSTrsC6cz6Klg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h48lc74tqzg0b for ; Tue, 21 Jul 2026 07:53:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1907f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 07:53:48 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Peter Holm Subject: git: b11a605ebecc - main - stress2: Updated the exclude file List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pho X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b11a605ebecc913ce23b90d2a0c619d262368f5b Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 07:53:48 +0000 Message-Id: <6a5f258c.1907f.6e33c82f@gitrepo.freebsd.org> The branch main has been updated by pho: URL: https://cgit.FreeBSD.org/src/commit/?id=b11a605ebecc913ce23b90d2a0c619d262368f5b commit b11a605ebecc913ce23b90d2a0c619d262368f5b Author: Peter Holm AuthorDate: 2026-07-21 07:52:24 +0000 Commit: Peter Holm CommitDate: 2026-07-21 07:52:24 +0000 stress2: Updated the exclude file --- tools/test/stress2/misc/all.exclude | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/test/stress2/misc/all.exclude b/tools/test/stress2/misc/all.exclude index 9ec5bffde0f6..c21926c9865f 100644 --- a/tools/test/stress2/misc/all.exclude +++ b/tools/test/stress2/misc/all.exclude @@ -30,6 +30,8 @@ graid1_3.sh Hang seen 20250915 graid1_8.sh Known issue 20170909 graid1_9.sh panic: Bad effnlink 20180212 gunion.sh CAM stuk in vmwait 20251226 +ifconfig.sh https://people.freebsd.org/~pho/stress/log/log0666.txt 20260721 +ifconfig2.sh https://people.freebsd.org/~pho/stress/log/log0666.txt 20260721 lockf5.sh Spinning threads seen 20160718 maxvnodes2.sh https://people.freebsd.org/~pho/stress/log/log0083.txt 20210329 memguard.sh https://people.freebsd.org/~pho/stress/log/log0088.txt 20210402 @@ -50,7 +52,6 @@ oom2.sh Hang in pfault 20180324 overcommit2.sh CAM stuck in vmwait seen 20200112 pmc4.sh https://people.freebsd.org/~pho/stress/log/log0548.txt 20240904 pmc8.sh panic: [pmc,2749] (ri21, rc1) waiting too long for pmc to ... 20210621 -rename14.sh https://people.freebsd.org/~pho/stress/log/log0433.txt 20230409 sctp2.sh panic: Queues are not empty when handling SHUTDOWN-COMPLETE 20210211 sctp3.sh panic: Queues are not empty when handling SHUTDOWN-COMPLETE 20210211 signal.sh Timing issues. Needs fixing 20171116 @@ -72,7 +73,6 @@ syzkaller55.sh https://people.freebsd.org/~pho/stress/log/log0533.txt 20240702 syzkaller59.sh Page fault 20220625 syzkaller68.sh Can not unload zfs.ko after this test 20260206 syzkaller80.sh panic 20250711 -syzkaller82.sh panic: m_apply, length > size of mbuf chain 20250724 syzkaller85.sh panic: Assertion uio->uio_resid < 0 failed 20250928 syzkaller90.sh panic: general protection fault 20260318 syzkaller91.sh Kernel page fault with the following non-sleepable locks held 20260318 From nobody Tue Jul 21 07:53:50 2026 X-Original-To: dev-commits-src-main@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 4h48lf3KN2z6lmfT for ; Tue, 21 Jul 2026 07:53:50 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h48lf1j6Lz3TVX for ; Tue, 21 Jul 2026 07:53:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784620430; 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=ksD918DOTOX6Ac4NJ/qMCFcghqiTeg9GSgq2F07FPjQ=; b=Gguse/zIrGmB7MhNxLaQGAoWRd/uZfQwgS0Ru5XeX6TRnG+LEKAXrTIzZEmFEpFxMO/AzG kOXY2sTL0tSvp1FhC5UsZbR2IKFLqSHkkqxGmxj6+lPD4aAJCbtX98UJZPHXosUy/Z1aBP P49WFksZEJCgvI/jJwBPNhCLC6fpHbc216tZ16yDoG/WZLN//RDJQBbP1PsNvmJmgY4ZuN aunFAlabWVZflYm6gHlNkFmLH6P3jvLp5+yrDn9eH0NuxitWgF+ceLf+d3azxoEECGEJa/ hFuSb9O0iXO+ddHrp8Oa2E+pNCTh8bX9MMQxrqXWvA6ikYuxhyQBtme55F5Sgg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784620430; a=rsa-sha256; cv=none; b=FXRIcqNttokNeZmkSOZgUUgePyKwTlBsxZJ6Yp3v2Q+laRvT4hM0XUw2RjpfwBjcj3M+T/ QoIDxXBQg0I3YX4WnJ9b5mIpQhBnXoV/VSFoTV5ileA1eEojuIxIA0AdMKyU/67dQ9KfSt bv9nBLLOinTZ19u8MXcFYis8+qKR63RRH5sVeQf0ZAwW9aj5nCwVWdeptkzDqYGhhzCLxB VbZX7RCU2yEj8eCMuaMoY+0ZMQz+Ei4cNxeGPyUFvYMnkdWDnu6hKLGAoQRsHAyjHUomNd +wUCuGc1vyLbUn4Y/1ye6Y2Au85Hu1cRwvSs56h4Dklpy1zubygPnTE9CPuRSg== 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=1784620430; 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=ksD918DOTOX6Ac4NJ/qMCFcghqiTeg9GSgq2F07FPjQ=; b=yhp/NK40HawYzKWkGVf/Z7RAMnRNEo0EqoRVORDE6+888iBEhzJ1Sz8tx6l0jCTGx8emOg Zyu5/k4nDUomJsujaahi4k6Cpkpfrl4qnr0kOuNnf84PwjaOP+HnxYTHoMTvLc6qSbad2P af0ZIRcby1cCwY5t5H29nNifYSi9PzCx3BvF3/flbHpzGjPJkG06j5hSOjMGdWPdvrk/Uj 8J2b7Dzta0ycMX/DrO/Uqw44TsYxuSkhizLblh5oN9AmEZBJwOYv44H4MgXEPcJKkhB2o2 +OicApaSkmZ8+pBJ/Rj2xQUlqsaUloEhip0i1PVqIC/zG2Gjgi8qqXguxbmvmg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h48lf0Tm2zgfh for ; Tue, 21 Jul 2026 07:53:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1a075 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 07:53:50 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Peter Holm Subject: git: 4dc01fe70d92 - main - stress2: Added a comment List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pho X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4dc01fe70d9204d1cb635c76d59623c9e7c7776e Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 07:53:50 +0000 Message-Id: <6a5f258e.1a075.4f819b15@gitrepo.freebsd.org> The branch main has been updated by pho: URL: https://cgit.FreeBSD.org/src/commit/?id=4dc01fe70d9204d1cb635c76d59623c9e7c7776e commit 4dc01fe70d9204d1cb635c76d59623c9e7c7776e Author: Peter Holm AuthorDate: 2026-07-21 07:52:57 +0000 Commit: Peter Holm CommitDate: 2026-07-21 07:52:57 +0000 stress2: Added a comment --- tools/test/stress2/misc/rename18.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/test/stress2/misc/rename18.sh b/tools/test/stress2/misc/rename18.sh index f71e29bb1bef..a835cd10e65d 100755 --- a/tools/test/stress2/misc/rename18.sh +++ b/tools/test/stress2/misc/rename18.sh @@ -2,6 +2,7 @@ # Test scenario from: # Bug 295826 - kern_renameat() infinite loop +# D57453: Avoid infinite loop in renameat(2) set -u root=/root From nobody Tue Jul 21 07:53:51 2026 X-Original-To: dev-commits-src-main@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 4h48lh2GGlz6lmfW for ; Tue, 21 Jul 2026 07:53:52 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h48lg1tNNz3Td6 for ; Tue, 21 Jul 2026 07:53:51 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784620431; 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=0NYoxGiGRplhipaMeJ+Bohq+B0G/O0Emr9k1IJHSJhg=; b=fZPVEZ2rLD7r0H1jW2wRuGq/d8moheWdwTC0rCnCoOnWJKORWoBQpnlmSR3o044vs3tb1p BdZTZmXfl3chNUoaaSJ8b5/NGrcuifhxkdaHkxRZqGodOXXU7ljtmWA1TKRocqtgOpZ0sd CE/GTacSiplYJnqsO6Wg5Yl3W5VfqbcXvUlovvzA7qXefXQ7tKtVZy4cxGUrfdM+PwKAAF 4emhoyEcxOlPxhFs41c6GOAYVkYin+Tn3ov2U2YlsQJsV0nIiR5jeraD27J33qi+eEFMpE eVJjzgwxzg8HH0MRZL0vUKbLZuCTuuwZEVJQIosb03gnYAB5ES+UgYbd8MPoOQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784620431; a=rsa-sha256; cv=none; b=KTjFqBBmNQo3Vsn1MW0+lj05P3eFbmuyJ73uGH6LppQKARZbwA9IEQxoOe0sA7LCIppkWy IEsZeobqZe/s56Swtk5DvkjA7m3f2hCQ9U8C/0nZI0AANyLvPmGnEZWEaJfv+72N+qsTow lgotGp+Sh0Irm7AfIZEOFHc5Mm45kxfURFHAyt9lKc5fpVYU46oxzIYTNsclKstCvS0QRd +8F6RSmJcGz+ZueCeu7dZewLMfOdAYGGMJRn1oeYjelcy2qhHlsOdfAzVbTj3dWJO86gNc WkdQ4L4ensF2UnONlUMiyCnodic60nDlo+H1P3i5PGuJ/dAsyOMLrC61tt0EYw== 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=1784620431; 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=0NYoxGiGRplhipaMeJ+Bohq+B0G/O0Emr9k1IJHSJhg=; b=YwzotM3pF5mRnEbQUoBLwdasVu3PLLj+FhZ24ulGCkP6eYrHbAN8MZybBNgCc6hrPKPqt2 UDLQzN8ViSWI4VZ60MMwMEQkOAti+yUSMmJ2GhU9U7K9I0SJ9m0lpjDi/MPgDOcxnnJI+C 1ayEvQcAZnT6dshhiFSobdMoS8Stt/XtLDZw+OPfiHq4SqkUcH7yAh1hT3hP0qfYUWfKB2 5jwvHEy6P6Mllm6A1HpiouyM4wtycWX7myw/E5YuyZo8ZuybDlW5Cn8ExN8i73PEG8CYSL vFtcqhjiFl3NQgxaoHEGCOGTUH1uFfGUsPo21s2wjX45yPNoGbz3FufTt4Mjlg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h48lg0pHnzgPK for ; Tue, 21 Jul 2026 07:53:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 18b57 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 07:53:51 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Peter Holm Subject: git: ff6574d2508d - main - stress2: Added a regression test List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pho X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ff6574d2508d6bc72247993787963dd84c4ff9dd Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 07:53:51 +0000 Message-Id: <6a5f258f.18b57.1901d00a@gitrepo.freebsd.org> The branch main has been updated by pho: URL: https://cgit.FreeBSD.org/src/commit/?id=ff6574d2508d6bc72247993787963dd84c4ff9dd commit ff6574d2508d6bc72247993787963dd84c4ff9dd Author: Peter Holm AuthorDate: 2026-07-21 07:53:24 +0000 Commit: Peter Holm CommitDate: 2026-07-21 07:53:24 +0000 stress2: Added a regression test --- tools/test/stress2/misc/nullfs35.sh | 65 +++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/tools/test/stress2/misc/nullfs35.sh b/tools/test/stress2/misc/nullfs35.sh new file mode 100755 index 000000000000..9f46cd9316ac --- /dev/null +++ b/tools/test/stress2/misc/nullfs35.sh @@ -0,0 +1,65 @@ +#!/bin/sh + +# +# Copyright (c) 2026 Peter Holm +# +# SPDX-License-Identifier: BSD-2-Clause +# + +# "nullfs mount over a file" scenario, see D58178 and D58191 + +set -u +prog=$(basename "$0" .sh) + +file=/tmp/$prog.file +mp=/tmp/$prog.mp +sleep=/tmp/$prog.sleep +rm -f $file +touch $mp + +# Mounting and running a program +cp /bin/date $file +mount_nullfs $file $mp || exit 1 +$mp +umount $mp + +# Display binary information for the process +rm -f $file +cp /bin/sleep $file +mount_nullfs $file $mp || exit 1 +$mp 60 & +sleep .2 +# "panic: condition vp->v_type == VDIR || VN_IS_DOOMED(vp) not met at vfs_cache.c:3547 (vn_fullpath_dir)" seen. +procstat -b $! +kill $! +umount $mp + +# Mounting a link +rm $file +cp /bin/sleep $sleep +ln $sleep $file +mount_nullfs $file $mp || exit 1 +$mp 60 & +sleep .2 +procstat -b $! +kill $! +umount $mp +rm $sleep + +# Mounting a symbolic link +rm $file +ln -s /bin/sleep $file +mount_nullfs $file $mp || exit 1 +$mp 60 & +sleep .2 +procstat -b $! +kill $! +umount $mp + +# Mounting a fifo must fail +rm $file +mkfifo $file +mount_nullfs $file $mp 2>/dev/null && exit 1 + +rm -f $file $mp +exit 0 From nobody Tue Jul 21 11:34:23 2026 X-Original-To: dev-commits-src-main@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 4h4Ff81Jlmz6lqJH for ; Tue, 21 Jul 2026 11:34:24 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4Ff80k7Gz3J9M for ; Tue, 21 Jul 2026 11:34:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784633664; 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=wGxvW76mcZvwYrcwqfITJ/RTP3KTcYoF3wu2zdx/LLc=; b=lgjtnm7da9OqPkZ3Yfdx6YLL4pdt7axVv1qNjLslTU+l3HnEOjVd3AFUeFpO+RtU5DCCzE p4J5EfbhHk/n43XJfOhvOtrFF6FjgQG9sr9QshKIZoOM1KdLf8+5lpYzQfzxpsKjHZXCiw fSwoTRVr5AbNaREL+51ZfxMiQvZlv6/5JunJZKgrnP4IwjA2+H0PHM27W2zd3fk1VZxxWr 7TBwd4Yz8bxfoGCefvY6xamddHu3uNaLW91uKyPlggPzavJ97yD7hqW0TNhBZczFwVccbC 3OY3621iSNMoPbC6PHWl1AZbz9Qmnihd61R2wdCHj2JFn4DMYqz1KjQ78FYvcA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784633664; a=rsa-sha256; cv=none; b=IMU/RK7BnVsIiraB4YjwtBbmhRg+jiR2MQ76j1DVXA+k7LIb20VI3px7T1oQZkaq9hu3Rk fF3eXqgvw+BJIODYe3s2RTgWm0uhAXPkGjHelpmiQ8YTsggem89VLxSp6cZu+6O5tGawmF GEEd2bKewA/1lf/dOO9ka3hb2RUJMiAgf/gc2f8G+qtPb0ejBUMgfW7POdonITpbfPaWEq 1iSKSMjCfVGTVM059XQFyg860O81sJdsvf0urUx7wdfryEOkWesUd4hFCApaAtx/PRZ7ic Vz4S07oZ0zigEzsATjAYfGRmTpjRpmIOIAdyuUzjg/9S1+jRAaJs6DdybgrNDA== 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=1784633664; 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=wGxvW76mcZvwYrcwqfITJ/RTP3KTcYoF3wu2zdx/LLc=; b=nGUAlONHhI/HwceWH9hB45BxqLmSYBEII5fEt1rhLddEtbeQVn7g+L0ByibSLfNq/ARdzx rA2lw0vTgRAhwDgzGdSzOk9FPc4/A4iUSPsi5BGzl6D7MsEHgY1u+a52D/tS53v9nOppNt 67F/+NoEKUBirlXxbsYqjIFVJpeaK0ooRV4FT+aGa6Z9huVCh96r8OixJj1n0wk31Xy7Cw GSLbA285DcZF/ph7b7684PNVOPi1LjS7Ojqkfw43RY1Aqw4+GrUMFHi1U5Lu5fJMsF20a4 bUzkvpvEJisdAFg91bdP2oDnvG+D0udYMNJsSMW7MZMTGi2puob+XjOZvaMC2Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4Ff76VTTzmWQ for ; Tue, 21 Jul 2026 11:34:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3b9ef by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 11:34:23 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 67518c9f565b - main - wpa: Define CONFIG_DEBUG_FILE globally List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 67518c9f565b61bc5eebe33b6a956e2cc9b3f223 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 11:34:23 +0000 Message-Id: <6a5f593f.3b9ef.6065530a@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=67518c9f565b61bc5eebe33b6a956e2cc9b3f223 commit 67518c9f565b61bc5eebe33b6a956e2cc9b3f223 Author: Dag-Erling Smørgrav AuthorDate: 2026-07-21 07:59:43 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-07-21 07:59:43 +0000 wpa: Define CONFIG_DEBUG_FILE globally We defined CONFIG_DEBUG_FILE only in libwpautils, not in wpa_supplicant, so all it did was enable code that never got called. Enable it at the top level so it also applies to wpa_supplicant(8), and the -f option mentioned in the manual page now actually works. PR: 281617 MFC after: 1 week Reviewed by: cy Differential Revision: https://reviews.freebsd.org/D57723 --- usr.sbin/wpa/Makefile.inc | 1 + usr.sbin/wpa/src/utils/Makefile | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/usr.sbin/wpa/Makefile.inc b/usr.sbin/wpa/Makefile.inc index 1d07f557b2d2..b332ead24556 100644 --- a/usr.sbin/wpa/Makefile.inc +++ b/usr.sbin/wpa/Makefile.inc @@ -40,6 +40,7 @@ CFLAGS+=-DCONFIG_IEEE80211R CFLAGS+=-DCONFIG_IEEE80211W CFLAGS+=-DTLS_DEFAULT_CIPHERS=\"DEFAULT:!EXP:!LOW\" CFLAGS+=-DCONFIG_DEBUG_SYSLOG +CFLAGS+=-DCONFIG_DEBUG_FILE CFLAGS+=-DPKCS12_FUNCS CFLAGS+=-DCONFIG_GAS CFLAGS+=-DCONFIG_PEERKEY diff --git a/usr.sbin/wpa/src/utils/Makefile b/usr.sbin/wpa/src/utils/Makefile index 061ddeaad6f8..105b0dc042da 100644 --- a/usr.sbin/wpa/src/utils/Makefile +++ b/usr.sbin/wpa/src/utils/Makefile @@ -22,8 +22,6 @@ SRCS= base64.c \ wpa_debug.c \ wpabuf.c -CFLAGS+=-DCONFIG_DEBUG_FILE - .if ${MK_INET6} != "no" CFLAGS+= -DCONFIG_IPV6 .endif From nobody Tue Jul 21 11:34:24 2026 X-Original-To: dev-commits-src-main@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 4h4Ff92tqZz6lqJN for ; Tue, 21 Jul 2026 11:34:25 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4Ff91916z3JZ1 for ; Tue, 21 Jul 2026 11:34:25 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784633665; 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=3YhjYvhDzIz8s6bpSs7MH6NlrI3bVZkW8o8cQXZS54U=; b=VNv7zXK1Xa9wleiOjRQ5YB9CHGjxPrcch6S4sAin49TDZUV9c190KeUIJL/VWTW7JeF916 +xHe2kaupN0WHa5lUSZpNIKYflFFZzXbRPnMRl0LY2mnVEmHi0uDVzz/Iwxwc4EJN4wtJX InSrgUqu1g3j9EO1MNWAVQWM5VoQknXtGCitCzEdTnBtqvid6ZdTxLLQN3DkUuuRjpgOdb XOxRoxBJ4xjos3roQrPP91vnwN+oQjEf3w7KIkL9//g0tY52ajNqara9Fi+gYHv7IgmQQX qSUZQ6r6UDBXCR13HP2o0lxUyrJ0ovLbFmUD9ODm64MbtU9cjPyAaRAgJt9gwg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784633665; a=rsa-sha256; cv=none; b=Qbw8OyTzApIotj3Blx5cVlP7ITJy2L08ocws5ZbWzCeK6Jo4v/ptcRj7N/DV9NcNXi2zpT 7JWD5ke5wifoFnt4JXNYuV12mKr6s1M5V0Yv5JhWOGuDociUN4ohqUejezI3qJyk5JP7X1 a3K6N8vZ8WVNdDLZGYorrK4UZhI64H6dyWdMoFZPy+Q2oBWHZpewrWl+DEvvkQ2toc4DMg +csx91ehwWyER5HNMnRUk63ZPgqU1XH1TDcIrmg3Aaahx4QRH10qYBVI58l1tDdwrIytGh Dizn02fjxEEaDdNOaeCh02Q/Xv8TLOccvRMV7SUzbShtjl3tKnTu7SLwIJg6nA== 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=1784633665; 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=3YhjYvhDzIz8s6bpSs7MH6NlrI3bVZkW8o8cQXZS54U=; b=rv9stRsQY5kxbk1kuxmNS+N/pT5Qdugr576fO8Uc/oFxM+g692TG6dxapsqc9j1KGd2b+4 Ig77vttAMWsNY1lv/x13cYp0PKtDHjJ5O8DvKriz3D/5TELOifBjJJ125Inlt2Fq6fyNrf GOkz78kHiXIb8a7+TdRwYmfNQjlhSJJUvhUYQ0MTVM6JgH9vjDGVCZe55Uh3SPmRNY/fDe fsAXhMTgFOiOVmV04OVKyAT+/CvAmVgHKbdn/ziu3mi3bUtXBlGkgRofGNZAAYVDYdnFYI aDlf0sAZVYfidzUeJo4OpTjqZDKDqNCksMnaNQrjd86VjAFMwTurcp8TSyL4ng== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4Ff86y5fzmry for ; Tue, 21 Jul 2026 11:34:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3b11a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 11:34:24 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: bd30d1ad78e1 - main - nvme: Explicitly cast caddr_t values List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: bd30d1ad78e152d0a963bc873643a911321cca6e Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 11:34:24 +0000 Message-Id: <6a5f5940.3b11a.6aafd85f@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=bd30d1ad78e152d0a963bc873643a911321cca6e commit bd30d1ad78e152d0a963bc873643a911321cca6e Author: Dag-Erling Smørgrav AuthorDate: 2026-07-21 08:03:05 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-07-21 08:03:05 +0000 nvme: Explicitly cast caddr_t values Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. MFC after: 1 week Fixes: 6d0001d44490 ("nvme: add support for DIOCGIDENT") Reviewed by: bnovkov, imp Differential Revision: https://reviews.freebsd.org/D58357 --- sys/dev/nvme/nvme_ns.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/nvme/nvme_ns.c b/sys/dev/nvme/nvme_ns.c index 52d7e998198b..4f2ff826e184 100644 --- a/sys/dev/nvme/nvme_ns.c +++ b/sys/dev/nvme/nvme_ns.c @@ -89,7 +89,7 @@ nvme_ns_ioctl(struct cdev *cdev, u_long cmd, caddr_t arg, int flag, break; } case DIOCGIDENT: { - uint8_t *sn = arg; + uint8_t *sn = (uint8_t *)arg; nvme_cdata_get_disk_ident(&ctrlr->cdata, sn); break; } From nobody Tue Jul 21 11:34:26 2026 X-Original-To: dev-commits-src-main@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 4h4FfB3M4Bz6lqCW for ; Tue, 21 Jul 2026 11:34:26 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4FfB1mnpz3JGQ for ; Tue, 21 Jul 2026 11:34:26 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784633666; 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=uIE67PeCzsIle+6woIbUK1LlrWqR+MmgDIo+ZheT7o0=; b=lwsB7laf1beShzpL+QJcPjE+J+/lzxl4F+pGiw+LahAJcQxUIOfxduoyO21rDcpGy6d70P g1tRm2F0TtK4MayV/zuLQ2d73SykgMgFUay8jimlPXRUJhAsJTKcnPrqw/ffcskLXik6hc 9+fPBxmoWiNsM0ydshDAurYG8jNv4FTX5bw1VrBty5X8tW0TvtI1c+L+YYaOMveXsWBVDA 6zglmklNiKc6n1M2ynWxPWW3To5IsDZoNY0WcL3R6Fx35azL4pez+cM+5s3Nqv+z7ycLMw qwQl3TbBeDX7gBrjC51TXwgqYMrIMh0bA36luUAquJ3GZAMveLruPdizfsKYgA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784633666; a=rsa-sha256; cv=none; b=lPScNh0vlvv6eA6PzUg5N8nqPEAL1JJasFpskNyhs95Blr5hkvExC+pp1B9Fa7/ui8ZOrj VOMoW7AkbJrkl5yQNsLG9j2/gYo2y1QemA9VmZV7PU8G93ro7Mcl/UqQaLUN3tiJ8FukOM 9t6xDYoYAf3kE+NbzkQZF2mrYsDBOEnNBXlb06pLIa8pZgE8XvY78wvXyM73dXmNR2O0EJ F5y5cNry07WDm+MPEyOAWv6PO6EZLwQiwA+GNq9uX11gG7uBY1iwl4PhkGvkc6dXb+yHAG 2EI75eHX7ed+XMEuebKLk15OTIp7BTBjoYJb4WX1A9L2+eXkMmhq0XtoNpwPFg== 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=1784633666; 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=uIE67PeCzsIle+6woIbUK1LlrWqR+MmgDIo+ZheT7o0=; b=ffwXYgySRIzBMyoA5PN2Bi836EMh7Sd3bkUIMjeMzQZ/YkDEJfvXKR9aKDjyWzW9u52pZK wtByoSpmay2KLqEf12bCKPU1NFbaKWh8HwjJ6R8tbHz2OjLeng9998wa3fNv1Q7CQYUG8O RQvfGaE84sVcB47uuz8bwEfDGowxMgkbCW67Ll0jP2Kdn2navbErwGUTkYDd8Vd6Jtedlb 1yOXyFEhUrbPs3vQ4eLFzzr8qbAYyqa1acMYkHKops+2f9H9ZNsV6yN+N0btuhjemxwjMB MIA6wnEq6kR5HQCqPEGuyRUT5Xf3UY5hTYtxv1J2z5u1ict54llzrS7/Z+Lxvw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4FfB0kQ8zmWR for ; Tue, 21 Jul 2026 11:34:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3a8fb by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 11:34:26 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: d34870708db9 - main - install: Allow installing stdin List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d34870708db9fa1eb8e29b5e085b755de1189b1f Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 11:34:26 +0000 Message-Id: <6a5f5942.3a8fb.7d76043b@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=d34870708db9fa1eb8e29b5e085b755de1189b1f commit d34870708db9fa1eb8e29b5e085b755de1189b1f Author: Dag-Erling Smørgrav AuthorDate: 2026-07-21 08:03:44 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-07-21 08:03:44 +0000 install: Allow installing stdin If from_name is "/dev/stdin" or "-" and the target is not a directory, skip the comparison and copy data from standard input to the target. MFC after: 1 week Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D58348 --- usr.bin/xinstall/install.1 | 7 ++++- usr.bin/xinstall/tests/install_test.sh | 32 +++++++++++++++++++++ usr.bin/xinstall/xinstall.c | 52 +++++++++++++++++++++++----------- 3 files changed, 73 insertions(+), 18 deletions(-) diff --git a/usr.bin/xinstall/install.1 b/usr.bin/xinstall/install.1 index c6a55632891c..c4a5fbe68950 100644 --- a/usr.bin/xinstall/install.1 +++ b/usr.bin/xinstall/install.1 @@ -25,7 +25,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd June 3, 2026 +.Dd July 19, 2026 .Dt INSTALL 1 .Os .Sh NAME @@ -286,6 +286,11 @@ utility attempts to prevent moving a file onto itself. Installing .Pa /dev/null creates an empty file. +Installing +.Pa /dev/stdin +or +.Sy - +copies data from standard input to the target. .Sh ENVIRONMENT The .Nm diff --git a/usr.bin/xinstall/tests/install_test.sh b/usr.bin/xinstall/tests/install_test.sh index 377920200490..7acd02abbb80 100755 --- a/usr.bin/xinstall/tests/install_test.sh +++ b/usr.bin/xinstall/tests/install_test.sh @@ -557,6 +557,36 @@ digest_body() { done } +atf_test_case null +null_head() { + atf_set "descr" "Install empty file" +} +null_body() { + atf_check mkdir dst + atf_check -s exit:71 -e not-empty install /dev/null dst + atf_check install /dev/null dst/file + atf_check test -f dst/file + atf_check test ! -s dst/file +} + +atf_test_case stdin +stdin_head() { + atf_set "descr" "Install stdin" +} +stdin_body() { + atf_check mkdir dst + echo "The Magic Words are Squeamish Ossifrage" >file + atf_check -s exit:71 -e not-empty install - dst ; Tue, 21 Jul 2026 11:34:27 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4FfC2GbWz3JSW for ; Tue, 21 Jul 2026 11:34:27 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784633667; 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=Ff6AIGzVaYR9UESGmrQeL8oQz+JaZIRJ5ZiNTq26Mik=; b=MWK+71DktBMTgJmNlSJZGbq+n6IVZBctPhiFBy8/0hhFHAJ0rZtSD0sSQpdwPJIWv4DAxb yxd65HTkUoufH7sXdLBa9KsU929jHSwVX0/i1u7Rf+C/nM8i1JTEqG1MZ2s4RW9QXp3f0j Ld8WwFtY3Uy5qzfMp5xBJ3WWw/CVnRQTklpHYDhycLp79QTonnneMKPVRHndm4I8iF+CXo 7IY0UpB0jqj79oTKYGiRVU1iX0Q6ahGlhw9akp5rL65KvI4sIPElSN/JhNA3T5pLAOqlRE VHpZiFkLmQZkFj/6EPUsAjy+5mpt6rTI9svCxfxrIxC+l9qOvbDSt9G+shPwAA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784633667; a=rsa-sha256; cv=none; b=cUAeMjBMI0O5PdAdWGrPsPoYrkOz8Cxq/GhYylmnA5nJwIWhSGn3lVC+xf4HdNBFM8ZXya cFjIVfdRegAx+rOYG8hiDoPWNJFvVqr+DuyFdxhJyymYtronCF/G6QvqvDs+5b2Ut7wPW2 LvdwyKj2xkqJiOR17wUhuS3MK4vT8O8bIEp68oy9nX9MQGUoIk1fUu5Sw4t15fezcU1Y2Z bVldk5YIkF6nwRdBW9P2oQmCGYbuV7M+4uAgoqafHQfDCbXGxzfirRP6Wn5sDK2oG27RrK ek/v/SsZizmC5pDozPZSmazQMke2+04q6/Wtt/zAZ5qa/5KXCA2EgZXr5UkhQA== 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=1784633667; 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=Ff6AIGzVaYR9UESGmrQeL8oQz+JaZIRJ5ZiNTq26Mik=; b=am+o04vpY78MP9up5PCxn1JPZq6FxnFZZ3dMkqnz9BU0XH6kqMAsOZyQrjfxd/e2N0zS66 s70E3mC0e1D+svMN3Bik5nG7jpYQJXlox+h5VcgR0atJxQPZRk+Hqj9WClguifh4otHffT leLaow86FqQnoFph74iPPpF6Qqzqf0KuZ8oUiMD/ZTUKMiziS3gLdXvKgPtB8weQ8dpNgl br+OisvBIeBRf8Z3vRqDWS1RGiLbQi62bi3p6wb/x+18dzNnJVQ7caySSN8d5i8Q9I2LF9 oWdYqLiT0YvuT6XIEQzPrh+gbTDPkuHy4np978qwScGuE4qKxa7P/bFpqpXJGw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4FfC1L89zmWT for ; Tue, 21 Jul 2026 11:34:27 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3b093 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 11:34:27 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 134ddd372f82 - main - install: Code cleanup List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 134ddd372f8213885dd828ab38cec2384fd451db Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 11:34:27 +0000 Message-Id: <6a5f5943.3b093.2659056e@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=134ddd372f8213885dd828ab38cec2384fd451db commit 134ddd372f8213885dd828ab38cec2384fd451db Author: Dag-Erling Smørgrav AuthorDate: 2026-07-21 08:03:49 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-07-21 08:03:49 +0000 install: Code cleanup This is mainy focused on using bool for booleans but also renames some variables for clarity, adds some explicit comparisons, adds some braces, with miscellanous style fixes thrown in. MFC after: 1 week Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D58355 --- usr.bin/xinstall/xinstall.c | 210 ++++++++++++++++++++++---------------------- 1 file changed, 106 insertions(+), 104 deletions(-) diff --git a/usr.bin/xinstall/xinstall.c b/usr.bin/xinstall/xinstall.c index 38aa793d2492..f2e0a523d4cf 100644 --- a/usr.bin/xinstall/xinstall.c +++ b/usr.bin/xinstall/xinstall.c @@ -52,6 +52,7 @@ #include #include #include +#include #include #include #include @@ -135,16 +136,17 @@ extern char **environ; static gid_t gid; static uid_t uid; -static int dobackup, docompare, dodir, dolink, dopreserve, dostrip, dounpriv, - safecopy, verbose; -static int haveopt_f, haveopt_g, haveopt_m, haveopt_o; +static bool dobackup, docompare, dodir, dopreserve, dostrip, dounpriv; +static bool safecopy, verbose; +static bool haveopt_f, haveopt_g, haveopt_m, haveopt_o; +static int linkmode; static mode_t mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; static FILE *metafp; static const char *group, *owner; static const char *suffix = BACKUP_SUFFIX; static char *destdir, *digest, *fflags, *metafile, *tags; -static int compare(int, const char *, size_t, int, const char *, size_t, +static bool compare(int, const char *, size_t, int, const char *, size_t, char **); static char *copy(int, const char *, int, const char *); static int create_tempfile(const char *, char *, size_t); @@ -161,7 +163,7 @@ static void install_dir(char *); static void metadata_log(const char *, const char *, struct timespec *, const char *, const char *, off_t); static int parseid(const char *, id_t *); -static int strip(const char *, int, const char *, char **); +static bool strip(const char *, int, const char *, char **); static void usage(void); int @@ -186,10 +188,10 @@ main(int argc, char *argv[]) suffix = optarg; /* FALLTHROUGH */ case 'b': - dobackup = 1; + dobackup = true; break; case 'C': - docompare = 1; + docompare = true; break; case 'c': /* For backwards compatibility. */ @@ -198,14 +200,14 @@ main(int argc, char *argv[]) destdir = optarg; break; case 'd': - dodir = 1; + dodir = true; break; case 'f': - haveopt_f = 1; + haveopt_f = true; fflags = optarg; break; case 'g': - haveopt_g = 1; + haveopt_g = true; group = optarg; break; case 'h': @@ -215,24 +217,24 @@ main(int argc, char *argv[]) for (p = optarg; *p != '\0'; p++) switch (*p) { case 's': - dolink &= ~(LN_HARD|LN_MIXED); - dolink |= LN_SYMBOLIC; + linkmode &= ~(LN_HARD|LN_MIXED); + linkmode |= LN_SYMBOLIC; break; case 'h': - dolink &= ~(LN_SYMBOLIC|LN_MIXED); - dolink |= LN_HARD; + linkmode &= ~(LN_SYMBOLIC|LN_MIXED); + linkmode |= LN_HARD; break; case 'm': - dolink &= ~(LN_SYMBOLIC|LN_HARD); - dolink |= LN_MIXED; + linkmode &= ~(LN_SYMBOLIC|LN_HARD); + linkmode |= LN_MIXED; break; case 'a': - dolink &= ~LN_RELATIVE; - dolink |= LN_ABSOLUTE; + linkmode &= ~LN_RELATIVE; + linkmode |= LN_ABSOLUTE; break; case 'r': - dolink &= ~LN_ABSOLUTE; - dolink |= LN_RELATIVE; + linkmode &= ~LN_ABSOLUTE; + linkmode |= LN_RELATIVE; break; default: errx(1, "%c: invalid link type", *p); @@ -243,7 +245,7 @@ main(int argc, char *argv[]) metafile = optarg; break; case 'm': - haveopt_m = 1; + haveopt_m = true; free(set); if (!(set = setmode(optarg))) errx(EX_USAGE, "invalid file mode: %s", @@ -255,26 +257,26 @@ main(int argc, char *argv[]) "databases in `%s'", optarg); break; case 'o': - haveopt_o = 1; + haveopt_o = true; owner = optarg; break; case 'p': - docompare = dopreserve = 1; + docompare = dopreserve = true; break; case 'S': - safecopy = 1; + safecopy = true; break; case 's': - dostrip = 1; + dostrip = true; break; case 'T': tags = optarg; break; case 'U': - dounpriv = 1; + dounpriv = true; break; case 'v': - verbose = 1; + verbose = true; break; case '?': default: @@ -290,7 +292,7 @@ main(int argc, char *argv[]) } /* Cannot strip if creating a link. */ - if (dostrip && dolink) { + if (dostrip && linkmode) { warnx("-l and -s may not be specified together"); usage(); } @@ -305,7 +307,7 @@ main(int argc, char *argv[]) if (getenv("DONTSTRIP") != NULL) { warnx("DONTSTRIP set - will not strip installed binaries"); - dostrip = 0; + dostrip = false; } /* must have at least two arguments, except when creating directories */ @@ -378,7 +380,7 @@ main(int argc, char *argv[]) to_name = argv[argc - 1]; no_target = stat(to_name, &to_sb); if (!no_target && S_ISDIR(to_sb.st_mode)) { - if (dolink & LN_SYMBOLIC) { + if (linkmode & LN_SYMBOLIC) { if (lstat(to_name, &to_sb) != 0) err(EX_OSERR, "%s vanished", to_name); if (S_ISLNK(to_sb.st_mode)) { @@ -399,7 +401,7 @@ main(int argc, char *argv[]) /* can't do file1 file2 directory/file */ if (argc != 2) { if (no_target) - warnx("target directory `%s' does not exist", + warnx("target directory `%s' does not exist", argv[argc - 1]); else warnx("target `%s' is not a directory", @@ -407,7 +409,7 @@ main(int argc, char *argv[]) usage(); } - if (!no_target && !dolink) { + if (!no_target && linkmode == 0) { if (stat(*argv, &from_sb)) err(EX_OSERR, "%s", *argv); if (!S_ISREG(to_sb.st_mode)) @@ -537,6 +539,7 @@ static int parseid(const char *name, id_t *id) { char *ep; + errno = 0; *id = (id_t)strtoul(name, &ep, 10); if (errno || *ep != '\0') @@ -670,9 +673,9 @@ makelink(const char *from_name, const char *to_name, struct stat to_sb; /* Try hard links first. */ - if (dolink & (LN_HARD|LN_MIXED)) { + if (linkmode & (LN_HARD|LN_MIXED)) { if (do_link(from_name, to_name, target_sb) == -1) { - if ((dolink & LN_HARD) || errno != EXDEV) + if ((linkmode & LN_HARD) || errno != EXDEV) err(EX_OSERR, "link %s -> %s", from_name, to_name); } else { if (stat(to_name, &to_sb)) @@ -717,7 +720,7 @@ makelink(const char *from_name, const char *to_name, } /* Symbolic links. */ - if (dolink & LN_ABSOLUTE) { + if (linkmode & LN_ABSOLUTE) { /* Convert source path to absolute. */ if (realpath(from_name, src) == NULL) err(EX_OSERR, "%s: realpath", from_name); @@ -727,7 +730,7 @@ makelink(const char *from_name, const char *to_name, return; } - if (dolink & LN_RELATIVE) { + if (linkmode & LN_RELATIVE) { if (*from_name != '/') { /* this is already a relative link */ do_symlink(from_name, to_name, target_sb); @@ -813,32 +816,30 @@ makelink(const char *from_name, const char *to_name, static void install(const char *from_name, const char *to_name, u_long fset, u_int flags) { + char backup[MAXPATHLEN], pathbuf[MAXPATHLEN], tempfile[MAXPATHLEN]; struct stat from_sb, temp_sb, to_sb; struct timespec tsb[2]; - int devnull, files_match, from_fd, ispipe, serrno, stripped, target; - int temp_fd, to_fd; - char backup[MAXPATHLEN], *p, pathbuf[MAXPATHLEN], tempfile[MAXPATHLEN]; - char *digestresult; + char *digestresult, *p; + int from_fd, temp_fd, to_fd, serrno; + bool devnull, exists, files_match, ispipe, stripped; - devnull = ispipe = 0; + devnull = exists = files_match = ispipe = stripped = false; digestresult = NULL; - files_match = stripped = 0; - from_fd = -1; - to_fd = -1; + from_fd = to_fd = -1; if (strcmp(from_name, _PATH_DEVNULL) == 0) { /* We can't create a new file without a name */ if ((flags & DIRECTORY) != 0) errc(EX_OSERR, EFTYPE, "%s", from_name); - devnull = 1; + devnull = true; } else if (strcmp(from_name, _PATH_STDIN) == 0 || strcmp(from_name, "-") == 0) { /* We can't create a new file without a name */ if ((flags & DIRECTORY) != 0) errc(EX_OSERR, EFTYPE, "%s", from_name); - ispipe = 1; + ispipe = true; } else { - if (!dolink) { + if (linkmode == 0) { if (stat(from_name, &from_sb)) err(EX_OSERR, "%s", from_name); if (!S_ISREG(from_sb.st_mode)) @@ -856,14 +857,14 @@ install(const char *from_name, const char *to_name, u_long fset, u_int flags) if (*to_name == '\0') errx(EX_USAGE, "destination cannot be an empty string"); - target = (lstat(to_name, &to_sb) == 0); + exists = (lstat(to_name, &to_sb) == 0); - if (dolink) { - makelink(from_name, to_name, target ? &to_sb : NULL); + if (linkmode) { + makelink(from_name, to_name, exists ? &to_sb : NULL); return; } - if (target && !S_ISREG(to_sb.st_mode) && !S_ISLNK(to_sb.st_mode)) + if (exists && !S_ISREG(to_sb.st_mode) && !S_ISLNK(to_sb.st_mode)) errc(EX_CANTCREAT, EFTYPE, "%s", to_name); if (devnull) { @@ -876,17 +877,17 @@ install(const char *from_name, const char *to_name, u_long fset, u_int flags) } /* If we don't strip, we can compare first. */ - if (docompare && !dostrip && target && S_ISREG(to_sb.st_mode)) { + if (docompare && !dostrip && exists && S_ISREG(to_sb.st_mode)) { if ((to_fd = open(to_name, O_RDONLY)) < 0) err(EX_OSERR, "%s", to_name); if (devnull) files_match = to_sb.st_size == 0; else if (ispipe) - files_match = 0; + files_match = false; else { - files_match = !(compare(from_fd, from_name, + files_match = compare(from_fd, from_name, (size_t)from_sb.st_size, to_fd, - to_name, (size_t)to_sb.st_size, &digestresult)); + to_name, (size_t)to_sb.st_size, &digestresult); } /* Close "to" file unless we match. */ @@ -928,7 +929,7 @@ install(const char *from_name, const char *to_name, u_long fset, u_int flags) /* * Compare the stripped temp file with the target. */ - if (docompare && dostrip && target && S_ISREG(to_sb.st_mode)) { + if (docompare && dostrip && exists && S_ISREG(to_sb.st_mode)) { temp_fd = to_fd; /* Re-open to_fd using the real target name. */ @@ -943,8 +944,7 @@ install(const char *from_name, const char *to_name, u_long fset, u_int flags) } if (compare(temp_fd, tempfile, (size_t)temp_sb.st_size, to_fd, - to_name, (size_t)to_sb.st_size, &digestresult) - == 0) { + to_name, (size_t)to_sb.st_size, &digestresult)) { /* * If target has more than one link we need to * replace it in order to snap the extra links. @@ -955,13 +955,14 @@ install(const char *from_name, const char *to_name, u_long fset, u_int flags) tsb[1] = to_sb.st_mtim; (void)utimensat(AT_FDCWD, tempfile, tsb, 0); } else { - files_match = 1; + files_match = true; (void)unlink(tempfile); } (void) close(temp_fd); } - } else if (dostrip) + } else if (dostrip) { digestresult = digest_file(tempfile); + } /* * Move the new file into place if the files are different (or @@ -973,7 +974,7 @@ install(const char *from_name, const char *to_name, u_long fset, u_int flags) if (to_sb.st_flags & NOCHANGEBITS) (void)chflags(to_name, to_sb.st_flags & ~NOCHANGEBITS); #endif - if (target && dobackup) { + if (exists && dobackup) { if ((size_t)snprintf(backup, MAXPATHLEN, "%s%s", to_name, suffix) != strlen(to_name) + strlen(suffix)) { unlink(tempfile); @@ -1103,24 +1104,24 @@ install(const char *from_name, const char *to_name, u_long fset, u_int flags) /* * compare -- - * Compare two files; non-zero means files differ. + * Compare two files; returns false if they differ. * Compute digest and return its address in *dresp * unless it points to pre-computed digest. */ -static int +static bool compare(int from_fd, const char *from_name __unused, size_t from_len, - int to_fd, const char *to_name __unused, size_t to_len, - char **dresp) + int to_fd, const char *to_name __unused, size_t to_len, + char **dresp) { static char *buf, *buf1, *buf2; static size_t bufsize; int do_digest; int n1, n2; - int rv; + bool equal; DIGEST_CTX ctx; if (from_len != to_len) - return 1; + return false; do_digest = (digesttype != DIGEST_NONE && dresp != NULL && *dresp == NULL); @@ -1145,21 +1146,24 @@ compare(int from_fd, const char *from_name __unused, size_t from_len, buf2 = buf + bufsize; } - rv = 0; + equal = true; lseek(from_fd, 0, SEEK_SET); lseek(to_fd, 0, SEEK_SET); - while (rv == 0) { + while (equal) { n1 = read(from_fd, buf1, bufsize); if (n1 == 0) break; /* EOF */ else if (n1 > 0) { n2 = read(to_fd, buf2, n1); - if (n2 == n1) - rv = memcmp(buf1, buf2, n1); - else - rv = 1; /* out of sync */ - } else - rv = 1; /* read failure */ + if (n2 == n1) { + if (memcmp(buf1, buf2, n1) != 0) + equal = false; + } else { + equal = false; /* out of sync */ + } + } else { + equal = false; /* read failure */ + } if (do_digest) digest_update(&ctx, buf1, n1); } @@ -1167,13 +1171,13 @@ compare(int from_fd, const char *from_name __unused, size_t from_len, lseek(to_fd, 0, SEEK_SET); if (do_digest) { - if (rv == 0) + if (equal) *dresp = digest_end(&ctx, NULL); else (void)digest_end(&ctx, NULL); } - return rv; + return (equal); } /* @@ -1286,15 +1290,14 @@ done: * strip -- * Use strip(1) to strip the target file. * Just invoke strip(1) on to_name if from_name is NULL, else try - * to run "strip -o to_name from_name" and return 0 on failure. - * Return 1 on success and assign result of digest_file(to_name) + * to run "strip -o to_name from_name" and return false on failure. + * Return true on success and assign result of digest_file(to_name) * to *dresp. */ -static int +static bool strip(const char *to_name, int to_fd, const char *from_name, char **dresp) { - const char *stripbin; - const char *args[5]; + const char *args[5], *stripbin; char *prefixed_from_name; pid_t pid; int error, serrno, status; @@ -1314,7 +1317,7 @@ strip(const char *to_name, int to_fd, const char *from_name, char **dresp) /* Prepend './' if from_name begins with '-' */ if (from_name[0] == '-') { if (asprintf(&prefixed_from_name, "./%s", from_name) == -1) - return (0); + return (false); args[3] = prefixed_from_name; } else { args[3] = from_name; @@ -1337,7 +1340,7 @@ strip(const char *to_name, int to_fd, const char *from_name, char **dresp) } if (status != 0) { if (from_name != NULL) - return (0); + return (false); (void)unlink(to_name); errx(EX_SOFTWARE, "strip command %s failed on %s", stripbin, to_name); @@ -1350,7 +1353,7 @@ strip(const char *to_name, int to_fd, const char *from_name, char **dresp) } if (dresp != NULL) *dresp = digest_file(to_name); - return (1); + return (true); } /* @@ -1362,11 +1365,12 @@ install_dir(char *path) { char *p; struct stat sb; - int ch, tried_mkdir; + int ch; + bool tried_mkdir; - for (p = path;; ++p) - if (!*p || (p != path && *p == '/')) { - tried_mkdir = 0; + for (p = path;; ++p) { + if (*p == '\0' || (p != path && *p == '/')) { + tried_mkdir = false; ch = *p; *p = '\0'; again: @@ -1374,7 +1378,7 @@ again: if (errno != ENOENT || tried_mkdir) err(EX_OSERR, "stat %s", path); if (mkdir(path, 0755) < 0) { - tried_mkdir = 1; + tried_mkdir = true; if (errno == EEXIST) goto again; err(EX_OSERR, "mkdir %s", path); @@ -1384,16 +1388,17 @@ again: path); } else if (!S_ISDIR(sb.st_mode)) errx(EX_OSERR, "%s exists but is not a directory", path); - if (!(*p = ch)) + if ((*p = ch) == '\0') break; - } + } + } if (!dounpriv) { if ((gid != (gid_t)-1 || uid != (uid_t)-1) && - chown(path, uid, gid)) + chown(path, uid, gid) != 0) warn("chown %u:%u %s", uid, gid, path); /* XXXBED: should we do the chmod in the dounpriv case? */ - if (chmod(path, mode)) + if (chmod(path, mode) != 0) warn("chmod %o %s", mode, path); } metadata_log(path, "dir", NULL, NULL, NULL, 0); @@ -1407,15 +1412,16 @@ again: */ static void metadata_log(const char *path, const char *type, struct timespec *ts, - const char *slink, const char *digestresult, off_t size) + const char *slink, const char *digestresult, off_t size) { static const char extra[] = { ' ', '\t', '\n', '\\', '#', '\0' }; const char *p; char *buf; size_t buflen, destlen; struct flock metalog_lock; + id_t id; - if (!metafp) + if (metafp == NULL) return; /* Buffer for strsnvis(3), used for both path and slink. */ buflen = strlen(path); @@ -1446,23 +1452,19 @@ metadata_log(const char *path, const char *type, struct timespec *ts, (p[destlen] == '/' || p[destlen] == '\0')) p += destlen; } - while (*p && *p == '/') + while (*p != '\0' && *p == '/') p++; strsnvis(buf, buflen, p, VIS_OCTAL, extra); p = buf; /* Print details. */ fprintf(metafp, ".%s%s type=%s", *p ? "/" : "", p, type); if (owner) { - id_t id; - if (parseid(owner, &id)) fprintf(metafp, " uid=%jd", (intmax_t)id); else fprintf(metafp, " uname=%s", owner); } if (group) { - id_t id; - if (parseid(group, &id)) fprintf(metafp, " gid=%jd", (intmax_t)id); else @@ -1478,11 +1480,11 @@ metadata_log(const char *path, const char *type, struct timespec *ts, if (ts != NULL && dopreserve) fprintf(metafp, " time=%lld.%09ld", (long long)ts[1].tv_sec, ts[1].tv_nsec); - if (digestresult && digest) + if (digestresult && digest != NULL) fprintf(metafp, " %s=%s", digest, digestresult); - if (fflags) + if (fflags != NULL) fprintf(metafp, " flags=%s", fflags); - if (tags) + if (tags != NULL) fprintf(metafp, " tags=%s", tags); fputc('\n', metafp); /* Flush line. */ From nobody Tue Jul 21 11:34:28 2026 X-Original-To: dev-commits-src-main@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 4h4FfF0jlbz6lq6d for ; Tue, 21 Jul 2026 11:34:29 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4FfD3bxhz3Jg0 for ; Tue, 21 Jul 2026 11:34:28 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784633668; 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=QOaRU1ZZRdxeftw5gZMYfByqBElll9oDq3DwgIOm7E8=; b=AOjBw3KEbcQKcH/mEbpKe0cc1QVNM6vusttVegTVjH63VHuNoXiKEJGVHIW2Bpjvy7ewcN JCtDuUzPq217HowTpjKnYDGQ9bVk9OKYwq87jbmHr59m6R9N2+xy0lWijGd7OLpkbvuoFZ 001IZ4n93+fXVCKFlfQTppVRg8bJ49ha/P/Muhih3u1Ra1yiCvYOWvEsk93nmH/xYEG50F dMIDdbyKSKnnZ8JSziLP1LtjC0a23Pw9vWdWxza90sRfKj8hf3hEujQnU7Rr5FcMCzihZJ cGYVCU10AC76W2673qTG7pkBNkbnV3rk9LWGRQTClSFSKu4DSjBrUzEUpsoDqA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784633668; a=rsa-sha256; cv=none; b=VZulXHZPRjvs+2DxklJ7TepvmChh/9qi8qzdZf3QxNFPu57mGYkfyc1GGVczFfPhzeTufd rLmIuu8uAAnOm5Hb0fzLFNhKF4qZmE7UP25YxO2R5pbbO8dC1xXcDYWo/pn/0JVCO+AJcp uFrXMOchWVAivNhusI4nPnr6fr9sSX+fkqkTy8YTXASjjsjivKtaWVwn4npZawdYJm1I4C 8+0Q/9JZDAFh/uBTlGhgNURoexWtzhAKLUTxRXSz9xwgFBmbDjVgh9xRfsqLFN8QUMH6dT KQNNGCkDekcz/kCp6MGO/vT4mkyx9xcA+oPtOzZ8F97xnzP4cQvsytKiq/7WZw== 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=1784633668; 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=QOaRU1ZZRdxeftw5gZMYfByqBElll9oDq3DwgIOm7E8=; b=femKzcEnMfqJsJSz43XNxgKGDBJG+RpaRATdwyLtVBwKWcrptnWBWQBrDG6eUCBPeGflsc pha49Es4Z6E7AafpeM2O8xyiAavhuu1Sf5ghFYxeNIcpDtnfpaGBIPtSFQy4QN7kLOkatZ uHRZs/MIKg78S0Q1CCM5LSpzYs1bVlsEkTQOJJ6+oT/82wbw6xn5XJXsVABFnQwsbMHVRF SBZsabg5O8Mze0Etro8xpGejB++EIeRRr3wG/he86vjvNdcLWEHLaTI6/EKWf81hz2GocY pNad5YpIAV+F6xTwls663pK9DqKky4T9d4g4JGzOFBE4gptR5iCd1OZF8SX15Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4FfD2FGHzn6v for ; Tue, 21 Jul 2026 11:34:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3a8ff by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 11:34:28 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: c93f3b55e67f - main - libutil: Reimplement getlocalbase() List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c93f3b55e67fe465d93f3f54ae4408f131fec3aa Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 11:34:28 +0000 Message-Id: <6a5f5944.3a8ff.647c3596@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=c93f3b55e67fe465d93f3f54ae4408f131fec3aa commit c93f3b55e67fe465d93f3f54ae4408f131fec3aa Author: Dag-Erling Smørgrav AuthorDate: 2026-07-21 08:31:26 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-07-21 08:31:49 +0000 libutil: Reimplement getlocalbase() * Get rid of the pointless LOCALBASE_CTL_LEN mechanism * Apply minimal normalization to the paths obtained from the environment or sysctl variable * Turn the manual page into a manual page * Add tests MFC after: 1 week Reviewed by: se Differential Revision: https://reviews.freebsd.org/D58362 --- lib/libutil/getlocalbase.3 | 111 ++++++++++++++++------------------ lib/libutil/getlocalbase.c | 100 ++++++++++++++++++------------ lib/libutil/tests/Makefile | 1 + lib/libutil/tests/getlocalbase_test.c | 92 ++++++++++++++++++++++++++++ 4 files changed, 206 insertions(+), 98 deletions(-) diff --git a/lib/libutil/getlocalbase.3 b/lib/libutil/getlocalbase.3 index 5c71a87be8a3..ea02ae801bbb 100644 --- a/lib/libutil/getlocalbase.3 +++ b/lib/libutil/getlocalbase.3 @@ -3,6 +3,7 @@ .\" .\" Copyright 2020 Scott Long .\" Copyright 2020 Stefan Eßer +.\" Copyright (c) 2026 Dag-Erling Smørgrav .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions @@ -25,97 +26,89 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd July 11, 2023 +.Dd July 20, 2026 .Dt GETLOCALBASE 3 .Os .Sh NAME .Nm getlocalbase -.Nd "return the path to the local software directory" +.Nd "return the path to the local software base directory" .Sh LIBRARY .Lb libutil .Sh SYNOPSIS .In libutil.h -.Ft const char* +.Ft "const char *" .Fn getlocalbase "void" .Sh DESCRIPTION The -.Fn getlocalbase -function returns the path to the local software base directory. -Normally this is the -.Pa /usr/local -directory. +.Nm +function returns the path to the local software base directory, +normally +.Pa /usr/local . +.Pp First the .Ev LOCALBASE environment variable is checked. -If that does not exist then the +If that variable is undefined or empty, the .Va user.localbase sysctl is checked. -If that also does not exist then the value of the -.Dv LOCALBASE_PATH -compile-time variable is used. -If that is undefined then the system default, -.Pa _PATH_LOCALBASE -is used. +If that returns an empty string or an error occurs, the value of +.Dv _PATH_LOCALBASE +is used as a last resort. .Pp -The contents of the string returned by the -.Fn getlocalbase -function shall not be modified. -.Sh IMPLEMENTATION NOTES -Calls to -.Fn getlocalbase -will perform a setugid check on the running binary before checking the -environment. +If the value obtained through these means is not a valid absolute path +shorter than +.Dv MAXPATHLEN , +a constant string which has been deliberately chosen to cause any file +system operation using it to fail is returned instead. .Pp -The address returned by -.Fn getlocalbase -will point into the executing processes environment if it is the result of -.Fn getenv "LOCALBASE" , -to a static buffer if it is the result of -.Fn sysctl "user.localbase" , -and to a constant string if the compiled in default value is returned. +The contents of the string returned by +.Nm +shall not be modified by the caller. +.Sh IMPLEMENTATION NOTES +The +.Ev LOCALBASE +environment variable will only be used if the process calling +.Nm +is not setugid. .Pp -The same value will be returned on successive calls during the run-time -of the program, ignoring any changes to the environment variable or the -sysctl value that might have been made. +Successive calls to +.Nm +will return the same value throughout the lifetime of the process, +regardless of any subsequent changes to the environment or sysctl +variables. .Pp The -.Fn getlocalbase -function can be compiled with a non-default value of LOCALBASE_CTL_LEN. -A value of 0 will disable fetching of the sysctl value, a value less than -MAXPATHLEN will put a limit on the maximum string length supported for -this sysctl value. -If built with a non-default value of LOCALBASE_CTL_LEN, a value of the -user.localbase sysctl variable longer than this value will make -.Fn getlocalbase -return a valid string that is not a valid path prefix in any filesystem. +.Nm +function is thread-safe if and only if it has been called at least +once already. .Sh RETURN VALUES The .Fn getlocalbase -function returns a pointer to a string, whose length may exceed MAXPATHLEN, -if it has been obtained from the environment. +function returns a pointer to a null-terminated string. .Sh ENVIRONMENT -The -.Fn getlocalbase -library function retrieves the -.Ev LOCALBASE -environment variable. -.Sh ERRORS -The -.Fn getlocalbase -function always succeeds and returns a valid pointer to a string. +.Bl -tag -width ".Ev LOCALBASE" +.It Ev LOCALBASE +Path to the local software base directory +.El .Sh SEE ALSO -.Xr env 1 , -.Xr src.conf 5 , +.Xr environ 7 , .Xr sysctl 8 .Sh HISTORY The .Nm -library function first appeared in +function first appeared in .Fx 13.0 . .Sh AUTHORS .An -nosplit -This -manual page was written by +The +.Nm +function was originally written by +.An Stefan Eßer Aq Mt se@FreeBSD.org +and was later reimplemented by +.An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org . +This manual page was originally written by .An Scott Long Aq Mt scottl@FreeBSD.org and -.An Stefan Eßer Aq Mt se@FreeBSD.org . +.An Stefan Eßer Aq Mt se@FreeBSD.org +and was later substantially rewritten by +.An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org . diff --git a/lib/libutil/getlocalbase.c b/lib/libutil/getlocalbase.c index e8aabbab1e14..d48e0dbb33fd 100644 --- a/lib/libutil/getlocalbase.c +++ b/lib/libutil/getlocalbase.c @@ -1,7 +1,7 @@ -/*- +/* * SPDX-License-Identifier: BSD-2-Clause * - * Copyright 2020 Stefan Eßer + * Copyright (c) 2026 Dag-Erling Smørgrav * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -27,61 +27,83 @@ #include #include -#include + #include -#include -#include #include +#include +#include +#include #include -#ifndef LOCALBASE_PATH -#define LOCALBASE_PATH _PATH_LOCALBASE +#ifndef _PATH_LOCALBASE +#define _PATH_LOCALBASE "/usr/local" #endif -#ifndef LOCALBASE_CTL_LEN -#define LOCALBASE_CTL_LEN MAXPATHLEN -#endif +/* + * Used in case of error; guaranteed to not be the start of a valid path + * name. Deliberately includes a trailing path separator so that any + * access will fail with ENOTDIR. + */ +#define INVALID_PREFIX "/dev/null/" -/* Any prefix guaranteed to not be the start of a valid path name */ -#define ILLEGAL_PREFIX "/dev/null/" +/* + * Copies a path from src to dst, which may point to the same buffer, + * while deduplicating path separators. Returns false if the path is not + * absolute or the result (including the terminating NUL) exceeds len + * characters. + */ +static bool +normalize(const char *src, char *dst, size_t len) +{ + if (*src != '/' || len == 0) + return (false); + while (*src == '/') + src++; + do { + *dst++ = '/'; + if (--len == 0) + return (false); + while (*src != '\0' && *src != '/') { + *dst++ = *src++; + if (--len == 0) + return (false); + } + while (*src == '/') + src++; + } while (*src != '\0'); + *dst = '\0'; + return (true); +} const char * getlocalbase(void) { -#if LOCALBASE_CTL_LEN > 0 - int localbase_oid[2] = {CTL_USER, USER_LOCALBASE}; - static char localpath[LOCALBASE_CTL_LEN]; - size_t localpathlen = LOCALBASE_CTL_LEN; -#endif - char *tmppath; + static const int oid[2] = { CTL_USER, USER_LOCALBASE }; + static char buf[MAXPATHLEN]; static const char *localbase = NULL; + char *path; + size_t len = sizeof(buf); if (localbase != NULL) return (localbase); - if (issetugid() == 0) { - tmppath = getenv("LOCALBASE"); - if (tmppath != NULL && tmppath[0] != '\0') { - localbase = tmppath; - return (localbase); - } + /* If not privileged, try the environment first */ + if ((path = secure_getenv("LOCALBASE")) != NULL && *path != '\0') { + if (!normalize(path, buf, sizeof(buf))) + return (localbase = INVALID_PREFIX); + return (localbase = buf); } -#if LOCALBASE_CTL_LEN > 0 - if (sysctl(localbase_oid, 2, localpath, &localpathlen, NULL, 0) != 0) { - if (errno != ENOMEM) - localbase = LOCALBASE_PATH; - else - localbase = ILLEGAL_PREFIX; - } else { - if (localpath[0] != '\0') - localbase = localpath; - else - localbase = LOCALBASE_PATH; + /* Next, try the sysctl variable */ + if (sysctl(oid, 2, buf, &len, NULL, 0) != 0) { + if (errno == ENOMEM) + return (localbase = INVALID_PREFIX); + } else if (*buf != '\0') { + if (!normalize(buf, buf, sizeof(buf))) + return (localbase = INVALID_PREFIX); + return (localbase = buf); } -#else - localbase = LOCALBASE_PATH; -#endif - return (localbase); + /* Fall back to the hardcoded default */ + return (localbase = _PATH_LOCALBASE); } diff --git a/lib/libutil/tests/Makefile b/lib/libutil/tests/Makefile index cdcf3466aec8..2523c02eb33d 100644 --- a/lib/libutil/tests/Makefile +++ b/lib/libutil/tests/Makefile @@ -7,6 +7,7 @@ TAP_TESTS_C+= trimdomain-nodomain_test ATF_TESTS_C+= cpuset_test ATF_TESTS_C+= expand_number_test ATF_TESTS_C+= forkpty_test +ATF_TESTS_C+= getlocalbase_test WARNS?= 2 LIBADD+= util diff --git a/lib/libutil/tests/getlocalbase_test.c b/lib/libutil/tests/getlocalbase_test.c new file mode 100644 index 000000000000..4f90ddf26cc5 --- /dev/null +++ b/lib/libutil/tests/getlocalbase_test.c @@ -0,0 +1,92 @@ +/*- + * Copyright (c) 2026 Dag-Erling Smørgrav + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +#include +#include +#include +#include +#include + +#include + +#define INVALID_PREFIX "/dev/null/" + +#define X31 "/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +#define X32 "/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +#define X64 X32 X32 +#define X128 X64 X64 +#define X256 X128 X128 +#define X512 X256 X256 +#define X1024 X512 X512 +#define X1023 X512 X256 X128 X64 X32 X31 + +static struct { + const char *in, *out; +} tests[] = { + { "", _PATH_LOCALBASE }, + { "/", "/" }, + { "//", "/" }, + { "///", "/" }, + { "foo", INVALID_PREFIX }, + { "/foo", "/foo" }, + { "//foo", "/foo" }, + { "/foo/", "/foo" }, + { "/foo//", "/foo" }, + { "//foo//", "/foo" }, + { "/foo/bar", "/foo/bar" }, + { "/foo/bar/", "/foo/bar" }, + { "/foo//bar", "/foo/bar" }, + { "/foo//bar/", "/foo/bar" }, + { "//foo/bar", "/foo/bar" }, + { "//foo/bar/", "/foo/bar" }, + { "//foo//bar", "/foo/bar" }, + { "//foo//bar/", "/foo/bar" }, + { _PATH_LOCALBASE, _PATH_LOCALBASE }, + { X31, X31 }, + { X32, X32 }, + { X64, X64 }, + { X128, X128 }, + { X256, X256 }, + { X512, X512 }, + { X1023, X1023 }, + { X1024, INVALID_PREFIX }, + { 0 } +}; +_Static_assert(sizeof(X1023) == MAXPATHLEN, "Unexpected MAXPATHLEN value"); + +ATF_TC(environment); +ATF_TC_HEAD(environment, tc) +{ + atf_tc_set_md_var(tc, "descr", "Tests getting the local base from the " + "environment and path normalization"); +} + +ATF_TC_BODY(environment, tc) +{ + pid_t pid; + int i, wstatus; + + for (i = 0; tests[i].in != NULL; i++) { + ATF_REQUIRE((pid = fork()) >= 0); + if (pid == 0) { + ATF_REQUIRE_EQ(setenv("LOCALBASE", tests[i].in, 1), 0); + ATF_REQUIRE_STREQ(getlocalbase(), tests[i].out); + _exit(0); + } + ATF_REQUIRE_EQ(waitpid(0, &wstatus, 0), pid); + ATF_CHECK(WIFEXITED(wstatus)); + ATF_CHECK_EQ(WEXITSTATUS(wstatus), 0); + } +} + +ATF_TP_ADD_TCS(tp) +{ + ATF_TP_ADD_TC(tp, environment); + return (atf_no_error()); +} From nobody Tue Jul 21 15:21:26 2026 X-Original-To: dev-commits-src-main@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 4h4Lh63vGxz6m4wK for ; Tue, 21 Jul 2026 15:21:26 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4Lh63934z3mrD for ; Tue, 21 Jul 2026 15:21:26 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784647286; 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=KjR+sQDkQk4xfzHLx/9HPIAnVCrpw47OcfJPLnNW8OM=; b=TCfT/Em8ap3u2rcQ8tf/Vqz2MJwB6aYkxIqK5LhD8UMxs2NGWuny6ePvRfi1Cvj9lkf95e tk0hUYSumxwYn9RugxmF3vQ5CXB1WjdzM9NttDCXxuwes5jMBc7/Gpp/olAwOm4RoOWLwH aPJnINlfE9thWLbxgWIGKKGwBd05/Mu3IMM4FFABg4Sj3t2f7mWMIe5wrVWryxPO7JEKrV YemLt7KVsQey0WMi2UZ2hp/0VRJHGXcAilD61yoo4S03Kb+bMOYJK5yHpa2jhtAQKaZL2S lfS0MMg9SMQ785uAlWRFWGtnwraWkFiFae2/iAueilfkM8rw3dDvSxsJBO09Fg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784647286; a=rsa-sha256; cv=none; b=t6Q8qqYfkd/ebxGhU5CBrp0qvOZeks/VPUlr8PBAW5U3jhnZH+zKyZRl5nsdrbOH6HcBXu zyTZ0r3niq1B2bxfSduncudRsHkKQ1WouLFW3kbPbXaD7RL7V9w8fcXjxIuD61SxNmFjKs eBl8NpwRhBfuXiWAzNrKrUM8vF5RkPmzFM3Rp9ePsGRXrm0PNGVuZjePdwL0H0AEto1ojW pIjkWzzKE9LlPFmpInvcILciEE0U6W2aRVvz2Wb9QUP8OSC0nHJY3puPxX0czMvtVQMzlK 3Pit8VofOMgRlR4dEBEq5VWHhD2GfanO0/cfWmJRlts8UsCqkPOA/SkT0V6QsQ== 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=1784647286; 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=KjR+sQDkQk4xfzHLx/9HPIAnVCrpw47OcfJPLnNW8OM=; b=U28Xdw6Ss2zyULzmvlBG96s3vPb4VEOaj4OszxqfevsLtGuRr24gCilVp5Vz/rVhxR1vQF uwhMwu4ANm37SiGbRcFKxxOxDmdwb0T+N6kbfDwnT8j3W6eKkCLfA4Gh6tEx8dYF7KzuCA JgDaPmYYbcsVUperZp+cbwgO2dKrg3RyNFskHo4jNkBkFnDd6woRo7yxLGeUaqqzUpVvr+ DDEYz2XNwFCAtk0J4h4vlDY/3aZfVIvhk/RLGko7bXF+dXHEkhUxLiZ5r8vjfGegCacVjt 9YBU8eKN6iwkM1mebOI0u5uLENJ23/DxZzxOIDRpaGplWvL6R3R4a+iKMV4B1w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4Lh62B9Dzv0f for ; Tue, 21 Jul 2026 15:21:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 23f2e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 15:21:26 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Richard Scheffenegger Subject: git: f22b08443f6a - main - tcp_hostcache: explicitly typecast atomic_load_int to (int) for comparison List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: rscheff X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f22b08443f6ae3620dd14ade4e2376b8531fd6f3 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 15:21:26 +0000 Message-Id: <6a5f8e76.23f2e.57e0367f@gitrepo.freebsd.org> The branch main has been updated by rscheff: URL: https://cgit.FreeBSD.org/src/commit/?id=f22b08443f6ae3620dd14ade4e2376b8531fd6f3 commit f22b08443f6ae3620dd14ade4e2376b8531fd6f3 Author: Richard Scheffenegger AuthorDate: 2026-07-21 14:51:02 +0000 Commit: Richard Scheffenegger CommitDate: 2026-07-21 15:20:32 +0000 tcp_hostcache: explicitly typecast atomic_load_int to (int) for comparison Sponsored by: NetApp, Inc. MFC after: 1 week Reviewed By: tuexen, #transport, markj Differential Revision: https://reviews.freebsd.org/D58360 --- sys/netinet/tcp_hostcache.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/netinet/tcp_hostcache.c b/sys/netinet/tcp_hostcache.c index e5c20b6f2475..fbf81b1f2303 100644 --- a/sys/netinet/tcp_hostcache.c +++ b/sys/netinet/tcp_hostcache.c @@ -768,7 +768,7 @@ tcp_hc_purge_internal(int all) "bucket length out of range at %u: %u", i, head->hch_length)); if (all || - atomic_load_int(&hc_entry->hc_expire) <= 0) { + (int)atomic_load_int(&hc_entry->hc_expire) <= 0) { if (hc_prev != NULL) { KASSERT(hc_entry == CK_SLIST_NEXT(hc_prev, hc_q), From nobody Tue Jul 21 15:55:14 2026 X-Original-To: dev-commits-src-main@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 4h4MR70y96z6m7DG for ; Tue, 21 Jul 2026 15:55:15 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4MR70DK8z3rQ5 for ; Tue, 21 Jul 2026 15:55:15 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784649315; 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=z7vyvynnVZ2jolL/xtaW0TLz7jMrok1JB24pU3RY5rU=; b=ugzT33yGhGzIVMImgt902j6FpSLbgkmOn9x8wckmsYLEOApH1SuBTX8QqIidTdnU7e+oOT 7SXOVB4I+gCVZdlEktmUsdXBZPUoWY5dPPBanxAQnSNzUEOEIPUx68K/e6GRMD00o9s680 IqD6ET9rSprrVkd+l8td+S1/E0aQXcepb8j+oQt0dc16TISJw7Eli42jqL67XE+NGYubdP fVPOFQ0njvFIMDHU9tQ6cATvQMZbflch3gPF93qMU7QN0ZfGElFyFru3FiChaXRgOXIzwZ eKHuEvIjiYt59IWpNA+kaqfbzS96Vx+yvAQVA1P6UbcW7IuybboVZkFS9Ev2wA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784649315; a=rsa-sha256; cv=none; b=yIp7sVSLrqtn7sk74ZHu6oBG5XccAnV2Q9n7tsGjZybDT8qbJBYGOncc+fQEmG45puM6rG SiTkRMv3ZMYcESoxiXRDqxWRR9/GwJ5qLmCs9cX5XhqDKF48eRfvjDxJrebOEinfYbOoAc EGOciJazBELQzJ0V/7NAUj10lVz2a8dyLmzEFhJmkHoLHrpKJS1KaeHIEPdK0QvNWK8vAh fVvmhOwZPmtAUN8nN5GGoYSXpf9kDsQ55KXCSMyolkfds+LWO7RizfXIsIVxk5PakmBznp /o4r/8BWWRyoTX2OtFIbKpbuE5i+e9aS9dE7OtJDZ8+akM5w5qtY+PKoJFr1Jg== 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=1784649315; 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=z7vyvynnVZ2jolL/xtaW0TLz7jMrok1JB24pU3RY5rU=; b=CD9ue7adMMT5Aym0Qpwj2qkuoJ6yKHEwzapw0rwE1Bzaf0b1ASTuE3zLTLoHV/LAZTFuAC b9wvHtaCSLC5mZ4MijYUwGIwlS9hWItlF5jAc+ZmlMSvWDRLE1LsRwEik2hBT19uEsEGqF fJASqxlT6WUvI4DqptotMFli1XXrQcdhnL8rnL4UbQOKJeTg6ZUbo6a16ikS+qS8o4Upeo Mg76sywFocO3+gwLd7xPFueWgT75OMWAcJQ6CZBCjl/6gjN6SGDREmxAh2xwwW3l0tKPPx ZKZLzr/tgKiepTvzuO3UG8dVSvmXPquhPw4UnwkcYco+cIXOfz9pZGKfB7bhzw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4MR65t1dzvlK for ; Tue, 21 Jul 2026 15:55:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 2688f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 15:55:14 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: a5307a57c46f - main - uvideo: fix use-after-free in mmap buffer lifetime management List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a5307a57c46f16f5b3c29708f1e528963dea150c Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 15:55:14 +0000 Message-Id: <6a5f9662.2688f.1c1a6132@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=a5307a57c46f16f5b3c29708f1e528963dea150c commit a5307a57c46f16f5b3c29708f1e528963dea150c Author: Baptiste Daroussin AuthorDate: 2026-07-20 13:52:06 +0000 Commit: Baptiste Daroussin CommitDate: 2026-07-21 15:53:13 +0000 uvideo: fix use-after-free in mmap buffer lifetime management The uvideo driver freed the mmap buffer (contigmalloc'd) in several paths (VIDIOC_STREAMOFF, last close, detach) without coordinating with the lifetime of existing user-space mmap mappings. This could lead to use-after-free when user-space continued to access the mapped memory after the backing pages had been freed. Fix this by switching from the simple d_mmap callback to d_mmap_single with custom cdev_pager_ops, and by attaching the contig buffer to a single shared vm_object created at REQBUFS time: - uvideo_reqbufs() allocates a uvideo_mmap_state (independent of the softc) and a shared vm_object via cdev_pager_allocate() that spans the whole buffer; the softc holds one reference to it. - uvideo_cdev_mmap_single() simply hands out additional references to that shared object; the requested offset selects which buffer is mapped. The VM system tracks mapping lifetime through the object reference count, so no per-mapping bookkeeping is needed. - uvideo_pg_ctor/uvideo_pg_dtor validate the mapping and free the contig buffer together with the state when the last reference (softc's own or a user mapping) is dropped. - uvideo_pg_fault installs a fictitious page for the backing physical address, following the canonical device-pager pattern: update the passed-in page in place when it is already fictitious, otherwise allocate a fake page and vm_page_replace() the busy placeholder, so that dev_pager_dealloc() does not deadlock. - uvideo_vs_free_frame() drops the softc's reference instead of contigfree()'ing directly; if mappings still exist the buffer stays alive until the last uvideo_pg_dtor(). - VIDIOC_STREAMOFF no longer frees the buffer (per V4L2 spec). - Last close always releases the buffer (deferred if mappings exist). - The mmap_state outlives the softc, so the pager dtor can safely free the buffer even after device detach. Reported by: 章鱼哥 (@aipyapp) (www.aipyaipy.com) Reported by: Chris Jarrett-Davies of the OpenAI Codex Security Team --- sys/dev/usb/video/uvideo.c | 176 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 162 insertions(+), 14 deletions(-) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index 910915f9f745..07f74f55b121 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -43,9 +43,13 @@ #include #include #include +#include #include #include +#include +#include +#include #include #include @@ -163,7 +167,26 @@ static d_read_t uvideo_cdev_read; static d_ioctl_t uvideo_cdev_ioctl; static d_poll_t uvideo_cdev_poll; static d_kqfilter_t uvideo_cdev_kqfilter; -static d_mmap_t uvideo_cdev_mmap; +static d_mmap_single_t uvideo_cdev_mmap_single; +static int uvideo_pg_ctor(void *, vm_ooffset_t, vm_prot_t, + vm_ooffset_t, struct ucred *, u_short *); +static void uvideo_pg_dtor(void *); +static int uvideo_pg_fault(vm_object_t, vm_ooffset_t, int, + vm_page_t *); + +/* + * Per-buffer state for mmap lifetime management. Allocated together + * with the contig buffer at REQBUFS time and attached to a single + * shared vm_object whose reference count tracks the active mappings. + * The buffer is freed by cdev_pg_dtor() when the last reference (the + * softc's own or a user mapping) is dropped. Lives independently of + * the softc so the pager dtor can safely free the buffer even after + * device detach. + */ +struct uvideo_mmap_state { + uint8_t *ms_buffer; + size_t ms_buffer_size; +}; static int uvideo_querycap(struct uvideo_softc *, struct v4l2_capability *); static int uvideo_enum_fmt(struct uvideo_softc *, struct v4l2_fmtdesc *); @@ -239,6 +262,7 @@ struct uvideo_softc { q_mmap sc_mmap_q; int sc_mmap_count; int sc_mmap_flag; + vm_object_t sc_mmap_object; uint8_t *sc_tmpbuf; int sc_tmpbuf_size; @@ -721,6 +745,12 @@ static const struct usb_config uvideo_bulk_config[1] = { }, }; +static const struct cdev_pager_ops uvideo_pager_ops = { + .cdev_pg_ctor = uvideo_pg_ctor, + .cdev_pg_dtor = uvideo_pg_dtor, + .cdev_pg_fault = uvideo_pg_fault, +}; + /* * Character device switch */ @@ -732,7 +762,7 @@ static struct cdevsw uvideo_cdevsw = { .d_ioctl = uvideo_cdev_ioctl, .d_poll = uvideo_cdev_poll, .d_kqfilter = uvideo_cdev_kqfilter, - .d_mmap = uvideo_cdev_mmap, + .d_mmap_single = uvideo_cdev_mmap_single, .d_name = "video", }; @@ -910,6 +940,7 @@ uvideo_attach(device_t dev) /* Init mmap queue */ STAILQ_INIT(&sc->sc_mmap_q); sc->sc_mmap_count = 0; + sc->sc_mmap_object = NULL; /* Allocate unit number and create character device */ make_dev_args_init(&args); @@ -2265,9 +2296,15 @@ uvideo_vs_free_frame(struct uvideo_softc *sc) fb->buf = NULL; } - if (sc->sc_mmap_buffer != NULL) { - contigfree(sc->sc_mmap_buffer, sc->sc_mmap_buffer_size, - M_USBDEV); + if (sc->sc_mmap_object != NULL) { + /* + * Drop the softc's reference to the shared mmap object. + * If user-space mappings still exist, the object and its + * backing contig buffer stay alive until the last mapping + * is dropped, at which point uvideo_pg_dtor() frees them. + */ + vm_object_deallocate(sc->sc_mmap_object); + sc->sc_mmap_object = NULL; sc->sc_mmap_buffer = NULL; sc->sc_mmap_buffer_size = 0; } @@ -2857,9 +2894,15 @@ uvideo_cdev_close(struct cdev *dev, int flags, int fmt, struct thread *td) sc->sc_streaming = 0; mtx_unlock(&sc->sc_mtx); uvideo_vs_close(sc); - uvideo_vs_free_frame(sc); } + /* + * Release mmap buffer. If there are still active mmap + * mappings, the actual contigfree() is deferred to the + * last uvideo_pg_dtor() invocation. + */ + uvideo_vs_free_frame(sc); + if (sc->sc_fbuffer != NULL) { free(sc->sc_fbuffer, M_USBDEV); sc->sc_fbuffer = NULL; @@ -3083,28 +3126,110 @@ uvideo_cdev_kqfilter(struct cdev *dev, struct knote *kn) } static int -uvideo_cdev_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr, - int nprot, vm_memattr_t *memattr) +uvideo_cdev_mmap_single(struct cdev *dev, vm_ooffset_t *offset, + vm_size_t size, struct vm_object **object, int nprot) { struct uvideo_softc *sc = dev->si_drv1; if (sc == NULL || sc->sc_dying) return (ENXIO); - if (offset >= sc->sc_mmap_buffer_size) + if (sc->sc_mmap_object == NULL) return (EINVAL); - if (sc->sc_mmap_buffer == NULL) + if (*offset >= sc->sc_mmap_buffer_size) return (EINVAL); - if (!sc->sc_mmap_flag) - sc->sc_mmap_flag = 1; + if (*offset + size > sc->sc_mmap_buffer_size) + size = sc->sc_mmap_buffer_size - *offset; - *paddr = vtophys(sc->sc_mmap_buffer + offset); + /* + * Hand out a reference to the shared mmap object, which spans the + * whole buffer; the requested offset selects which buffer within + * it is mapped. The VM system tracks mapping lifetime through the + * object reference count, so no per-mapping bookkeeping is needed. + */ + vm_object_reference(sc->sc_mmap_object); + *object = sc->sc_mmap_object; + + sc->sc_mmap_flag = 1; + + return (0); +} + +static int +uvideo_pg_ctor(void *handle, vm_ooffset_t size, vm_prot_t prot, + vm_ooffset_t foff, struct ucred *cred, u_short *color) +{ + struct uvideo_mmap_state *ms = handle; + + if (ms->ms_buffer == NULL || foff + size > ms->ms_buffer_size) + return (EINVAL); + *color = 0; return (0); } +static void +uvideo_pg_dtor(void *handle) +{ + struct uvideo_mmap_state *ms = handle; + + /* + * The last reference to the shared mmap object is gone (either the + * softc released it, or the final user mapping was dropped). Free + * the backing contig buffer and the state. + */ + if (ms->ms_buffer != NULL) + contigfree(ms->ms_buffer, ms->ms_buffer_size, M_USBDEV); + free(ms, M_USBDEV); +} + +static int +uvideo_pg_fault(vm_object_t object, vm_ooffset_t offset, int prot, + vm_page_t *mres) +{ + struct uvideo_mmap_state *ms = object->un_pager.devp.handle; + vm_paddr_t paddr; + vm_page_t m; + + if (ms->ms_buffer == NULL) + return (VM_PAGER_FAIL); + + if (offset >= ms->ms_buffer_size) + return (VM_PAGER_FAIL); + + paddr = vtophys(ms->ms_buffer + offset); + if (paddr == 0) + return (VM_PAGER_FAIL); + + if (((*mres)->flags & PG_FICTITIOUS) != 0) { + /* + * The passed-in page is already a fake page: just update + * its physical address in place. + */ + m = *mres; + vm_page_updatefake(m, paddr, object->memattr); + } else { + /* + * Replace the placeholder page allocated by the generic + * fault path with our own fake page. vm_page_getfake() can + * allocate and must not be called with the object lock held; + * vm_page_replace() then swaps the new page into the object + * and frees the placeholder. Without this the busy + * placeholder stays in the object and dev_pager_dealloc() + * dead-locks trying to acquire it. + */ + VM_OBJECT_WUNLOCK(object); + m = vm_page_getfake(paddr, object->memattr); + VM_OBJECT_WLOCK(object); + vm_page_replace(m, object, (*mres)->pindex, *mres); + *mres = m; + } + m->valid = VM_PAGE_BITS_ALL; + return (VM_PAGER_OK); +} + /* ---------------------------------------------------------------- */ /* V4L2 Ioctl Handlers */ /* ---------------------------------------------------------------- */ @@ -3508,6 +3633,7 @@ static int uvideo_reqbufs(struct uvideo_softc *sc, struct v4l2_requestbuffers *rb) { int i, buf_size, buf_size_total; + struct uvideo_mmap_state *ms; DPRINTFN(1, "reqbufs: count=%d\n", rb->count); @@ -3537,6 +3663,29 @@ uvideo_reqbufs(struct uvideo_softc *sc, struct v4l2_requestbuffers *rb) } sc->sc_mmap_buffer_size = buf_size_total; + /* + * Create a single shared vm_object backing the whole mmap buffer. + * Its reference count (bumped by each mmap() and held by the softc) + * tracks the lifetime of the mappings; the contig buffer is freed + * by uvideo_pg_dtor() when the last reference goes away, which may + * be after device detach. + */ + ms = malloc(sizeof(*ms), M_USBDEV, M_WAITOK | M_ZERO); + ms->ms_buffer = sc->sc_mmap_buffer; + ms->ms_buffer_size = sc->sc_mmap_buffer_size; + sc->sc_mmap_object = cdev_pager_allocate(ms, OBJT_DEVICE, + &uvideo_pager_ops, sc->sc_mmap_buffer_size, VM_PROT_ALL, + 0, curthread->td_ucred); + if (sc->sc_mmap_object == NULL) { + free(ms, M_USBDEV); + contigfree(sc->sc_mmap_buffer, sc->sc_mmap_buffer_size, + M_USBDEV); + sc->sc_mmap_buffer = NULL; + sc->sc_mmap_buffer_size = 0; + sc->sc_mmap_count = 0; + return (ENOMEM); + } + DPRINTFN(1, "allocated %d bytes mmap buffer\n", buf_size_total); for (i = 0; i < sc->sc_mmap_count; i++) { @@ -3671,7 +3820,6 @@ uvideo_streamoff(struct uvideo_softc *sc, int type) mtx_unlock(&sc->sc_mtx); uvideo_vs_close(sc); - uvideo_vs_free_frame(sc); return (0); } From nobody Tue Jul 21 16:58:42 2026 X-Original-To: dev-commits-src-main@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 4h4NrL1z6mz6mBV9 for ; Tue, 21 Jul 2026 16:58:42 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4NrL1M5yz3x8h for ; Tue, 21 Jul 2026 16:58:42 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784653122; 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=HUMNyRc0HqqkKGVFbQKbpD1qelc/E+8ZUehf9C0ytY4=; b=U4oDdVqxDv+sKuoT8CUk3jXHArkFgiEZfnK3sEqnMUJUZ7GJKX563lR0HMOC60JcrC+RCH QB4EIw/PGp9FTeow6q8pYXM9Xzh1sS16rFZ40fxgBueXBIIG5lbuWNzomT8kpFe+3V3yYM mL+ownsv5Jn/qXTYLkTWJe2KXdYKiplyq5+69pC7Mu1LblYbuG+7X5sVH5Jl6sNT9IKulf 8OyCiHOeY9zJgmLtS9N6MPrfSgdPTJqrC1MEDGvn3v1r7eQBk6f+EbdtjuEuky2cf2eV11 P8LRlFpzv/rMHAI3NWrNBGBmu5T+5hSs+mrHwm+Mnh3FhiGkgpNoGw7Ux+g62A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784653122; a=rsa-sha256; cv=none; b=rBfvJ9niWGYCX3Rpe7qhpZNJzSsJ5EcH+6CkrCL5FXfYu3lWuiWVDEkvwhA9TJefOsiM/Y +V1pR26SvDTNOQa3DiY/y3HucfAydSz7oCLE6L5eTureg0Fm1IS61OokUVsQYMy8dWmfj0 sY2rHiTr3u35BjvESJNnMXUilfa7fGlLHWn/oKnwlsfaFNpWL1xSPEt141m4FeGkoKa0pP tgsuJwtkgTf5q3rA7IM8qC8n90Hr6NlswbqCBwZyzDgZJAY8Gja06xUL2jEt4LbfSthsFR Z8ITbEOnQWbUBgajJa2ueCIlA1pE+VKU5p5JPCy5oGnKH9YWTwVqdRvLdiIFIA== 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=1784653122; 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=HUMNyRc0HqqkKGVFbQKbpD1qelc/E+8ZUehf9C0ytY4=; b=WpwoamHrZnSPot7/xyvvaMbBTuRtzz4huu0vUwyt1PJIJ8G/zKGK1SzTxgLxQhhnhRoOdr qu6IWNlDBsnu59RFbUtZDhYmEI1xsQUKNEBj1vrO/OzihZuNIVZRBNWwbhTPj77cBxqN7H qRYTPbT24yj6d/jzddBs2/v5WH1kjX0nFUMyp058yia5i0IcmgSlknopnbMR29NyFhxzv+ /h/mgraiqJ5iOi7Y+plMmqMNsFaysY5VwXJC5Q80makTWLbxa6OPGz1ciYUmx6QE6S0e8l RV4EVEQKY4VVbZgtjSdCFwBJUlk1dvH+6QFSmulCsDegt7UyOosXE9eyx0PGng== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4NrL0DcJzwgV for ; Tue, 21 Jul 2026 16:58:42 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 35caf by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 16:58:42 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kyle Evans Subject: git: 2e3892671a6f - main - hid: u2f: stop interrupts on last-close List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kevans X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2e3892671a6fe2bceff6a9d8b439e7acd27dc28a Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 16:58:42 +0000 Message-Id: <6a5fa542.35caf.51466520@gitrepo.freebsd.org> The branch main has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=2e3892671a6fe2bceff6a9d8b439e7acd27dc28a commit 2e3892671a6fe2bceff6a9d8b439e7acd27dc28a Author: Kyle Evans AuthorDate: 2026-07-21 16:57:47 +0000 Commit: Kyle Evans CommitDate: 2026-07-21 16:58:19 +0000 hid: u2f: stop interrupts on last-close This fixes an issue with the Solo2 (and likely some of the Nitrokey family) where hangs would occur with OpenSSH- it issues a CANCEL prior to closing the device unconditionally, and without draining the read endpoint we end up seeing the response to that CANCEL the next time OpenSSH tries to connect. This throws the entire command/response sequence out of whack. This call used to break Yubikeys in some situations, but the fix that landed in 28d85db46b48 ("xhci: Do not drop and add bits in xhci") seems to have addressed that- presumably we sometimes end up stopping the command and desyncing at the controller level. This probably implies that we need a SYNCWRITE HID quirk, but that requires a little more work in usbhid_sync_xfer() and this doesn't seem to cause any problems in normal usage. Reviewed by: aokblast, wulf Differential Revision: https://reviews.freebsd.org/D58199 --- sys/dev/hid/u2f.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/sys/dev/hid/u2f.c b/sys/dev/hid/u2f.c index e1f696d72f01..d4bb56368080 100644 --- a/sys/dev/hid/u2f.c +++ b/sys/dev/hid/u2f.c @@ -223,7 +223,6 @@ u2f_detach(device_t dev) } taskqueue_drain(taskqueue_thread, &sc->sc_kqtask); - hid_intr_stop(sc->sc_dev); knlist_clear(&sc->sc_rsel.si_note, 0); knlist_destroy(&sc->sc_rsel.si_note); @@ -300,10 +299,8 @@ u2f_dtor(void *data) { struct u2f_softc *sc = data; -#ifdef NOT_YET /* Disable interrupts. */ hid_intr_stop(sc->sc_dev); -#endif mtx_lock(&sc->sc_mtx); sc->sc_state.open = false; From nobody Tue Jul 21 17:15:59 2026 X-Original-To: dev-commits-src-main@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 4h4PDJ0qNPz6mCsM for ; Tue, 21 Jul 2026 17:16:00 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4PDH5pfWz44fl for ; Tue, 21 Jul 2026 17:15:59 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784654159; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=e+jWvHC2XZ9ZQ84plIt/DTw08hIofhheFj2z2gJLdhs=; b=j4BElCtkn6RifOzghFLqNEFt0kOGw/sSjDtH1a73mTlOpWhGXUmU9C6vU3C2QBgF54fDbA p3hxSDELP/iCasLfHNN7UXPn0QRLEgHVvW0mXhNrxtp7WpxuCeVIrkXoy9srDvykKrn1P3 iMILy9/YX2IykDtWhWEtblxbAmpGaqSLjiEqvSLjBODZWob1vLMJkzW+D9CKPe2Kjb2VHQ uqcqSFelw8JG3lxHnYlJKDNczJDtT8MhXEJmom0YFgSEkb2+dbWv7q6u/w7HV4OZB1cj8/ xOkbbXetsW6cjr7ajee8cEXk7/fBWV514dJTHKVQAl+4ljHRI2HRWxidgdgofQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784654159; a=rsa-sha256; cv=none; b=vSy8nqq93ZMT3I4+F9FiIaAArigwnKErnpnwSLbjhMFxyWDXs2gNUT241erfd4GSDYRWfw GdxV8z8HZcefN31tmbNi9TmV3XjRxpAqoy114VGegvPEE5aV6YUgiMMMnHX7E/ubKMC1n3 NS2nLnn4LKsXvHixuac5gx0JAlkr1iLSplyjbp2Y1VkdSt+pPajZS7GoMOjXh0fEL2kQn7 epcVe5jywlJ+9i88KksJBSUqvz1sxXXfTmeCVL0xrOOcDksStQFg+V9pxV08fUxgZaso4r bMs6oZLsAD9B93kwrp8Y8t5wDMYWNG8krNdK5+5YnOlaGBnSdV9KHc5WCISFkA== 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=1784654159; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=e+jWvHC2XZ9ZQ84plIt/DTw08hIofhheFj2z2gJLdhs=; b=iwIF3mwxifk7FDG2n+QBVuOWGo1g+E79mt4I25FXvuhHwvFCfwNmwDYx0fFtB8QiPccIvg hgz5qKps1Aund1WlzUDeppOYiftxQ5ufJhQvKtAq55FHn9fLAIekEYNhPAw8UxQyxABjrQ EVmJYQAmuDI6xKDmNCL/xXFpJHIb0QpIYivfHkPMBrBLH+FdHAaZiR5W5Sz/mPDV2Zrv8t DgCt8MOX2WnnuqPbcBCAo/SPRRW91gvWW9T4mau2fFB9G4a83SN0/aPxJjTw2UuYFUDOYG VAIJMOP9tOvrhpUzneOKEd+t4YfzborW06gPv4TK/w2+XiTWF2BpqelqPkZnGQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4PDH3bKyzx0g for ; Tue, 21 Jul 2026 17:15:59 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 36e27 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 17:15:59 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Andre Silva From: Mitchell Horne Subject: git: c185935b0d52 - main - hwpmc: Add EXTERROR diagnostics to the hwpmc syscall path List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mhorne X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c185935b0d52f991d7e27fbac277ea8c9bb456a1 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 17:15:59 +0000 Message-Id: <6a5fa94f.36e27.49d57a1f@gitrepo.freebsd.org> The branch main has been updated by mhorne: URL: https://cgit.FreeBSD.org/src/commit/?id=c185935b0d52f991d7e27fbac277ea8c9bb456a1 commit c185935b0d52f991d7e27fbac277ea8c9bb456a1 Author: Andre Silva AuthorDate: 2026-06-12 15:38:57 +0000 Commit: Mitchell Horne CommitDate: 2026-07-21 17:14:39 +0000 hwpmc: Add EXTERROR diagnostics to the hwpmc syscall path Annotate validation failures in the PMC syscall handlers (allocate, attach, read/write) with EXTERROR(), so pmc(3) callers see which precondition failed, not a bare errno. Register HWPMC_MOD in exterr_cat.h and the generated filenames.h. Signed-off-by: Andre Silva Reviewed by: Ali Mashtizadeh , mhorne Sponsored by: AMD Pull Request: https://github.com/freebsd/freebsd-src/pull/2180 --- lib/libc/gen/exterr_cat_filenames.h | 1 + sys/dev/hwpmc/hwpmc_mod.c | 110 ++++++++++++++++++++++++++---------- sys/sys/exterr_cat.h | 1 + 3 files changed, 81 insertions(+), 31 deletions(-) diff --git a/lib/libc/gen/exterr_cat_filenames.h b/lib/libc/gen/exterr_cat_filenames.h index e098a94744f3..c93f84131ecf 100644 --- a/lib/libc/gen/exterr_cat_filenames.h +++ b/lib/libc/gen/exterr_cat_filenames.h @@ -4,6 +4,7 @@ */ [EXTERR_CAT_HWPMC_AMD] = "dev/hwpmc/hwpmc_amd.c", [EXTERR_CAT_HWPMC_IBS] = "dev/hwpmc/hwpmc_ibs.c", + [EXTERR_CAT_HWPMC_MOD] = "dev/hwpmc/hwpmc_mod.c", [EXTERR_CAT_VMM] = "dev/vmm/vmm_dev.c", [EXTERR_CAT_FUSE_DEVICE] = "fs/fuse/fuse_device.c", [EXTERR_CAT_FUSE_VFS] = "fs/fuse/fuse_vfsops.c", diff --git a/sys/dev/hwpmc/hwpmc_mod.c b/sys/dev/hwpmc/hwpmc_mod.c index efc2aefec2b9..32bb00d671fe 100644 --- a/sys/dev/hwpmc/hwpmc_mod.c +++ b/sys/dev/hwpmc/hwpmc_mod.c @@ -62,6 +62,9 @@ #include #include +#define EXTERR_CATEGORY EXTERR_CAT_HWPMC_MOD +#include + #include /* needs to be after */ #include @@ -3245,8 +3248,10 @@ pmc_start(struct pmc *pm) */ pmc_save_cpu_binding(&pb); cpu = PMC_TO_CPU(pm); - if (!pmc_cpu_is_active(cpu)) - return (ENXIO); + if (!pmc_cpu_is_active(cpu)) { + return (EXTERROR(ENXIO, "PMC CPU %ju is not active for start", + (uintmax_t)cpu)); + } pmc_select_cpu(cpu); /* @@ -3312,9 +3317,10 @@ pmc_stop(struct pmc *pm) cpu = PMC_TO_CPU(pm); KASSERT(cpu >= 0 && cpu < pmc_cpu_max(), ("[pmc,%d] illegal cpu=%d", __LINE__, cpu)); - if (!pmc_cpu_is_active(cpu)) - return (ENXIO); - + if (!pmc_cpu_is_active(cpu)) { + return (EXTERROR(ENXIO, "PMC CPU %ju is not active for stop", + (uintmax_t)cpu)); + } pmc_select_cpu(cpu); ri = PMC_TO_ROWINDEX(pm); @@ -3408,29 +3414,39 @@ pmc_do_op_pmcallocate(struct thread *td, struct pmc_op_pmcallocate *pa) cpu = pa->pm_cpu; p = td->td_proc; - /* Requested mode must exist. */ if ((mode != PMC_MODE_SS && mode != PMC_MODE_SC && mode != PMC_MODE_TS && mode != PMC_MODE_TC)) - return (EINVAL); + return (EXTERROR(EINVAL, "Invalid PMC mode %ju", + (uintmax_t)mode)); /* Requested CPU must be valid. */ if (cpu != PMC_CPU_ANY && cpu >= pmc_cpu_max()) - return (EINVAL); + return (EXTERROR(EINVAL, "Invalid PMC CPU %ju", + (uintmax_t)cpu)); /* * Virtual PMCs should only ask for a default CPU. * System mode PMCs need to specify a non-default CPU. */ if ((PMC_IS_VIRTUAL_MODE(mode) && cpu != PMC_CPU_ANY) || - (PMC_IS_SYSTEM_MODE(mode) && cpu == PMC_CPU_ANY)) - return (EINVAL); + (PMC_IS_SYSTEM_MODE(mode) && cpu == PMC_CPU_ANY)) { + if (PMC_IS_VIRTUAL_MODE(mode)) { + return (EXTERROR(EINVAL, + "PMC mode %ju requires the default CPU", + (uintmax_t)mode)); + } + return (EXTERROR(EINVAL, + "PMC mode %ju requires an explicit CPU", + (uintmax_t)mode)); + } /* * Check that an inactive CPU is not being asked for. */ if (PMC_IS_SYSTEM_MODE(mode) && !pmc_cpu_is_active(cpu)) - return (ENXIO); + return (EXTERROR(ENXIO, "PMC CPU %ju is not active", + (uintmax_t)cpu)); /* * Refuse an allocation for a system-wide PMC if this process has been @@ -3453,22 +3469,26 @@ pmc_do_op_pmcallocate(struct thread *td, struct pmc_op_pmcallocate *pa) if ((flags & ~(PMC_F_DESCENDANTS | PMC_F_LOG_PROCCSW | PMC_F_LOG_PROCEXIT | PMC_F_CALLCHAIN | PMC_F_USERCALLCHAIN | PMC_F_EV_PMU)) != 0) - return (EINVAL); + return (EXTERROR(EINVAL, "Invalid PMC flags %#jx", + (uintmax_t)flags)); /* PMC_F_USERCALLCHAIN is only valid with PMC_F_CALLCHAIN. */ if ((flags & (PMC_F_CALLCHAIN | PMC_F_USERCALLCHAIN)) == PMC_F_USERCALLCHAIN) - return (EINVAL); + return (EXTERROR(EINVAL, + "PMC_F_USERCALLCHAIN requires PMC_F_CALLCHAIN")); /* PMC_F_USERCALLCHAIN is only valid for sampling mode. */ if ((flags & PMC_F_USERCALLCHAIN) != 0 && mode != PMC_MODE_TS && mode != PMC_MODE_SS) - return (EINVAL); + return (EXTERROR(EINVAL, + "PMC_F_USERCALLCHAIN requires sampling mode")); /* Process logging options are not allowed for system PMCs. */ if (PMC_IS_SYSTEM_MODE(mode) && (flags & (PMC_F_LOG_PROCCSW | PMC_F_LOG_PROCEXIT)) != 0) - return (EINVAL); + return (EXTERROR(EINVAL, + "Process logging flags are not valid for system PMCs")); /* * All sampling mode PMCs need to be able to interrupt the CPU. @@ -3479,11 +3499,14 @@ pmc_do_op_pmcallocate(struct thread *td, struct pmc_op_pmcallocate *pa) /* A valid class specifier should have been passed in. */ pcd = pmc_class_to_classdep(class); if (pcd == NULL) - return (EINVAL); + return (EXTERROR(EINVAL, "Invalid PMC class %ju", + (uintmax_t)class)); /* The requested PMC capabilities should be feasible. */ if ((pcd->pcd_caps & caps) != caps) - return (EOPNOTSUPP); + return (EXTERROR(EOPNOTSUPP, + "Requested PMC capabilities %#jx are not supported", + (uintmax_t)caps)); PMCDBG4(PMC,ALL,2, "event=%d caps=0x%x mode=%d cpu=%d", pa->pm_ev, caps, mode, cpu); @@ -3561,7 +3584,11 @@ pmc_do_op_pmcallocate(struct thread *td, struct pmc_op_pmcallocate *pa) if (n == md->pmd_npmc) { pmc_destroy_pmc_descriptor(pmc); - return (EINVAL); + /* Preserve a more specific error from the class allocator. */ + if ((td->td_pflags2 & TDP2_EXTERR) != 0) + return (EINVAL); + return (EXTERROR(EINVAL, + "No PMC row accepted the allocation request")); } /* Fill in the correct value in the ID field. */ @@ -3588,12 +3615,21 @@ pmc_do_op_pmcallocate(struct thread *td, struct pmc_op_pmcallocate *pa) phw = pmc_pcpu[cpu]->pc_hwpmcs[n]; pcd = pmc_ri_to_classdep(md, n, &adjri); - if ((phw->phw_state & PMC_PHW_FLAG_IS_ENABLED) == 0 || - (error = pcd->pcd_config_pmc(cpu, adjri, pmc)) != 0) { + if ((phw->phw_state & PMC_PHW_FLAG_IS_ENABLED) == 0) { (void)pcd->pcd_release_pmc(cpu, adjri, pmc); pmc_destroy_pmc_descriptor(pmc); pmc_restore_cpu_binding(&pb); - return (EPERM); + return (EXTERROR(EPERM, + "PMC row %ju on CPU %ju is not enabled", + (uintmax_t)n, (uintmax_t)cpu)); + } + if ((error = pcd->pcd_config_pmc(cpu, adjri, pmc)) != 0) { + (void)pcd->pcd_release_pmc(cpu, adjri, pmc); + pmc_destroy_pmc_descriptor(pmc); + pmc_restore_cpu_binding(&pb); + return (EXTERROR(EPERM, + "PMC configuration failed for row %ju on CPU %ju", + (uintmax_t)n, (uintmax_t)cpu)); } pmc_restore_cpu_binding(&pb); @@ -3617,7 +3653,7 @@ pmc_do_op_pmcallocate(struct thread *td, struct pmc_op_pmcallocate *pa) if (error != 0) { pmc_release_pmc_descriptor(pmc); pmc_destroy_pmc_descriptor(pmc); - return (error); + return (EXTERROR(error, "Failed to register PMC owner")); } /* @@ -3640,7 +3676,8 @@ pmc_do_op_pmcattach(struct thread *td, struct pmc_op_pmcattach a) sx_assert(&pmc_sx, SX_XLOCKED); if (a.pm_pid < 0) { - return (EINVAL); + return (EXTERROR(EINVAL, "Invalid PMC attach pid %jd", + (intmax_t)a.pm_pid)); } else if (a.pm_pid == 0) { a.pm_pid = td->td_proc->p_pid; } @@ -3650,14 +3687,18 @@ pmc_do_op_pmcattach(struct thread *td, struct pmc_op_pmcattach a) return (error); if (PMC_IS_SYSTEM_MODE(PMC_TO_MODE(pm))) - return (EINVAL); + return (EXTERROR(EINVAL, + "Cannot attach a system-mode PMC to a process")); /* PMCs may be (re)attached only when allocated or stopped */ if (pm->pm_state == PMC_STATE_RUNNING) { - return (EBUSY); + return (EXTERROR(EBUSY, + "PMC must be stopped before attach")); } else if (pm->pm_state != PMC_STATE_ALLOCATED && pm->pm_state != PMC_STATE_STOPPED) { - return (EINVAL); + return (EXTERROR(EINVAL, + "PMC state %ju does not allow attach", + (uintmax_t)pm->pm_state)); } /* lookup pid */ @@ -3696,7 +3737,8 @@ pmc_do_op_pmcdetach(struct thread *td, struct pmc_op_pmcattach a) int error; if (a.pm_pid < 0) { - return (EINVAL); + return (EXTERROR(EINVAL, "Invalid PMC detach pid %jd", + (intmax_t)a.pm_pid)); } else if (a.pm_pid == 0) a.pm_pid = td->td_proc->p_pid; @@ -3774,7 +3816,8 @@ pmc_do_op_pmcrw(const struct pmc_op_pmcrw *prw, pmc_value_t *valp) /* Must have at least one flag set. */ if ((prw->pm_flags & (PMC_F_OLDVALUE | PMC_F_NEWVALUE)) == 0) - return (EINVAL); + return (EXTERROR(EINVAL, + "PMCRW requires PMC_F_OLDVALUE and/or PMC_F_NEWVALUE")); /* Locate PMC descriptor. */ error = pmc_find_pmc(prw->pm_pmcid, &pm); @@ -3785,12 +3828,15 @@ pmc_do_op_pmcrw(const struct pmc_op_pmcrw *prw, pmc_value_t *valp) if (pm->pm_state != PMC_STATE_ALLOCATED && pm->pm_state != PMC_STATE_STOPPED && pm->pm_state != PMC_STATE_RUNNING) - return (EINVAL); + return (EXTERROR(EINVAL, + "PMC state %ju does not allow read/write", + (uintmax_t)pm->pm_state)); /* Writing a new value is allowed only for 'STOPPED' PMCs. */ if (pm->pm_state == PMC_STATE_RUNNING && (prw->pm_flags & PMC_F_NEWVALUE) != 0) - return (EBUSY); + return (EXTERROR(EBUSY, + "Cannot write a PMC while it is running")); if (PMC_IS_VIRTUAL_MODE(PMC_TO_MODE(pm))) { /* @@ -3830,7 +3876,9 @@ pmc_do_op_pmcrw(const struct pmc_op_pmcrw *prw, pmc_value_t *valp) pcd = pmc_ri_to_classdep(md, ri, &adjri); if (!pmc_cpu_is_active(cpu)) - return (ENXIO); + return (EXTERROR(ENXIO, + "PMC CPU %ju is not active for read/write", + (uintmax_t)cpu)); /* Move this thread to CPU 'cpu'. */ pmc_save_cpu_binding(&pb); diff --git a/sys/sys/exterr_cat.h b/sys/sys/exterr_cat.h index e63d118d7eb7..637cecdcbcd0 100644 --- a/sys/sys/exterr_cat.h +++ b/sys/sys/exterr_cat.h @@ -43,5 +43,6 @@ #define EXTERR_CAT_HWPMC_IBS 18 #define EXTERR_CAT_LINKER 19 #define EXTERR_CAT_HWPMC_AMD 20 +#define EXTERR_CAT_HWPMC_MOD 21 #endif From nobody Tue Jul 21 17:15:58 2026 X-Original-To: dev-commits-src-main@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 4h4PDN0CkDz6mCyx for ; Tue, 21 Jul 2026 17:16:04 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4PDM6bPQz454s for ; Tue, 21 Jul 2026 17:16:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784654163; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Ok/5Yba5XynSgT+hmCn/6tBLg1f0+U15A6eD/og/4Kg=; b=nPt9Zwaa3ABhoG3kVgbm+f8SWy1RMiPqpXvlIt2q+UsW3jw+rTmrwh32bmZmCOCkc1tqm/ lHAAYh3WFBjyqK2mCtjHZKh+OUwXoxGmS2M9BE/U5Jp3TXZPBthdr7ETanzTKnE0uXp8qP 1CfG4medJu7pVUt8/LXJLyckQzRJE0DNgWVxyho5bIctE+lTbh+K+iVMlTSJxdYvSA2GdA uCwbIf/1TLUYnQm3+iPMyAJ+6WMgBjYJtX7rzavCwn93VnZOYsZ+XsrtLgKSUorBBuBtdB 5oXO2kDw6zBUouhh6W8+6seJpCqPIs8NivrscbVheGlhsTIEeYnLSoPl84h03g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784654163; a=rsa-sha256; cv=none; b=JDhce9L67ExjJLJawwyRu9HLIGVg74ou70NQJ85KInlrRBld3Z30bArkFZ/ncU0smb23BG v0gMXTxdfFRbi1vriea0V9d0glzb2t/lquhT6PtJ+DA1l5I0bioh2KPUtVRVfZuX+swk9K 3cQTP8ZNapoaL4ZKBB4XxWGUjh/HKMeh6ddt9pvf5pVUyeTUYGXhmUvNbF9UWevCJApVBy azucYRa/MqQGSQDmrwn21NO1yCqVSAIgwApQlNq/oXx7gv/PgZD6vzZPm+X1oxU7OSvZY3 z2KDafUbhCYBGgiSIKFVBbsO8h7ev+Ep3N1cpXkXe+nlqA6NN1+joBxoz7zXrQ== 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=1784654163; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Ok/5Yba5XynSgT+hmCn/6tBLg1f0+U15A6eD/og/4Kg=; b=rtwr+OcE8K5nmnk4M11f24RzRX5j508QXWwB5YNlwQlccPzZc58N4vCHkNBdZkwtTaYivo OimbY+NskWOw80gZYq4kqF9mHTZu+uOQbSaP6w4ihayLk+r/YKokVpgLXCPArbHRaabzP9 y4R2SYqXNLo957r1p7TCkMxFMK8EIjmJOb1JWvKSdOdqfDwnj4k6V/LJ2xYm7uUGG2oCry F7Kqghapy1kHka78I7tTFnsnI0AtWObxFfB5t9D/1011Z9XUQjKOHBZCr7nROfmSpeT1TO VAaqqi2VaZs4XwSSpL9ECP3YM4sv0BgoWvF+y+ZKQNLPQ63IpoDFvaGpi/tG8A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4PDM4tflzx7m for ; Tue, 21 Jul 2026 17:16:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 375a1 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 17:15:58 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Andre Silva From: Mitchell Horne Subject: git: 8c4d5701924f - main - hwpmc: Add EXTERROR diagnostics to the AMD and IBS allocators List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mhorne X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8c4d5701924f8401798265d2175f0b2bc704a222 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 17:15:58 +0000 Message-Id: <6a5fa94e.375a1.2cb1a5f7@gitrepo.freebsd.org> The branch main has been updated by mhorne: URL: https://cgit.FreeBSD.org/src/commit/?id=8c4d5701924f8401798265d2175f0b2bc704a222 commit 8c4d5701924f8401798265d2175f0b2bc704a222 Author: Andre Silva AuthorDate: 2026-06-12 15:38:14 +0000 Commit: Mitchell Horne CommitDate: 2026-07-21 17:14:39 +0000 hwpmc: Add EXTERROR diagnostics to the AMD and IBS allocators Replace bare EINVAL in AMD/IBS allocation and config-validation with EXTERROR(), so a failed pmc(3) allocation names the check and value. Register HWPMC_AMD in exterr_cat.h and the generated filenames.h. Signed-off-by: Andre Silva Reviewed by: Ali Mashtizadeh , mhorne Sponsored by: AMD Pull Request: https://github.com/freebsd/freebsd-src/pull/2180 --- lib/libc/gen/exterr_cat_filenames.h | 1 + sys/dev/hwpmc/hwpmc_amd.c | 24 ++++++++++++++------ sys/dev/hwpmc/hwpmc_ibs.c | 45 +++++++++++++++++++++++-------------- sys/sys/exterr_cat.h | 2 +- 4 files changed, 47 insertions(+), 25 deletions(-) diff --git a/lib/libc/gen/exterr_cat_filenames.h b/lib/libc/gen/exterr_cat_filenames.h index 90e231879ccd..e098a94744f3 100644 --- a/lib/libc/gen/exterr_cat_filenames.h +++ b/lib/libc/gen/exterr_cat_filenames.h @@ -2,6 +2,7 @@ * Automatically @generated, use * tools/build/make_libc_exterr_cat_filenames.sh */ + [EXTERR_CAT_HWPMC_AMD] = "dev/hwpmc/hwpmc_amd.c", [EXTERR_CAT_HWPMC_IBS] = "dev/hwpmc/hwpmc_ibs.c", [EXTERR_CAT_VMM] = "dev/vmm/vmm_dev.c", [EXTERR_CAT_FUSE_DEVICE] = "fs/fuse/fuse_device.c", diff --git a/sys/dev/hwpmc/hwpmc_amd.c b/sys/dev/hwpmc/hwpmc_amd.c index b075837cd3e8..185ceff133b0 100644 --- a/sys/dev/hwpmc/hwpmc_amd.c +++ b/sys/dev/hwpmc/hwpmc_amd.c @@ -43,6 +43,9 @@ #include #include +#define EXTERR_CATEGORY EXTERR_CAT_HWPMC_AMD +#include + #include #include #include @@ -405,21 +408,24 @@ amd_allocate_pmc(int cpu __unused, int ri, struct pmc *pm, caps = pm->pm_caps; - if (((caps & PMC_CAP_PRECISE) != 0) && - ((pd->pd_caps & PMC_CAP_PRECISE) == 0)) - return (EINVAL); - PMCDBG2(MDP, ALL, 1,"amd-allocate ri=%d caps=0x%x", ri, caps); /* Validate sub-class. */ if (amd_pmcdesc[ri].pm_subclass != a->pm_md.pm_amd.pm_amd_sub_class) return (EINVAL); + if (((caps & PMC_CAP_PRECISE) != 0) && + ((pd->pd_caps & PMC_CAP_PRECISE) == 0)) + return (EINVAL); + if (strlen(pmc_cpuid) != 0) { config = a->pm_md.pm_amd.pm_amd_config; if ((config & ~amd_config_mask(amd_pmcdesc[ri].pm_subclass, caps)) != 0) - return (EINVAL); + return (EXTERROR(EINVAL, + "AMD PMU config has unsupported bits %#jx", + (uintmax_t)(config & ~amd_config_mask( + amd_pmcdesc[ri].pm_subclass, caps)))); pm->pm_md.pm_amd.pm_amd_evsel = config; PMCDBG2(MDP, ALL, 2, "amd-allocate ri=%d -> config=0x%jx", ri, (uintmax_t)config); @@ -443,11 +449,15 @@ amd_allocate_pmc(int cpu __unused, int ri, struct pmc *pm, } } if (i == amd_event_codes_size) - return (EINVAL); + return (EXTERROR(EINVAL, + "AMD legacy event %ju is not supported", + (uintmax_t)pe)); unitmask = a->pm_md.pm_amd.pm_amd_config & AMD_PMC_UNITMASK; if ((unitmask & ~allowed_unitmask) != 0) /* disallow reserved bits */ - return (EINVAL); + return (EXTERROR(EINVAL, + "AMD unitmask %#jx exceeds allowed mask %#jx", + (uintmax_t)unitmask, (uintmax_t)allowed_unitmask)); if (unitmask && (caps & PMC_CAP_QUALIFIER) != 0) config |= unitmask; diff --git a/sys/dev/hwpmc/hwpmc_ibs.c b/sys/dev/hwpmc/hwpmc_ibs.c index 16bc5edd5019..ce9e038e5d0b 100644 --- a/sys/dev/hwpmc/hwpmc_ibs.c +++ b/sys/dev/hwpmc/hwpmc_ibs.c @@ -147,9 +147,14 @@ ibs_init_policy(void) static int ibs_validate_fetch_config(uint64_t config) { + uint64_t allowed_mask; - if ((config & ~(ibs_fetch_allowed_mask | ibs_fetch_extra_mask)) != 0) - return (EINVAL); + allowed_mask = ibs_fetch_allowed_mask | ibs_fetch_extra_mask; + if ((config & ~allowed_mask) != 0) { + return (EXTERROR(EINVAL, + "IBS fetch ctl config 0x%jx has bits outside allowed mask" + " 0x%jx", (uintmax_t)config, (uintmax_t)allowed_mask)); + } return (0); } @@ -163,22 +168,27 @@ ibs_validate_op_config(uint64_t config) if ((config & IBS_OP_CTL_LATFLTEN) != 0) { if ((ibs_features & CPUID_IBSID_IBSLOADLATENCYFILT) == 0) - return (EINVAL); + return (EXTERROR(EINVAL, + "IBS op load-latency filter is not supported")); /* * Zen 6 decouples L3MISSONLY from load-latency filtering * (AMD pub 69205); enforce the pairing only on older parts. */ if ((ibs_features & CPUID_IBSID_IBSDIS) == 0 && (config & IBS_OP_CTL_L3MISSONLY) == 0) - return (EINVAL); + return (EXTERROR(EINVAL, + "IBS op load-latency filter requires l3miss")); allowed_mask |= IBS_OP_CTL_LDLATMASK | IBS_OP_CTL_L3MISSONLY; } allowed_mask |= ibs_op_extra_mask; - if ((config & ~allowed_mask) != 0) - return (EINVAL); + if ((config & ~allowed_mask) != 0) { + return (EXTERROR(EINVAL, + "IBS op ctl config 0x%jx has bits outside allowed mask" + " 0x%jx", (uintmax_t)config, (uintmax_t)allowed_mask)); + } return (0); } @@ -197,10 +207,11 @@ ibs_validate_fetch_ctl2_config(uint64_t config) allowed_mask = ibs_fetch_ctl2_allowed_mask | ibs_fetch_ctl2_extra_mask; - if ((config & ~allowed_mask) != 0) + if ((config & ~allowed_mask) != 0) { return (EXTERROR(EINVAL, "IBS fetch ctl2 config 0x%jx has bits outside allowed" - " mask 0x%jx", (uint64_t)config, (uint64_t)allowed_mask)); + " mask 0x%jx", (uintmax_t)config, (uintmax_t)allowed_mask)); + } return (0); } @@ -219,10 +230,11 @@ ibs_validate_op_ctl2_config(uint64_t config) allowed_mask = ibs_op_ctl2_allowed_mask | ibs_op_ctl2_extra_mask; - if ((config & ~allowed_mask) != 0) + if ((config & ~allowed_mask) != 0) { return (EXTERROR(EINVAL, "IBS op ctl2 config 0x%jx has bits outside allowed mask" - " 0x%jx", (uint64_t)config, (uint64_t)allowed_mask)); + " 0x%jx", (uintmax_t)config, (uintmax_t)allowed_mask)); + } return (0); } @@ -244,7 +256,8 @@ ibs_validate_pmc_config(int ri, uint64_t config, uint64_t config2) return (error); return (ibs_validate_op_ctl2_config(config2)); default: - return (EXTERROR(EINVAL, "invalid IBS PMC index %d", ri)); + return (EXTERROR(EINVAL, "Unsupported IBS PMC type %ju", + (uintmax_t)ri)); } } @@ -364,13 +377,11 @@ ibs_allocate_pmc(int cpu __unused, int ri, struct pmc *pm, KASSERT(ri >= 0 && ri < IBS_NPMCS, ("[ibs,%d] illegal row index %d", __LINE__, ri)); - /* check class match */ + /* Row discriminators; the allocation loop probes every row. */ if (a->pm_class != PMC_CLASS_IBS) - return (EXTERROR(EINVAL, "PMC class is not IBS")); + return (EINVAL); if (a->pm_md.pm_ibs.ibs_type != ri) - return (EXTERROR(EINVAL, - "IBS type %ju does not match PMC index %ju", - (uint64_t)a->pm_md.pm_ibs.ibs_type, (uint64_t)ri)); + return (EINVAL); caps = pm->pm_caps; @@ -390,7 +401,7 @@ ibs_allocate_pmc(int cpu __unused, int ri, struct pmc *pm, } if (!PMC_IS_SAMPLING_MODE(a->pm_mode)) - return (EINVAL); + return (EXTERROR(EINVAL, "IBS only supports sampling mode")); config = a->pm_md.pm_ibs.ibs_ctl; config2 = a->pm_md.pm_ibs.ibs_ctl2; diff --git a/sys/sys/exterr_cat.h b/sys/sys/exterr_cat.h index 1c3f894e8aff..e63d118d7eb7 100644 --- a/sys/sys/exterr_cat.h +++ b/sys/sys/exterr_cat.h @@ -42,6 +42,6 @@ #define EXTERR_CAT_VMM 17 #define EXTERR_CAT_HWPMC_IBS 18 #define EXTERR_CAT_LINKER 19 +#define EXTERR_CAT_HWPMC_AMD 20 #endif - From nobody Tue Jul 21 18:28:06 2026 X-Original-To: dev-commits-src-main@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 4h4QqW1c8cz6mJ5H for ; Tue, 21 Jul 2026 18:28:07 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4QqW0tggz4MnV for ; Tue, 21 Jul 2026 18:28:07 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784658487; 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=MtjVMstPnX4FIWmySKXcqauZT+XPfsKUPLD5wYTKGZ8=; b=SilcEcuOdsVVkX2rcUPn/cFHAJDOPnBTRKweAPNKK9gO24ySWwQnKHjVOMqXJpG3BqXqhB S0LXuVVs7q+PjlzjNBKbmG0OGFOyRZrBbheVK2tKBRL8kDsZrESALoqb1FtdZSwR0OYo2K wWoDRZaREwQsSOzOC6gSa/FeBoxZnob8ONK8Z8hUx9gx43OS+pcU3z7d3/hi5aZyw8J6XX 8kbGKAWmSELdkR4haUSdd1tWRJjUg7Sol7riKVcT0kWfkYVnOaTmOBbaswVdCqwtroI0fy Oz9W5u2zSIQuO2jr1WGoxjWeFUtH5veVJ+A/eW9v8mnXCXCzRcKvy6yNjMd7CQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784658487; a=rsa-sha256; cv=none; b=daXL4RDAsirHuZ2Gk1j+y1NxYXL91lDgxAOh6gjKflSuGKz04btAZzWGMw/k1z0IEkK5U/ F+Q6F51vUSE3SHMmeobR9RuYKJ5ZFfTPJ4m1HwD+ZDpsd64yL/t+WtTnsdHZC89Wume9ks SXNZlQ4KPU+PShJi/qTDWFg1+YFhvC8WJc+/f0fsqh/Y4iQfWxEg46EFRVVhKSmIy8uDkW xi5gKcibuFTbiZumdJgT4IV2oUn8SUB7/kcqfp95o94jE7uAo5UjldTjD6FXkXhSwucuLP ayRYUUOPY5n93Fvp54t8QG5btDy8T5voJlxxUCVvdKH9WRr6vAPZxz0DUKIgIQ== 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=1784658487; 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=MtjVMstPnX4FIWmySKXcqauZT+XPfsKUPLD5wYTKGZ8=; b=GcvmSudGtGobValAiTPDqHDEyZlpS6yFJODgR49Rfc72sNGvPKQ5s1is3Sdf2m+Qqe0mrt JlzrerU/cDRRAhYnOrPJjh/26/sqIcjTJrEdcAREVBKZvaeYiX32W47k7Ok7fxr+KM+BWI 27zOmTxdwMm22/JUHLLNLZTewBZE5XTujA1KW59uZBQsvzCrNj8sUIcZjZ+0vGb3wxdrTk VgefnOn+fL00d18qtTx+tZIou/iPLNKlu3KK8AtkEZ6tw14Z1MFoRu8IgSjxOkXFAkkaSF 70fjKmRkEKjGx4FeXUT9ReO7hVPnAw80TpLkE4M1Cc/CNzhLLQYyXN8rICPXAQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4QqV6s0Mz10p0 for ; Tue, 21 Jul 2026 18:28:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3d93d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 18:28:06 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Ed Maste Subject: git: caabdb3aefdc - main - contigmalloc.9: Note that M_WAITOK may still return NULL List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: emaste X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: caabdb3aefdc45cae90203210034086801fa9005 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 18:28:06 +0000 Message-Id: <6a5fba36.3d93d.694b6c5c@gitrepo.freebsd.org> The branch main has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=caabdb3aefdc45cae90203210034086801fa9005 commit caabdb3aefdc45cae90203210034086801fa9005 Author: Ed Maste AuthorDate: 2026-07-21 18:10:00 +0000 Commit: Ed Maste CommitDate: 2026-07-21 18:27:47 +0000 contigmalloc.9: Note that M_WAITOK may still return NULL Reviewed by: markj, bapt Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58382 --- share/man/man9/contigmalloc.9 | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/share/man/man9/contigmalloc.9 b/share/man/man9/contigmalloc.9 index 2e5d55ae8ba1..a9ebaf100eb9 100644 --- a/share/man/man9/contigmalloc.9 +++ b/share/man/man9/contigmalloc.9 @@ -23,7 +23,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd July 26, 2024 +.Dd July 21, 2026 .Dt CONTIGMALLOC 9 .Os .Sh NAME @@ -124,6 +124,15 @@ function returns a kernel virtual address if allocation succeeds, or .Dv NULL otherwise. +Note that in contrast with +.Xr malloc 9 , +.Fn contigmalloc +may return +.Dv NULL +even if +.Dv M_WAITOK +is specified, if no physically congiguous range is available that meets the +specified constraints. .Sh EXAMPLES .Bd -literal void *p; From nobody Tue Jul 21 18:57:41 2026 X-Original-To: dev-commits-src-main@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 4h4RTt6qWtz6mKfs for ; Tue, 21 Jul 2026 18:57:54 +0000 (UTC) (envelope-from rlibby@gmail.com) Received: from mail-yw1-f174.google.com (mail-yw1-f174.google.com [209.85.128.174]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "WR4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4RTt4dHfz3F0r for ; Tue, 21 Jul 2026 18:57:54 +0000 (UTC) (envelope-from rlibby@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-yw1-f174.google.com with SMTP id 00721157ae682-81ed000b507so62699817b3.0 for ; Tue, 21 Jul 2026 11:57:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784660273; x=1785265073; h=content-transfer-encoding:content-type:cc:to:subject:message-id :date:from:in-reply-to:references:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ck81AL4dO6dRHLfMkN9La6aRDaezd+FN7ulI7n0Bzwg=; b=LRvk7sJfFgZ/hcPPEgk47r0js6a4K/BrZxkBfyTXkusYhM3CYlNaKR20Bn3VrFiTmt Qg+qrEYUVJPHB7anOTF5BtqWi83dQPVo5myWSIVjvI4uTH9giNUeMUGpFTQclkmQRAlj 8EcoyqA5YryhKrZdh2bYxcT/VZHAE9SIB8JD0Q5EMqMJxjx26Xd6+YXtoJi6ORVaSw06 k/cBAHEoZ+Vg5jFYgRmEiVNfyggkgkfaFKvFEryJeECyQN5m2Tp1O/iyY57IHbmnq4Pu +4Oh7N/cS4vx8piqO3wKatWUj2Xswpv1p6t7IfwLEOtGNcEu1e9J62joihinQPGBEGaI r6yA== X-Forwarded-Encrypted: i=1; AHgh+RoX96oivqBDLlHiiorBFQrGytfuBmGrTvFy0ALxHTz/HkBHWVe3zqf9MImEdMc+iTEVnZAGgyO9MPxax5p+3hRHDX8VGQ==@freebsd.org X-Gm-Message-State: AOJu0YwwUiZ2JGd+8buFdk5+h07S87MxBtjMRFmB8nYPxrGm/QKxu9Ho PtKIbfP7/PnpBDFD5qRVN4CFE2ebCOveKs5JRctIa5bZ9qIjnP76SQnQmjGthw== X-Gm-Gg: AR+sD137dNlSyGTIElzIkaaBdy9nFsOcNsuCSpvkgkfeKHPZCwZhLWjRG5N4HL/530t aiYdwGU7o01raKPTtxOZfoxfJweNybHPfn7+mHrLYcWELlL9Of7VTGXxekLW9c5yynELiRO+OYp +fH9PhRHAw5GptmCeispBtRI4vCKNxpdRJpvt5IxZJB2FsGwXB0x65MF5vKsbts7IumV9MOXA0B If9Z48PrRAzooo0coKnvKcuJJQuautbbohRQeRYSAx+Gsmocg9OGb996uIJIjatEGasmDW2BH9y IhEqlChmJvtRiPD3B5IXeX7z8nWcujQnNhnppL9BpbS8g2+pDziOrsQIBdkqkogkHRz75dOktwv GRMu5Vt5Ik7+y3D1auqzl1d7Gqi145YAEqq1ZT//7SqGi9Zh63AumcdEiDB9x3g7dL3WLJPjsJM yA0NA1E7lqr1TCGlPnoBn3GmUe8xJhF0LhesrCRsrN X-Received: by 2002:a05:690c:62c4:b0:80d:21d3:a399 with SMTP id 00721157ae682-81ef25ffae6mr62803447b3.48.1784660273551; Tue, 21 Jul 2026 11:57:53 -0700 (PDT) Received: from mail-yw1-f177.google.com (mail-yw1-f177.google.com. [209.85.128.177]) by smtp.gmail.com with ESMTPSA id 00721157ae682-81f33bf2d8bsm2370407b3.1.2026.07.21.11.57.52 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 21 Jul 2026 11:57:52 -0700 (PDT) Received: by mail-yw1-f177.google.com with SMTP id 00721157ae682-7dbcb505578so80086717b3.3 for ; Tue, 21 Jul 2026 11:57:52 -0700 (PDT) X-Forwarded-Encrypted: i=1; AHgh+RrRUI/DmptOkFJ8bTMk8k3gjfscc1E+vOU+C8RAfFb5XJ4nbi5XK6nx0aUR2tzgS3OlJyrx8bdJ2R+hY00HC/CQiNFzFA==@freebsd.org X-Received: by 2002:a05:690c:3387:b0:81d:4f4b:94be with SMTP id 00721157ae682-81ef251c90emr57865307b3.32.1784660272626; Tue, 21 Jul 2026 11:57:52 -0700 (PDT) List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 References: <6a5fba36.3d93d.694b6c5c@gitrepo.freebsd.org> In-Reply-To: <6a5fba36.3d93d.694b6c5c@gitrepo.freebsd.org> From: Ryan Libby Date: Tue, 21 Jul 2026 11:57:41 -0700 X-Gmail-Original-Message-ID: X-Gm-Features: AUfX_myoSsydytRgXG7XUSUTRQuAJUuwtXKsA0oU42ACqWL5R6VOw1Lof5wiij8 Message-ID: Subject: Re: git: caabdb3aefdc - main - contigmalloc.9: Note that M_WAITOK may still return NULL To: Ed Maste , Mark Johnston Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4h4RTt4dHfz3F0r X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] X-Spamd-Bar: ---- On Tue, Jul 21, 2026 at 11:28=E2=80=AFAM Ed Maste wrot= e: > > The branch main has been updated by emaste: > > URL: https://cgit.FreeBSD.org/src/commit/?id=3Dcaabdb3aefdc45cae902032100= 34086801fa9005 > > commit caabdb3aefdc45cae90203210034086801fa9005 > Author: Ed Maste > AuthorDate: 2026-07-21 18:10:00 +0000 > Commit: Ed Maste > CommitDate: 2026-07-21 18:27:47 +0000 > > contigmalloc.9: Note that M_WAITOK may still return NULL > > Reviewed by: markj, bapt > Sponsored by: The FreeBSD Foundation > Differential Revision: https://reviews.freebsd.org/D58382 > --- > share/man/man9/contigmalloc.9 | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/share/man/man9/contigmalloc.9 b/share/man/man9/contigmalloc.= 9 > index 2e5d55ae8ba1..a9ebaf100eb9 100644 > --- a/share/man/man9/contigmalloc.9 > +++ b/share/man/man9/contigmalloc.9 > @@ -23,7 +23,7 @@ > .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED = OF THE > .\" POSSIBILITY OF SUCH DAMAGE. > .\" > -.Dd July 26, 2024 > +.Dd July 21, 2026 > .Dt CONTIGMALLOC 9 > .Os > .Sh NAME > @@ -124,6 +124,15 @@ function returns a kernel virtual address if allocat= ion succeeds, > or > .Dv NULL > otherwise. > +Note that in contrast with > +.Xr malloc 9 , > +.Fn contigmalloc > +may return > +.Dv NULL > +even if > +.Dv M_WAITOK > +is specified, if no physically congiguous range is available that meets = the > +specified constraints. > .Sh EXAMPLES > .Bd -literal > void *p; > But is this desired and intentional behavior, or simply what the code does? Paging through grep of contigmalloc with M_WAITOK, it appears to be a mix of callers that handle and do not handle a NULL return. Some of them just handle it by panicking. Is someone planning to audit M_WAITOK callers? > +is specified, if no physically congiguous range is available that meets = the Typo: "congiguous". Ryan From nobody Tue Jul 21 19:07:06 2026 X-Original-To: dev-commits-src-main@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 4h4RhW0pmBz6mL6C for ; Tue, 21 Jul 2026 19:07:07 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4RhV6zGhz3G02 for ; Tue, 21 Jul 2026 19:07:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784660827; 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=FYolGq5/FWWOR12TDq1sSNb8wYntZGPMI7kKM236/MA=; b=q2k2Z2FmCiFqzlZBS/sJLHw9TGw7xAteSRUyKrke9npfOGlCKjnJSS/Mcd/HKiDkJvvSvj ptbgqI+GTQ3JRJmuee40PV6wZ17Nw53evy/bInX8CQQ8ZYd9IJ8kzmWMeXDnAxbThjAsE5 4D7FjFPB2uGU+PxHAKnUybeBy9xFK9ipTrKy9QFcOb2ScIUMFeYSwlFzOqZ3xvEnFRwUFT Ojbtfp2/+CraB+G77h0bt//ht58Iud5AUqius9WtkvRciL3c2yJLrrsZ8o1V4RzHbe3md4 I2ztCPklX9qSdZkYDO/iNmvRd4hxQU1uzi0WSGyPg2OZNCOjbbowZGvvJ2L91A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784660827; a=rsa-sha256; cv=none; b=KIoRIF0Ysh18fBSgv3q03oR5kydcoPYQgUWu8xxQbzW9lJj4Ty3wBqkg1JrwM3S3K1XIRp Llbes366vQhVSdHej78ExpOe2XGNBfejkifYp21nRA4Be9N9HDepkL+CnpdYE05s0EXuE9 NNxgrb3JwgthCPnf5iIx2jU6eDrlJZA7ZzUs1wPZzAx1WXGPdGNcZf/3X1pjjq5nCwNOIs jaGTZrx3Vw53lchVV3NStWy0ccEo8hOmteW0wKj606vhSFnbszXcGmzWHB2gAisqgJoczk J9BLRw7CM2hMhxcWjYBHNoxaY7RJT+bSGWfK/cl+WimPm7Ym3Sf99HjQzfjtrQ== 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=1784660827; 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=FYolGq5/FWWOR12TDq1sSNb8wYntZGPMI7kKM236/MA=; b=qP8glYcOi58ocRZjAeqAM8/d14q7wh3l4TSt0lXHSqu4cmkF/3jAdM/DiilD5qO2Zsa2Or ShN4GyMio3JBguf1IO56czW5hi2Z2f5ReBl+hSGSxKhzX/C1ESC2CJyGwx2dkKsvLkQVuj nORlMpPMPQimS9gyJbcC2bh1moBHei5ICZU2znL7PHBhwo7f5rDKDXBtm4EGLR7mkLF3Q6 lfBppTStgIzUcZLgKJkDBefNSvujPkh7uk0kQR75pryNgDLBfrw8h9xrRGY+S9nLd0smGh 1kM1p4bSXtYP2Afj2kgRZuSOl9HqvSl3PbMXby58sqp7reUWk+bRsc+Ga/bl0A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4RhV5RJJz11qm for ; Tue, 21 Jul 2026 19:07:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 184d3 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 19:07:06 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Ed Maste Subject: git: ba583f0c2d63 - main - contigmalloc.9: Correct typo List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: emaste X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ba583f0c2d63f03c834047e48a69095a86a71589 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 19:07:06 +0000 Message-Id: <6a5fc35a.184d3.ac718d3@gitrepo.freebsd.org> The branch main has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=ba583f0c2d63f03c834047e48a69095a86a71589 commit ba583f0c2d63f03c834047e48a69095a86a71589 Author: Ed Maste AuthorDate: 2026-07-21 19:05:53 +0000 Commit: Ed Maste CommitDate: 2026-07-21 19:06:35 +0000 contigmalloc.9: Correct typo Reported by: alc, rlibby Fixes: caabdb3aefdc ("contigmalloc.9: Note that M_WAITOK may still return NULL") --- share/man/man9/contigmalloc.9 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/man/man9/contigmalloc.9 b/share/man/man9/contigmalloc.9 index a9ebaf100eb9..b3c2aeed2f3a 100644 --- a/share/man/man9/contigmalloc.9 +++ b/share/man/man9/contigmalloc.9 @@ -131,7 +131,7 @@ may return .Dv NULL even if .Dv M_WAITOK -is specified, if no physically congiguous range is available that meets the +is specified, if no physically contiguous range is available that meets the specified constraints. .Sh EXAMPLES .Bd -literal From nobody Tue Jul 21 19:52:47 2026 X-Original-To: dev-commits-src-main@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 4h4SjC6k1vz6mNhL for ; Tue, 21 Jul 2026 19:52:47 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4SjC5zhLz3NPJ for ; Tue, 21 Jul 2026 19:52:47 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784663567; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=5VPRvU6AEVdXG9vY9AI0WxhoqwH/TfZK+s/Yqfq94CY=; b=R0//P6tcmdpnfhXMiVI1U6oWeBzMIMuQSdh86e5vHQD/R4FpQxQLSYY/oxX1mqHOWr8QIW 9ePhv8xDtrTQKkCZSE2Bi77CkCTEPi+VwESsIcEhmDnWVqo/ww+MG196WkmNmdksv2usIj ++hVPN4Lu7gfPzmTBS0woMcJZJGJcW9HWgWM6KRislZgRJl8msNFv+RxrNBxnwwFTSnJnc ipFDs/62sTlcJqCE6ezpaWRNcFiIq05IoUclfcAalYn/mjHkLBmKJ+c8gniCvTg0pL5GKD Y6j2nBHfAtVXaZaslCVDITsqick2s0qtIC8Ry/UvJIVZ+eJoFocm2iG/GZ1bAg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784663567; a=rsa-sha256; cv=none; b=ytKgQz226aL5WgAIKP2y8UdoNWnrgwBiAMmz/g87dnf+o2jjhhrAnDJxAjFq0r0e8rgul9 4i2cKVAzvOWvt/O+x8CF7jTc8oYA/pnPjA/ejs74Oq6uql04VKz6QEcGzuJEDE6dNQx/6a cUcHswHQA+6QQbwP+494FjEw3O/6xBjI3zydNK/hbu3nOIiKh15/3YjVTKOvEBsKRMeXvr CfaMLCr4qSlwc9za2mcb9YnKg6nOwd4ma9M/di2PfufElpKMMBd0zHm9UrN2pIs/rs2j7b bkjgNjsFu5uhENC8vKUcECpcGhz+TBHKEQVzzu9NYDuWGE7jdl7z7phH0ivY9g== 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=1784663567; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=5VPRvU6AEVdXG9vY9AI0WxhoqwH/TfZK+s/Yqfq94CY=; b=VBp6RCaZQ8xJXhXOWwX5ILD/chVuwGl4J+QFn/Yif8OK4syb6iNBv/q+HVPHmil8MEQyu7 c5ehkQ00AJvmaStYbBDBuTzluWV2S6Ll9/JOU/Nals1duDpXJUTBshB7O1jtEj/wMhDC4M /jo7AhoVexehbO46CbutrrYUDZ5b1Nq9Ak4hadIdu1q7uSzRJqpFmRcdTxqYQJvbAlQ/b8 k9Ss2ilcUH4zGejhqNa/4u4+igk/BdZIYijxXTY/bqLjsA80McCaB/aMVyBc/zJVJOkzVV dLhIOkKivs/EbFrIUyUBtJRba1kWYYwTtqvma9sRCu23MIs7FZ2HnoE1ZvwFhw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4SjC4qJDz12ds for ; Tue, 21 Jul 2026 19:52:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 20c88 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 19:52:47 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Jane Smith From: Bojan Novk=?utf-8?Q?ovi=C4=87?= Subject: git: 9724f3f89749 - main - cat: Fix a NULL pointer dereference List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bnovkov X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 9724f3f8974957d2cd15f6b796c347ca50250954 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 19:52:47 +0000 Message-Id: <6a5fce0f.20c88.30f7924@gitrepo.freebsd.org> The branch main has been updated by bnovkov: URL: https://cgit.FreeBSD.org/src/commit/?id=9724f3f8974957d2cd15f6b796c347ca50250954 commit 9724f3f8974957d2cd15f6b796c347ca50250954 Author: Jane Smith AuthorDate: 2026-07-21 19:45:25 +0000 Commit: Bojan Novković CommitDate: 2026-07-21 19:50:11 +0000 cat: Fix a NULL pointer dereference Check the `fdopen` return value before calling `cook_cat`. Reviewed by: markj, bnovkov Differential Revision: https://reviews.freebsd.org/D57741 MFC after: 1 week --- bin/cat/cat.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/cat/cat.c b/bin/cat/cat.c index c4c04fb3fff6..8c10faf7cff9 100644 --- a/bin/cat/cat.c +++ b/bin/cat/cat.c @@ -259,7 +259,8 @@ scanfiles(char *argv[], int cooked __unused) if (fd == STDIN_FILENO) cook_cat(stdin); else { - fp = fdopen(fd, "r"); + if ((fp = fdopen(fd, "r")) == NULL) + err(1, "fdopen"); cook_cat(fp); fclose(fp); } From nobody Tue Jul 21 20:02:00 2026 X-Original-To: dev-commits-src-main@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 4h4Svx3J81z6mNs5 for ; Tue, 21 Jul 2026 20:02:05 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4Svx254mz3Pjm for ; Tue, 21 Jul 2026 20:02:05 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784664125; 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=16fBVCKmiYadM0OOsNlb0/ja7wd9IrhT9TdVKe+BnRU=; b=dR+d0F+T8ii9K1f4IOsqea0s0HlCblHbSEd6wSBvdGc3o1ED7bpcqbOux+QzqxwDQSon26 eZ9q33MBF2CVuHL5XXE8vY096Z2fk+DdyJKuk+ckE+0uc3+yP5ubupmOFttYdGgMY4ul+E 9rpR/WZ4LHgQe6PdnzHM1KPRM0ykclVf25bthb1YOVJUTD0CxJkIOBoGZt5dgexoEw/3NP UlyPsG3irUc1loDtUteidD4/INLuV8txETkX+avqC84RLYe9YH+xBA7etZckSDIekrh30t 2pCw0fWdK38Y6kJ31yc+ROsvwwWwDvHIq/Q8JA4JZuF825zV8yKxUxX1HuyP+w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784664125; a=rsa-sha256; cv=none; b=c37cKuhT2fTQBAIghSjHq0s4HMJ5vvBI+al+YRuQmWIztXpfbqDtjtQV0myOmU0Z7bO9Xu b3Mj9vd+s4y0E/+W2YqVjlqbYEYNlNpyHpA4q8ckcXBnIqEu6UoliLr/Vi3qDNVkOXSpWI mCylgZoOdAVjhIVTlmL/vDIbKML7tLU5srluuxmUU+QE5lygjw/19ws1dd2zI92FHt4ant zr2SRD+SU2sWh7BAQfYrximU6Pf+YpLJWuxKh4J5gtcg1ZWcYrtCpcFgfrcz/PntNhJQgr rZ0m/Alg3hP0eF9Y0riqx3ixdGYFy3ONDF1khnBQ8z3XRwICqSkiRbvt4UBQvQ== 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=1784664125; 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=16fBVCKmiYadM0OOsNlb0/ja7wd9IrhT9TdVKe+BnRU=; b=CKg54ZYNAHekNyN0p0X5MrzAMqoK1SWeXpQJmkXjCG7N6Peu1OI345Vv1D/myJM96PKTjw rw2djI2sLykL4l6OU67bzlXqun4wQe8o/wVCHmpQgplH7b1jL2ATTMgPt/IgVqMJjrFvBV qkxsvhuOcwBp5XYWBDwoK7kObik7bTibynrxwHSy6DQw5mpBTu6/cBqsbxLobPYWuWIf8e oe0J818XQaivGmhq2xr5TwlgMFCT5onziktRdnL8Gy8kk1uXcKDh4DJhdeOdtYI985W6Tc aXB7WCmpuv7GtRHROR6gA7beo0Te3R+1CiHhBB1CC1rOPwiUvYWenGcwpi9HMA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4Svx0Mpfz134q for ; Tue, 21 Jul 2026 20:02:05 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 2223f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 20:02:00 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bjoern A. Zeeb Subject: git: 5d479b75a894 - main - LinuxKPI: 802.11: always lock around (*set_{frag,rts}_threshold) List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5d479b75a8944faeabb367d1234a9fc3fefa8df1 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 20:02:00 +0000 Message-Id: <6a5fd038.2223f.5fbc89af@gitrepo.freebsd.org> The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=5d479b75a8944faeabb367d1234a9fc3fefa8df1 commit 5d479b75a8944faeabb367d1234a9fc3fefa8df1 Author: Bjoern A. Zeeb AuthorDate: 2026-07-21 19:54:04 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-07-21 20:00:24 +0000 LinuxKPI: 802.11: always lock around (*set_{frag,rts}_threshold) We would lock the downcalls during normal operation but not during vap (vif) creation as there was no need for locking. Add the missing locking there as drivers seem to always expect it (by assertion) and cannot distinguish between state. Add the assertions to the downcalls as we need both of them locked and both of them can sleep. PR: 296185 ("rtw89(4) freezes the system with INVARIANTS kernel") Debugged by: Artem Bunichev (temcbun gmail.com) Sponsored by: The FreeBSD Foundation MFC after: 3 days --- sys/compat/linuxkpi/common/src/linux_80211.c | 2 ++ sys/compat/linuxkpi/common/src/linux_80211_macops.c | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/sys/compat/linuxkpi/common/src/linux_80211.c b/sys/compat/linuxkpi/common/src/linux_80211.c index 355d0c160472..bf2054c5efd8 100644 --- a/sys/compat/linuxkpi/common/src/linux_80211.c +++ b/sys/compat/linuxkpi/common/src/linux_80211.c @@ -4522,11 +4522,13 @@ lkpi_ic_vap_create(struct ieee80211com *ic, const char name[IFNAMSIZ], hw->max_listen_interval = 7 * (ic->ic_lintval / ic->ic_bintval); hw->conf.listen_interval = hw->max_listen_interval; + wiphy_lock(hw->wiphy); /* XXX-BZ do we need to be able to update these? */ hw->wiphy->frag_threshold = vap->iv_fragthreshold; lkpi_80211_mo_set_frag_threshold(hw, vap->iv_fragthreshold); hw->wiphy->rts_threshold = vap->iv_rtsthreshold; lkpi_80211_mo_set_rts_threshold(hw, vap->iv_rtsthreshold); + wiphy_unlock(hw->wiphy); /* any others? */ /* Add per-VIF/VAP sysctls. */ diff --git a/sys/compat/linuxkpi/common/src/linux_80211_macops.c b/sys/compat/linuxkpi/common/src/linux_80211_macops.c index b07a2075491b..09199862dfb7 100644 --- a/sys/compat/linuxkpi/common/src/linux_80211_macops.c +++ b/sys/compat/linuxkpi/common/src/linux_80211_macops.c @@ -115,6 +115,9 @@ lkpi_80211_mo_set_frag_threshold(struct ieee80211_hw *hw, uint32_t frag_th) struct lkpi_hw *lhw; int error; + might_sleep(); + lockdep_assert_wiphy(hw->wiphy); + lhw = HW_TO_LHW(hw); if (lhw->ops->set_frag_threshold == NULL) { error = EOPNOTSUPP; @@ -135,6 +138,9 @@ lkpi_80211_mo_set_rts_threshold(struct ieee80211_hw *hw, uint32_t rts_th) struct lkpi_hw *lhw; int error; + might_sleep(); + lockdep_assert_wiphy(hw->wiphy); + lhw = HW_TO_LHW(hw); if (lhw->ops->set_rts_threshold == NULL) { error = EOPNOTSUPP; From nobody Tue Jul 21 20:07:41 2026 X-Original-To: dev-commits-src-main@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 4h4T2Q2Kl3z6mPNM for ; Tue, 21 Jul 2026 20:07:42 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4T2Q08XPz3QYB for ; Tue, 21 Jul 2026 20:07:42 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784664462; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=f0DrBhTT1RWKZCSDFxb46E8wxvxGEJnhEJzSNgYX9a4=; b=Z1qdW29Gfbc6sfipBBNo/h1zN3KFlajn45DTfzoIS/CjvcdJSVSyqMqA4JKWSrqH/9AEC0 BG5WWt6oxd/xU/Q+axNNzQtLKtIlJrVjuORSpAxzaR/K9kvNqNCMyYEklPHhrOZq4g2fqx oqSpj/F03OgtSGLnD0zhStcWCjS8u0uGrCsf9I5EeUcENHWinedy3nrYFClWag6HfdgMaI V0P/4RRvREMXerd7q5bLWbkDXYz03seloWpFYNLNIiuYrOu/CP7ZLu4Yxk5ElmNuN5IeCq lKaFVhzTX72L4L3W4OoNhzJvU3u02nnsJ8VEu9WhwJZN3hOcVmKvsHCBPfqs0A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784664462; a=rsa-sha256; cv=none; b=pB9Tw222gz+3HIalTO/pkkggl+K97vcdzOLYbhYM6faAATKrm78SrnpBqhmrJ0fFP3l1Li sEwsoTdqgePDbnhjmu8SEwtlAscLsN9jHEgJJV0CXjqB2zi/dfrivVib0ODhfTe0r4lDQ1 Po551LS0RNRtUCFIc79rERVric7wDa1erX2x9aiEU6BpciTMgb4CPQB5TgersjfJn3oXp1 3L/0E/dgB1JU5PhueyJLTN1rW/7kjvGxErvfKDUE+npkj/uj6br9SkSkVqymLv/V7xwsxR iaNdZoTWJjD3j14rx2NE8KjxS86/iRt3lWwGcgbZWVLuEiG3mqA1abJjPkOleg== 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=1784664462; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=f0DrBhTT1RWKZCSDFxb46E8wxvxGEJnhEJzSNgYX9a4=; b=GrZOVXYHgLPoirRXPFRDSW2xRElbSh0Yze1JWDAFnzU8ExWI2iFnVIyXOpCgAOsHq0POen 1HUgJeh7LKpkBDWiNO9tJdqnL9Vvk77hIFK4rWMSyVDfvJd/GU3Ofbzxa2E0TDESi+jRi2 ugNtV/ua3IRhdUxKo1RKvsP7ipGBfE97VGwEH0lvCqqTnUnWfWvXlMOY7ZxiYA+rNmVpOA zjywvoNcwLQUA2BeJFCteQXry8I4YfBynUiSeVJUurcqHXW86xMBldZK/kIwF9rWucNu+v N8s+DYwnlgfIAS93nlhyIlRlhIpfxb7+k9AWmUal8Khy8XRzC722rUBMJtPYGQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4T2P5XY2z13Pw for ; Tue, 21 Jul 2026 20:07:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 22243 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 20:07:41 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Faraz Vahedi From: Pouria Mousavizadeh Tehrani Subject: git: c5caf8564533 - main - vtnet: Implement VIRTIO_NET_F_GUEST_ANNOUNCE List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pouria X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c5caf856453325728155a18d3bb02a9cd651a0a0 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 20:07:41 +0000 Message-Id: <6a5fd18d.22243.7937b2fa@gitrepo.freebsd.org> The branch main has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=c5caf856453325728155a18d3bb02a9cd651a0a0 commit c5caf856453325728155a18d3bb02a9cd651a0a0 Author: Faraz Vahedi AuthorDate: 2026-07-12 20:46:20 +0000 Commit: Pouria Mousavizadeh Tehrani CommitDate: 2026-07-21 20:06:35 +0000 vtnet: Implement VIRTIO_NET_F_GUEST_ANNOUNCE When the device sets VIRTIO_NET_S_ANNOUNCE in the config status field, for example after a VM migrates to a new host, announce the interface's presence on the network so peers and switches learn the new attachment point, then acknowledge the request with the VIRTIO_NET_CTRL_ANNOUNCE_ACK control command, as per VirtIO v1.3, 5.1.6.5.4. The announcement raises iflladdr_event: the stack sends gratuitous ARPs and unsolicited neighbor advertisements for the interface's addresses, and stacked interfaces such as vlan(4) propagate the event and announce theirs as well. The event handlers may sleep, so the work is deferred from the config change interrupt to a task on taskqueue_thread; that context also allows the acknowledgement to be skipped safely if the interface was stopped in the meantime, in which case the device keeps the bit set and the request is re-delivered with the next config change interrupt. Signed-off-by: Faraz Vahedi Reviewed by: adrian Pull Request: https://github.com/freebsd/freebsd-src/pull/2322 --- sys/dev/virtio/network/if_vtnet.c | 88 ++++++++++++++++++++++++++++++++++++ sys/dev/virtio/network/if_vtnetvar.h | 2 + 2 files changed, 90 insertions(+) diff --git a/sys/dev/virtio/network/if_vtnet.c b/sys/dev/virtio/network/if_vtnet.c index ac5c08f60a0e..e9683698decb 100644 --- a/sys/dev/virtio/network/if_vtnet.c +++ b/sys/dev/virtio/network/if_vtnet.c @@ -224,6 +224,9 @@ static int vtnet_exec_ctrl_cmd(struct vtnet_softc *, uint8_t *, static int vtnet_ctrl_mac_cmd(struct vtnet_softc *, uint8_t *); static int vtnet_ctrl_guest_offloads(struct vtnet_softc *, uint64_t); static int vtnet_ctrl_mq_cmd(struct vtnet_softc *, uint16_t); +static int vtnet_ctrl_announce_ack_cmd(struct vtnet_softc *); +static bool vtnet_announce_pending(struct vtnet_softc *); +static void vtnet_announce(void *, int); static int vtnet_ctrl_rx_cmd(struct vtnet_softc *, uint8_t, bool); static int vtnet_set_promisc(struct vtnet_softc *, bool); static int vtnet_set_allmulti(struct vtnet_softc *, bool); @@ -468,6 +471,7 @@ vtnet_attach(device_t dev) VTNET_CORE_LOCK_INIT(sc); callout_init_mtx(&sc->vtnet_tick_ch, VTNET_CORE_MTX(sc), 0); + TASK_INIT(&sc->vtnet_announce_task, 0, vtnet_announce, sc); vtnet_load_tunables(sc); vtnet_alloc_interface(sc); @@ -642,6 +646,8 @@ vtnet_detach(device_t dev) ether_ifdetach(ifp); } + taskqueue_drain(taskqueue_thread, &sc->vtnet_announce_task); + #ifdef DEV_NETMAP netmap_detach(ifp); #endif @@ -746,6 +752,8 @@ vtnet_config_change(device_t dev) VTNET_CORE_LOCK(sc); vtnet_update_link_status(sc); + if (vtnet_announce_pending(sc)) + taskqueue_enqueue(taskqueue_thread, &sc->vtnet_announce_task); if (sc->vtnet_link_active != 0) vtnet_tx_start_all(sc); VTNET_CORE_UNLOCK(sc); @@ -4056,6 +4064,86 @@ error_out: return (error); } +static int +vtnet_ctrl_announce_ack_cmd(struct vtnet_softc *sc) +{ + struct sglist_seg segs[2]; + bus_dmamap_t hdr_dmap; + bus_addr_t hdr_paddr; + struct sglist sg; + struct virtio_net_ctrl_hdr hdr __aligned(2); + uint8_t ack; + int error; + + error = bus_dmamap_create(sc->vtnet_hdr_dmat, 0, &hdr_dmap); + if (error != 0) + goto error_out; + + error = bus_dmamap_load(sc->vtnet_hdr_dmat, hdr_dmap, &hdr, + sizeof(hdr), vtnet_load_callback, &hdr_paddr, BUS_DMA_NOWAIT); + if (error != 0) + goto error_destroy_hdr; + + hdr.class = VIRTIO_NET_CTRL_ANNOUNCE; + hdr.cmd = VIRTIO_NET_CTRL_ANNOUNCE_ACK; + ack = VIRTIO_NET_ERR; + bus_dmamap_sync(sc->vtnet_hdr_dmat, hdr_dmap, BUS_DMASYNC_PREWRITE); + + sglist_init(&sg, nitems(segs), segs); + error = sglist_append_phys(&sg, hdr_paddr, sizeof(hdr)); + MPASS(error == 0 && sg.sg_nseg == nitems(segs) - 1); + + if (error == 0) + error = vtnet_exec_ctrl_cmd(sc, &ack, &sg, sg.sg_nseg, 1); + if (error == 0) + error = (ack == VIRTIO_NET_OK ? 0 : EIO); + + bus_dmamap_unload(sc->vtnet_hdr_dmat, hdr_dmap); +error_destroy_hdr: + bus_dmamap_destroy(sc->vtnet_hdr_dmat, hdr_dmap); +error_out: + return (error); +} + +static bool +vtnet_announce_pending(struct vtnet_softc *sc) +{ + uint16_t status; + + if ((sc->vtnet_features & VIRTIO_NET_F_GUEST_ANNOUNCE) == 0 || + (sc->vtnet_features & VIRTIO_NET_F_CTRL_VQ) == 0 || + (sc->vtnet_features & VIRTIO_NET_F_STATUS) == 0) + return (false); + + status = virtio_read_dev_config_2(sc->vtnet_dev, + offsetof(struct virtio_net_config, status)); + + return ((status & VIRTIO_NET_S_ANNOUNCE) != 0); +} + +static void +vtnet_announce(void *xsc, int pending __unused) +{ + struct vtnet_softc *sc; + if_t ifp; + + sc = xsc; + ifp = sc->vtnet_ifp; + + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) + return; + + CURVNET_SET(if_getvnet(ifp)); + EVENTHANDLER_INVOKE(iflladdr_event, ifp); + CURVNET_RESTORE(); + + VTNET_CORE_LOCK(sc); + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0 && + vtnet_ctrl_announce_ack_cmd(sc) != 0) + device_printf(sc->vtnet_dev, "cannot ack announcement\n"); + VTNET_CORE_UNLOCK(sc); +} + static int vtnet_ctrl_rx_cmd(struct vtnet_softc *sc, uint8_t cmd, bool on) { diff --git a/sys/dev/virtio/network/if_vtnetvar.h b/sys/dev/virtio/network/if_vtnetvar.h index 77a7680e5b43..904050c7864a 100644 --- a/sys/dev/virtio/network/if_vtnetvar.h +++ b/sys/dev/virtio/network/if_vtnetvar.h @@ -183,6 +183,7 @@ struct vtnet_softc { uint64_t vtnet_negotiated_features; struct vtnet_statistics vtnet_stats; struct callout vtnet_tick_ch; + struct task vtnet_announce_task; struct ifmedia vtnet_media; eventhandler_tag vtnet_vlan_attach; eventhandler_tag vtnet_vlan_detach; @@ -338,6 +339,7 @@ CTASSERT(sizeof(struct vtnet_mac_filter) <= PAGE_SIZE); VIRTIO_NET_F_CTRL_RX | \ VIRTIO_NET_F_CTRL_MAC_ADDR | \ VIRTIO_NET_F_CTRL_VLAN | \ + VIRTIO_NET_F_GUEST_ANNOUNCE | \ VIRTIO_NET_F_CSUM | \ VIRTIO_NET_F_HOST_TSO4 | \ VIRTIO_NET_F_HOST_TSO6 | \ From nobody Tue Jul 21 20:07:42 2026 X-Original-To: dev-commits-src-main@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 4h4T2R2lgcz6mPKs for ; Tue, 21 Jul 2026 20:07:43 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4T2R0Fcgz3QbL for ; Tue, 21 Jul 2026 20:07:43 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784664463; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=bWSK7GTtKJQRoHo7QWKK9ZT1ostKTZk2xRyNXxfBXv0=; b=mFzyqeZNynfVCghnoL87EuMWHAzwS6MuNXwH2ToxD+jkJ5pwqJS8Q0xRqsu2ZpdQ17Dz0+ KYKMUV4HIXzTDmJYRKugIOeoPecIdYooNFjQOYll+ALqVRQPzpLEjxLIgmNzbf+Gd1kgAH gduYCk86sxaChkqO5+rE37ewKqv7FIRuBmptgcmYDdCM5bm6snhhw7DX9brilUHHn3uzYO lDTPvv6t7QzSzJDejirrPHjm1Dxrfz4nXtZYhLDYC+MpFSgABSHE70lGSgy/qxgtFlbYkq BHdmdWMcrlOleklQ/ouHe4z97c4c8zDQDSO1hppBNbsaGIw2EI897IqbcU7hIQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784664463; a=rsa-sha256; cv=none; b=R0RYD1cwnMS2mBI3Lm0zj8cQey1qlhSGSHScP1pBz2D7SNoGzaPsKn/n/yWJtXl44lrLZV SvqUyofQ+SHl6hPSGmyUvptDjbOGXCWDm55Gtn9jfa9c5kdXZ3iDJto5F+CR8cAPWpZRDB tARoXqbALcYFRJNffFXGX+kbufx8D16xpLxwdwduOgC7NUw09q9gNF8HbeOzKNUllzs8FV k+alkDVDqOwbsxkbf/Bs+rZiSHx/Y+AHvivIhyS89XngBGDvAcVMSuUY5PI6eU8EWXsVmI bUrL2wfVcgKsN2pm1pcXncLp03S8xR8HBnRi4n7mOiwg2bGDGr2CwoEdFfWfrQ== 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=1784664463; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=bWSK7GTtKJQRoHo7QWKK9ZT1ostKTZk2xRyNXxfBXv0=; b=bYEE4DU523DG5uOXjUVHNiZ/fB/zZZvSjYiQg1Vsy42e2s1n9hn09ETB22mXqQdfaaR5vf TsQpLQvc1j2pFNYLtCLNvVOk/tRMWV5BQF9xs+HDA+VapUYukRNQJyxkyI+Nrv3z0cZnGU G+b3a2F0mcUt4aW0lxGEdsJAwE0CspaAcOfZvbMC8WxixulZEtn6YPw/udse792XCgDEUd 9bPX2Wdr0w4goHxxv3pEFdps6uXr/pS+twHM+zC+JkYrXRd5/n0/HQMfjEYHHtDZ/W6U5t cCso45ER8LWGuZAcL6luKhBe8sFPUpjXqtfgfZYBqvNXafwQsGohg5W0heVMSQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4T2Q6JXjz13NJ for ; Tue, 21 Jul 2026 20:07:42 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 22330 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 20:07:42 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Faraz Vahedi From: Pouria Mousavizadeh Tehrani Subject: git: d4ddf8eaee93 - main - vtnet: Accept VIRTIO_NET_F_CTRL_RX_EXTRA List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pouria X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d4ddf8eaee9371d1d20bfb753237f25505d6afee Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 20:07:42 +0000 Message-Id: <6a5fd18e.22330.2c0b6f68@gitrepo.freebsd.org> The branch main has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=d4ddf8eaee9371d1d20bfb753237f25505d6afee commit d4ddf8eaee9371d1d20bfb753237f25505d6afee Author: Faraz Vahedi AuthorDate: 2026-07-12 21:09:06 +0000 Commit: Pouria Mousavizadeh Tehrani CommitDate: 2026-07-21 20:06:37 +0000 vtnet: Accept VIRTIO_NET_F_CTRL_RX_EXTRA Although the driver does not issue the extra receive-mode commands accepting the feature is harmless and some devices, notably Apple's Virtualization.framework, offer their control-queue features as a group and refuse FEATURES_OK unless the whole set is acknowledged. Signed-off-by: Faraz Vahedi Reviewed by: adrian Pull Request: https://github.com/freebsd/freebsd-src/pull/2322 --- sys/dev/virtio/network/if_vtnetvar.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/dev/virtio/network/if_vtnetvar.h b/sys/dev/virtio/network/if_vtnetvar.h index 904050c7864a..d5313c9af3cc 100644 --- a/sys/dev/virtio/network/if_vtnetvar.h +++ b/sys/dev/virtio/network/if_vtnetvar.h @@ -337,6 +337,7 @@ CTASSERT(sizeof(struct vtnet_mac_filter) <= PAGE_SIZE); VIRTIO_NET_F_MTU | \ VIRTIO_NET_F_CTRL_VQ | \ VIRTIO_NET_F_CTRL_RX | \ + VIRTIO_NET_F_CTRL_RX_EXTRA | \ VIRTIO_NET_F_CTRL_MAC_ADDR | \ VIRTIO_NET_F_CTRL_VLAN | \ VIRTIO_NET_F_GUEST_ANNOUNCE | \ From nobody Tue Jul 21 20:07:40 2026 X-Original-To: dev-commits-src-main@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 4h4T2T6lMZz6mNt1 for ; Tue, 21 Jul 2026 20:07:45 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4T2T5wBkz3Qdf for ; Tue, 21 Jul 2026 20:07:45 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784664465; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=VOP5k3qoLr0tQ/AImbEs35+ZUbgezYwcH+ppYq06qgI=; b=KcCpCPhy8Ir/BuufF+ygVgw5NPV6CmZH1JKwzx4lsmwj+BkJSuIOnVtNZHPOSY8DhjF9w/ CTEJuBsKYxOfVYq7CmJrzxQRtkcrow7BwvHMncOgOkmqnUrQH5/BJgGSdK0YB9DPShekRc yXYJwQK0yxZRY7zK9UNy88BGfdQN6MZkikmLquK3etrjHoq0qfeeS1sDmeHmb7PrjAq/BL iDiu/2mK9xtubphAuIzRaI7FQGHs7SMGmq57LiXpqp+R201XcE1JLnRA0UBJ6HzWcSyFMd EUai11oQ+SwTAFSxgUEFs89FtPeoi8LSbV85/gTEYYt201t2XmmTHMP5tDcEGA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784664465; a=rsa-sha256; cv=none; b=P5BEZw8WQ0tas31e6Yo+N5fALsyo90TF2yUHUSvMFcIMHQy3wnbpQVtzDfVCpvpOo+hyu7 0+8YkZa3FlBtgnJT1sxqMimu5ngWNZtzxpzDfIisacni1vYTQK615ntg91WElw838pGaeC umy/65QUkS46mlgnf2nfGudGDHwD6b8Pt7LYkNNV0rUwSjtWHuzSbOdqxyZ7kmsVn+dpAl 6Givrhq+Bs8EDj734JhTMQbPaC30HSgZA4UFmPU+Suj6EJgqBj9QAKfd0ppi/KeQynmIzz SSqWnNesGhiqdiq07AgPoAnM70yBxjKYxi5B7//kvjdUDGBCa7o+n9oJCELYlQ== 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=1784664465; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=VOP5k3qoLr0tQ/AImbEs35+ZUbgezYwcH+ppYq06qgI=; b=Dd6hVwiU2sHpE+wDcL6bzNj+qm+QDdMs+eWv6Sp1pyyCCuGPd501juF8XsR7Yj5IBwZccP f8W59Ms//ibKnMIipd5zUXfBa7bSYbOPKYwWlZPk6EZscHR4/fdcMerUo40iXQi/vGkNB4 pbFKVa/e7B9pGMhKT20GFJoEHHePeqedcyQakkEfLJ2YmZjBJwLQfIRltuHkVxjXXc2PUk nizs42eCl23+7gML+J8L6URg3bmtbsC1Y4ODjn9erq4vbNEkD4xVu/EGUcXJkE+VW1Z7TZ QVPWYFUfbpiHBW/QtFEaXKTxmmOcLaU0ke4DXk/itQYnQ4pKu60U/mOuH8yLMA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4T2T4hK0z13Q0 for ; Tue, 21 Jul 2026 20:07:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 219dc by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 20:07:40 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Faraz Vahedi From: Pouria Mousavizadeh Tehrani Subject: git: 5481c2d3ac1f - main - vtnet: Retry feature negotiation without offloads List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pouria X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5481c2d3ac1fc7682cdd184c7a797c0583e391c0 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 20:07:40 +0000 Message-Id: <6a5fd18c.219dc.70ea402e@gitrepo.freebsd.org> The branch main has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=5481c2d3ac1fc7682cdd184c7a797c0583e391c0 commit 5481c2d3ac1fc7682cdd184c7a797c0583e391c0 Author: Faraz Vahedi AuthorDate: 2026-07-12 18:48:36 +0000 Commit: Pouria Mousavizadeh Tehrani CommitDate: 2026-07-21 20:06:30 +0000 vtnet: Retry feature negotiation without offloads A device is permitted to reject an otherwise valid subset of its offered features by refusing to accept FEATURES_OK (VirtIO v1.3, 2.2.2). Apple's Virtualization.framework does this in practice; it treats the offered CSUM/TSO offloads as all-or-nothing, while vtnet's default request contains only part of that group because of hw.vtnet.lro_disable that would drop the guest TSO bits, thus negotiation fails and the device does not attach. If FEATURES_OK is rejected, retry the negotiation once with every offload-related feature stripped. Changing the feature set after a failed FEATURES_OK requires re-initialising from device reset (VirtIO v1.3, 3.1.1), so the retry goes through virtio_reinit(). A NIC without offloads is preferable to no NIC at all. Devices that accept the initial feature set are unaffected, while those that also reject the reduced set continue to fail attachment as before. Signed-off-by: Faraz Vahedi Reviewed by: adrian Pull Request: https://github.com/freebsd/freebsd-src/pull/2322 --- sys/dev/virtio/network/if_vtnet.c | 16 ++++++++++++++-- sys/dev/virtio/network/if_vtnetvar.h | 16 ++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/sys/dev/virtio/network/if_vtnet.c b/sys/dev/virtio/network/if_vtnet.c index ad642052d06d..ac5c08f60a0e 100644 --- a/sys/dev/virtio/network/if_vtnet.c +++ b/sys/dev/virtio/network/if_vtnet.c @@ -758,7 +758,7 @@ vtnet_negotiate_features(struct vtnet_softc *sc) { device_t dev; uint64_t features, negotiated_features; - int no_csum; + int error, no_csum; dev = sc->vtnet_dev; features = virtio_bus_is_modern(dev) ? VTNET_MODERN_FEATURES : @@ -836,7 +836,19 @@ vtnet_negotiate_features(struct vtnet_softc *sc) sc->vtnet_features = negotiated_features; sc->vtnet_negotiated_features = negotiated_features; - return (virtio_finalize_features(dev)); + error = virtio_finalize_features(dev); + if (error != 0 && (features & VTNET_OFFLOAD_FEATURES) != 0) { + device_printf(dev, + "retrying feature negotiation without offloads\n"); + features &= ~VTNET_OFFLOAD_FEATURES; + negotiated_features &= ~VTNET_OFFLOAD_FEATURES; + sc->vtnet_flags &= ~VTNET_FLAG_LRO_NOMRG; + sc->vtnet_features = negotiated_features; + sc->vtnet_negotiated_features = negotiated_features; + error = virtio_reinit(dev, features); + } + + return (error); } static int diff --git a/sys/dev/virtio/network/if_vtnetvar.h b/sys/dev/virtio/network/if_vtnetvar.h index e445bdf6d6cb..77a7680e5b43 100644 --- a/sys/dev/virtio/network/if_vtnetvar.h +++ b/sys/dev/virtio/network/if_vtnetvar.h @@ -369,6 +369,22 @@ CTASSERT(sizeof(struct vtnet_mac_filter) <= PAGE_SIZE); #define VTNET_LRO_FEATURES (VIRTIO_NET_F_GUEST_TSO4 | \ VIRTIO_NET_F_GUEST_TSO6 | VIRTIO_NET_F_GUEST_ECN) +/* + * Union of the offload-related features offered by the driver. As per spec, + * a device is permitted to reject an otherwise valid subset of its offered + * features by failing FEATURES_OK (v1.3 §2.2.2). Offloads are where this + * happens in practice, so feature negotiation retries without this entire + * group when the device rejects the first feature set. + * + * Must cover every offload-related bit in VTNET_COMMON_FEATURES. + */ +#define VTNET_OFFLOAD_FEATURES \ + (VIRTIO_NET_F_CSUM | \ + VIRTIO_NET_F_GUEST_CSUM | \ + VIRTIO_NET_F_CTRL_GUEST_OFFLOADS | \ + VTNET_TSO_FEATURES | \ + VTNET_LRO_FEATURES) + #define VTNET_MIN_MTU 68 #define VTNET_MAX_MTU 65536 #define VTNET_MAX_RX_SIZE 65550 From nobody Tue Jul 21 20:50:47 2026 X-Original-To: dev-commits-src-main@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 4h4V0770Xfz6mRSn for ; Tue, 21 Jul 2026 20:50:47 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4V074q0Lz3VLW for ; Tue, 21 Jul 2026 20:50:47 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784667047; 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=8pOUh3tXa/ipvHJ6aW+IvvYvfFYQ4m6iTv+98f5Jg0w=; b=wDHl+FXStN+UE4FrUZlmtBQUn0Dcyj50z7kCa5rV8OgMlBma+lR5bVnNo/vMDDgvMykRDb nABwSDhnVTzobHAKKwTmYOvVm3D5N0yhyKhsJHvYTWMdqKA6Mp71V1vq9gsaAdayn0YCiH cwmwDIOkar3A3SewBk7/qeCrWVKlA3PlX6ROJSrcAfX83e25Bo0gWP6cs+ST0KL8NoW+Cs lHkD9wUQtq7WRch4GAIz/d8TwjkPsjOOu54/Ep4cKNUkF7ShJ6ulm7RRRDlEQKbgacRc2b IDWMsM7wTJRMQy05NvVjPY2R3VHO0qTjjguvbMbMg4VpBV1+y/0NN9W14G1vIw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784667047; a=rsa-sha256; cv=none; b=g9/GlxaCF3olPlBlgdrgxTdCJith0STr5xDiRhvs1nG1UrBy28nXTxpdrh5NARcNOU/Vfz zRwyUjju2U/X58ne6WVgcDUJ5rApt/S2hH7geb7xgkMUXg6IWuotbvw4ZjTK+E0kdJaZnN WAtH7BNR9vkSVZBZzeaktLZWYo8WLFbqnQjjM/vgwgoxm/Qc07/ayoOK6NUrXRgHji0zyQ vzukgROwCmwLtO2BiR/mWyPfFV1mYeNWlEUIz0xP1wSJWyQLYySPmVzj38Q8TuHumNuL5C v2p85VCMgNg2cJyxNLerkjHoxDie7SiyaK+H06OLPITmbJe0lLEjBBuvhhN2rw== 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=1784667047; 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=8pOUh3tXa/ipvHJ6aW+IvvYvfFYQ4m6iTv+98f5Jg0w=; b=SlHuWwj9JVKm/VyXBjPgWedLBydk/x5F9MuDI66/hC7hAT++aXh9s0ct882I4in4T0Q98a McrXuEd7rKzWV4SfQg/wAgy19ie7AgPAeARs2lNUtxcJvflURAXuXPtMwQxOJueMKRz4ag UZCKU+Jm7Ii8tMQSCqGcg7zVN70ESS0eX0hoHE2W7/hSe238eeJMXw1tFZLZuiJkzQ1yeN CyH7FMp2q+uyr/OSZu2YPRRFmvrtp2fYqee+803o62QAnMxpreWrSRBjd73c62zvDFn81+ BdYcco777Kkgmwouohmj2tFqEkyHH6YHIp3/Y2V5Q12QESsA52LkhP3YHltdzg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4V073QxGz14KH for ; Tue, 21 Jul 2026 20:50:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 274bf by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 20:50:47 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Alexander Leidinger Subject: git: 1092aba1260c - main - exterror tests: harden the checks List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: netchild X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 1092aba1260ce5efb0d718352aa22158605c7506 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 20:50:47 +0000 Message-Id: <6a5fdba7.274bf.620af054@gitrepo.freebsd.org> The branch main has been updated by netchild: URL: https://cgit.FreeBSD.org/src/commit/?id=1092aba1260ce5efb0d718352aa22158605c7506 commit 1092aba1260ce5efb0d718352aa22158605c7506 Author: Alexander Leidinger AuthorDate: 2026-07-21 20:39:57 +0000 Commit: Alexander Leidinger CommitDate: 2026-07-21 20:50:37 +0000 exterror tests: harden the checks Skip the message-content check on kernels that do not advertise the exterr_strings feature, and pin the output format by clearing EXTERROR_VERBOSE. Reviewed by: kib MFC after: 1 week Assisted-by: Claude Code (Fable 5) Differential Revision: https://reviews.freebsd.org/D58322 --- tests/sys/kern/exterr_test.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/tests/sys/kern/exterr_test.c b/tests/sys/kern/exterr_test.c index b4746a485f58..316b5b66b0e0 100644 --- a/tests/sys/kern/exterr_test.c +++ b/tests/sys/kern/exterr_test.c @@ -30,6 +30,20 @@ #include #include #include +#include +#include +#include + +/* + * Pin the message format by clearing EXTERROR_VERBOSE, which would + * otherwise change the output shape. + */ +static void +pin_exterror_format(void) +{ + + unsetenv("EXTERROR_VERBOSE"); +} ATF_TC(gettext_extended); ATF_TC_HEAD(gettext_extended, tc) @@ -41,6 +55,8 @@ ATF_TC_BODY(gettext_extended, tc) char exterr[UEXTERROR_MAXLEN]; int r; + pin_exterror_format(); + /* * Use an invalid call to mmap() because it supports extended error * messages, requires no special resources, and does not need root. @@ -50,8 +66,10 @@ ATF_TC_BODY(gettext_extended, tc) r = uexterr_gettext(exterr, sizeof(exterr)); ATF_CHECK_EQ(0, r); printf("Extended error: %s\n", exterr); + if (feature_present("exterr_strings") == 0) + atf_tc_skip("kernel built without EXTERR_STRINGS"); /* Note: error string may need to be updated due to kernel changes */ - ATF_CHECK(strstr(exterr, " is not subset of ") != 0); + ATF_CHECK(strstr(exterr, " is not subset of ") != NULL); } ATF_TC(gettext_noextended); @@ -65,6 +83,8 @@ ATF_TC_BODY(gettext_noextended, tc) char exterr[UEXTERROR_MAXLEN]; int r; + pin_exterror_format(); + ATF_CHECK_ERRNO(EINVAL, exterrctl(EXTERRCTL_UD, 0, NULL)); r = uexterr_gettext(exterr, sizeof(exterr)); ATF_CHECK_EQ(0, r); @@ -82,6 +102,8 @@ ATF_TC_BODY(gettext_noextended_after_extended, tc) char exterr[UEXTERROR_MAXLEN]; int r; + pin_exterror_format(); + /* * First do something that will create an extended error message, but * ignore it. From nobody Tue Jul 21 20:50:46 2026 X-Original-To: dev-commits-src-main@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 4h4V0C5wkwz6mRQs for ; Tue, 21 Jul 2026 20:50:51 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4V0C4Ztfz3Vf8 for ; Tue, 21 Jul 2026 20:50:51 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784667051; 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=LESc3EXCLZtl8p8efauN1ysSyatdKdwDawvPAMFeevI=; b=UbzN+TXb2s/Q1m5ajoI43SsnRfz8MbKXnZTtKSamiW4C3JelTs2o9Gddv+hB3Z8pl1JBZQ cSFNY3JCiKYZUMb91BZZdK8jqce4SQBQAexyRe8+gU/RRIDiBtyxSH3OFoXL5N4UwNLkuF iVWKJNN33zE3Zm3nV63ymKPtdUcZK3OH+8+F6oPn8zhfLouyPdQthUimTgcrJsTRO5Xq9y TYph8et+9gkuGJJHmjYVIkHCUOxLdorwSjlsVJwswOlm/dyYNTXJqZGlEsL81HsAURCY4p w88yg8bL3M7k1Ymfs7A3rN8Lw5rUhUMLKqxKtzsggQDOXWdAR0aYXvGUaPC0Rw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784667051; a=rsa-sha256; cv=none; b=wdx2RyIKSP8mT67AXYTUj59Yzz09wE3qrLGkot8lqis2b2SZzLtR8DF4lz8XXlKn9UgzDV pYYAVeeWOfAco+oUNZNhr5kM4axG2vY6i2NMlT34ZelrT8O4TzGcArHZ6tDnel37PoHnAP ciDdA4V3x8C9QoS0ElqyP6P17IOm6Bz/+A8pVHwoZKfZrSQT4hGTAiTD5YUnxtj5zvPoNF HQuQnLfCFyFgKDFKdPT0/MHnqX3D7v2tptuWaTfWJgpjhR35Q5Qnset6qNjjETbKUuvrf5 pPZqPLNDd/GYCu9EKoLu1O1aek5QcPkaZp4wzIB0S7l00uac0uRgrkIVdHiWLw== 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=1784667051; 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=LESc3EXCLZtl8p8efauN1ysSyatdKdwDawvPAMFeevI=; b=VFVDx7jW1R2TvgRxGecpNV0Ny0nCzh9KJuIwJ0q5/ivPDqKdAOsIFNSjihOPylDx+659tU PYQ8NLsE98/VWxyoUzVTTuE4a0MKD/dYRoRY24z3jl2vH8g3xRK76cUvtt/mjbq6rOIvhQ UxNzYiS2su9ERmpZb9B1TkU6o5bm8LceWBMuSDEJqnMmBvNHpaEoGc/DRxEkVHsm9WDWps YD4QvgE5oamwlf+e9iUL9b+j85R2Qp85CkaxbTdLAdHZKi20BAZtIxOEYn+dd/r23YPJRm W2MdVaJ3e3zvTKNXgWTqtb/cWthiwBZLGwpxFPUcfmR4ezKN3jxus84m17+mrQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4V0C35kSz14GK for ; Tue, 21 Jul 2026 20:50:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 26dc8 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 20:50:46 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Alexander Leidinger Subject: git: c8db6d4b63f1 - main - exterror: advertise error strings via kern.features.exterr_strings List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: netchild X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c8db6d4b63f18c81557628ad0d3f715bea46cc99 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 20:50:46 +0000 Message-Id: <6a5fdba6.26dc8.4a0d66d8@gitrepo.freebsd.org> The branch main has been updated by netchild: URL: https://cgit.FreeBSD.org/src/commit/?id=c8db6d4b63f18c81557628ad0d3f715bea46cc99 commit c8db6d4b63f18c81557628ad0d3f715bea46cc99 Author: Alexander Leidinger AuthorDate: 2026-07-21 20:39:56 +0000 Commit: Alexander Leidinger CommitDate: 2026-07-21 20:50:37 +0000 exterror: advertise error strings via kern.features.exterr_strings Allow userland, in particular test cases for EXTERROR conversions, to detect at run time whether extended errors include the descriptive message strings, which depends on the EXTERR_STRINGS kernel option and cannot be probed in any other way. Reviewed by: kib MFC after: 1 week Assisted-by: Claude Code (Fable 5) Differential Revision: https://reviews.freebsd.org/D58321 --- share/man/man9/exterror.9 | 13 ++++++++++++- sys/kern/sys_generic.c | 4 ++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/share/man/man9/exterror.9 b/share/man/man9/exterror.9 index 47ffda065d43..2c9dc73f7616 100644 --- a/share/man/man9/exterror.9 +++ b/share/man/man9/exterror.9 @@ -6,7 +6,7 @@ .\" Konstantin Belousov under sponsorship .\" from the FreeBSD Foundation. .\" -.Dd November 5, 2025 +.Dd July 21, 2026 .Dt EXTERROR 9 .Os .Sh NAME @@ -171,6 +171,17 @@ were modified to print the extended information if it is available in addition to the usual .Va errno decoding. +.Pp +Kernels built with the +.Cd option EXTERR_STRINGS +advertise the +.Va kern.features.exterr_strings +.Xr sysctl 8 +variable, see +.Xr feature_present 3 , +indicating that the reported errors include the descriptive message strings. +Without it, only the numeric information (error code, category, +source line number and parameters) is available. .Sh ASYNCHRONOUS INPUT/OUTPUT Due to the nature of the .Fx diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c index c16e806e0bd7..5d356a26359b 100644 --- a/sys/kern/sys_generic.c +++ b/sys/kern/sys_generic.c @@ -112,6 +112,10 @@ static MALLOC_DEFINE(M_IOCTLOPS, "ioctlops", "ioctl data buffer"); static MALLOC_DEFINE(M_SELECT, "select", "select() buffer"); MALLOC_DEFINE(M_IOV, "iov", "large iov's"); +#ifdef EXTERR_STRINGS +FEATURE(exterr_strings, "Extended error reporting includes message strings"); +#endif + static int pollout(struct thread *, struct pollfd *, struct pollfd *, u_int); static int pollscan(struct thread *, struct pollfd *, u_int); From nobody Tue Jul 21 21:23:41 2026 X-Original-To: dev-commits-src-main@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 4h4Vk62Vf8z6mT4J for ; Tue, 21 Jul 2026 21:23:42 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4Vk61VdLz3Z2s for ; Tue, 21 Jul 2026 21:23:42 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784669022; 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=RKrN7YNmo4hnk86SihhW/SiznUnc+qXHavOFQMtdQoM=; b=XXzHpAj+smY56Xrw4w/DPkgU9/21jVmKppYl1B5ncA3L+BzCLF+fk15r+NVMlo4syw4wjM PRQOuttEe2SROVEZAmX37A4r5z3bxwRTYtPGQPmM6DW9s0EgNsLWJ+aPcSxjcL8/tocutz YbTVvk1Mzwr2FfKuWYnUO4n8w5ku9D0XIna5af/hJi6YZ8nMa0A6y6yMCIw0za0ahhO83N ykbqFyDyQuiOIVnHXBADJQHl+AxD5FOoOgkUcvCMqqxQ7AU8M1U3+uv2aUKdj1w+Z2B8L7 ZQUKj5zu+31BUQzvuGtcNhhpETmmoI+evESyBPW9hRDOKvOmu4LqTheAGTMRSg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784669022; a=rsa-sha256; cv=none; b=NvX1B0K0KsNoprDwHL5fyRgdE0VoHoZc3ql3HR9wuzsFwCUB1VDiJRU2a3lHId1HQ1Ndvl VgGF+az82DdGs6NHXaJdjwWzlet0bZrr6VPC7lhYrFPBM9GIjNugyAqDd8E+z1MH8+JMV6 ulC8+AqIpbs3bqHCewS7nEMkBgscM8Cb/Uafxk2YQEs7bCvrLNaZMOCWTfYZRDkAVnG4AB zmkZ1g9WLhTupakcePIRbabbxlVyojxIN84IgV0SWhsv0ARCrcdFigz6h34j+WHKz5EYxm xevpWPa/MBNZoK1LB+nVF8aX0wzHE10Fv943qEjGaGNKRQSFV3W23eo5889GUg== 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=1784669022; 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=RKrN7YNmo4hnk86SihhW/SiznUnc+qXHavOFQMtdQoM=; b=ZIdR6g1kJCTwugMnptAHEsWywj+D9TC6lhuGdy8fb7Ui/SJO7dRHy+TKk1r693p5Z9+s0c rwMHBND+yFGYI27qwpJysnJ5miYichMBofA5HAMqpiCK/CNCOlEHZhaOuzbB91ZUWlQ30J 98Gi5N9/H4BobjO9bdboT9Io2WBWjdmynOxBWcSRsuJQ2oDiWZzbUcgVCy6qIrwLTqYjir vvALwZ5ikAmf6Lqg1Pi8xlto9NZuYBNMTJ31GfWJuxFoMlafjHEJgyTbVn892DFTLAnOye I2btNJ0DFEk7TvT3JW64MH8COohegq3B2KbAgUarx5D4WyjPmxy/RtktDEttHA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4Vk575W5z15HZ for ; Tue, 21 Jul 2026 21:23:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 31069 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 21:23:41 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Ed Maste Subject: git: 2b1df6149e8a - main - loader: Allocate trampoline as EfiLoaderCode, not Data List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: emaste X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2b1df6149e8a2d50a09d13c64d1574dad91e10b1 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 21:23:41 +0000 Message-Id: <6a5fe35d.31069.4a3325c1@gitrepo.freebsd.org> The branch main has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=2b1df6149e8a2d50a09d13c64d1574dad91e10b1 commit 2b1df6149e8a2d50a09d13c64d1574dad91e10b1 Author: Ed Maste AuthorDate: 2026-07-21 19:19:40 +0000 Commit: Ed Maste CommitDate: 2026-07-21 21:23:11 +0000 loader: Allocate trampoline as EfiLoaderCode, not Data Firmware on a test machine applied NX to non-code allocations, which resulted in a fault when jumping to the trampoline. Reviewed by: kib Tested by: Jim Huang Chen Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58383 --- stand/efi/loader/arch/amd64/elf64_freebsd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stand/efi/loader/arch/amd64/elf64_freebsd.c b/stand/efi/loader/arch/amd64/elf64_freebsd.c index 62716d7b1369..2ba5c1419168 100644 --- a/stand/efi/loader/arch/amd64/elf64_freebsd.c +++ b/stand/efi/loader/arch/amd64/elf64_freebsd.c @@ -102,7 +102,7 @@ elf64_exec(struct preloaded_file *fp) trampcode = copy_staging == COPY_STAGING_ENABLE ? (vm_offset_t)G(1) : (vm_offset_t)G(4); - err = BS->AllocatePages(AllocateMaxAddress, EfiLoaderData, 1, + err = BS->AllocatePages(AllocateMaxAddress, EfiLoaderCode, 1, (EFI_PHYSICAL_ADDRESS *)&trampcode); if (EFI_ERROR(err)) { printf("Unable to allocate trampoline\n"); From nobody Tue Jul 21 21:38:52 2026 X-Original-To: dev-commits-src-main@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 4h4W3f68BWz6mVDP; Tue, 21 Jul 2026 21:38:54 +0000 (UTC) (envelope-from markj@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (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 "smtp.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4W3f5Qwmz3cHp; Tue, 21 Jul 2026 21:38:54 +0000 (UTC) (envelope-from markj@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784669934; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8SBJ1n1VIS1vLIdWhgC5WQCGJBA+GglFGtl7uckrGpc=; b=kYe3mwuYFbcdjk7nF98GPKZsC/WJs12nM83hTcebEFF8NnPEGjcA3uBBv/kqHgj0LcSJap nK6tk16nvI8x0Mij/w0Y65cSqlmDZmx4koCw9GAJA8+33oA4QNCEAKZfb/aY4rvasFNQas xZqJZ/2vwXfvuQqlXMCfdxOaHDTOeT+QQZkdEbvJwDuVKeSPPOyw2SXHP/TflU4H1JrJPC tyak5OwNXUmJcHCEdyfTMVUyXRuWlK+sKVirhi4T0PuURuOlWPR9O7O+I3ABPOzUBmyL0q lcIhtOaE+/nDuhjjThZv9QoCl2nUmp8+CMuMlKgPF9kIFWzr3rXMvTxKGP2OkQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784669934; a=rsa-sha256; cv=none; b=QuUQCRpGaTfwMx7j97sL/3fHJgMxYpuvJNU8Rgsre/DJ2vUgOHibLjbo829yzLbCiVgZW8 bwYxMTPakSmzQA5cK4pZao8au9C9Ft2ykVpwF0V4XknSTF57a2wNQ9bfceMI7YHLQNCIaD JCmX8Eliav3sWvU8h87VVXISyG29v0Qi8bmoVK3vZalvNJWkMqX+ijZvlzeYlutcFZClGL /oUjdAFlvDEfyyNVTRp17lhl06MRGSHCzJf04LhPB0iKlw2RLLP+cDjb8K3cXius106jms mY3idnF6lRpiV0lhQApA8Gh55ImQ5p7z+BD6N/kG2vVdu7NfjRm76GY0ymC1qQ== 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=1784669934; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8SBJ1n1VIS1vLIdWhgC5WQCGJBA+GglFGtl7uckrGpc=; b=pM7gg2iQl/hm5n25liRQN02dQQodgA+V/xv0/UbWfSEeatGH8Op0adIBgLDhgQ/dL7uGqJ g8NE3GRqvgiRyBEcFDSec9mqh/2RZ5OIff/LuBqKGgp9/mwP1avllE4cOrympWB/boj9Vu VvU6gi1qcJs/7T7LZ4zjtMP/Kc1+hfCKVwrqtNUc4lldxNMkZzM0sWkB9EGthhkKclvbrc bOM0toqnRGtwU8Dk5J3VxypQ6+nuvS0tMtawfflNBGOk82eX7psWMtW4wkGFe4BwEJm2z6 uC5uf6lojin/aluAD6Md0m3zzUV6hxHl1qWGfi1ehAeROQ0QfCiFRmQvW6p/lw== Received: from nuc (192-0-220-237.cpe.teksavvy.com [192.0.220.237]) (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 did not present a certificate) (Authenticated sender: markj) by smtp.freebsd.org (Postfix) with ESMTPSA id 4h4W3f2XBFzQGt; Tue, 21 Jul 2026 21:38:54 +0000 (UTC) (envelope-from markj@freebsd.org) Date: Tue, 21 Jul 2026 17:38:52 -0400 From: Mark Johnston To: Ryan Libby Cc: Ed Maste , src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Subject: Re: git: caabdb3aefdc - main - contigmalloc.9: Note that M_WAITOK may still return NULL Message-ID: References: <6a5fba36.3d93d.694b6c5c@gitrepo.freebsd.org> List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Tue, Jul 21, 2026 at 11:57:41AM -0700, Ryan Libby wrote: > On Tue, Jul 21, 2026 at 11:28 AM Ed Maste wrote: > > > > The branch main has been updated by emaste: > > > > URL: https://cgit.FreeBSD.org/src/commit/?id=caabdb3aefdc45cae90203210034086801fa9005 > > > > commit caabdb3aefdc45cae90203210034086801fa9005 > > Author: Ed Maste > > AuthorDate: 2026-07-21 18:10:00 +0000 > > Commit: Ed Maste > > CommitDate: 2026-07-21 18:27:47 +0000 > > > > contigmalloc.9: Note that M_WAITOK may still return NULL > > > > Reviewed by: markj, bapt > > Sponsored by: The FreeBSD Foundation > > Differential Revision: https://reviews.freebsd.org/D58382 > > --- > > share/man/man9/contigmalloc.9 | 11 ++++++++++- > > 1 file changed, 10 insertions(+), 1 deletion(-) > > > > diff --git a/share/man/man9/contigmalloc.9 b/share/man/man9/contigmalloc.9 > > index 2e5d55ae8ba1..a9ebaf100eb9 100644 > > --- a/share/man/man9/contigmalloc.9 > > +++ b/share/man/man9/contigmalloc.9 > > @@ -23,7 +23,7 @@ > > .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE > > .\" POSSIBILITY OF SUCH DAMAGE. > > .\" > > -.Dd July 26, 2024 > > +.Dd July 21, 2026 > > .Dt CONTIGMALLOC 9 > > .Os > > .Sh NAME > > @@ -124,6 +124,15 @@ function returns a kernel virtual address if allocation succeeds, > > or > > .Dv NULL > > otherwise. > > +Note that in contrast with > > +.Xr malloc 9 , > > +.Fn contigmalloc > > +may return > > +.Dv NULL > > +even if > > +.Dv M_WAITOK > > +is specified, if no physically congiguous range is available that meets the > > +specified constraints. > > .Sh EXAMPLES > > .Bd -literal > > void *p; > > > > But is this desired and intentional behavior, or simply what the code does? I think this is intentional and a natural consequence of the interface. It may simply be impossible for contigmalloc() to satisfy the request if there is no free physical memory available in the specified paddr range, in which case it seems better to return NULL than to loop forever. That said, I think the claim in the man page is actually wrong now. contigmalloc(M_WAITOK) certainly used to be able to return NULL, but I think that might no longer be true now that kmem_alloc_contig() is implemented using domainset iterators. If we try all domains, we'll end up sleeping and retrying indefinitely, or at least it appears to be that way. > Paging through grep of contigmalloc with M_WAITOK, it appears to be a > mix of callers that handle and do not handle a NULL return. Some of > them just handle it by panicking. Is someone planning to audit > M_WAITOK callers? > > > +is specified, if no physically congiguous range is available that meets the > > Typo: "congiguous". > > Ryan > From nobody Tue Jul 21 21:57:42 2026 X-Original-To: dev-commits-src-main@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 4h4WTM0N8Sz6mWS8 for ; Tue, 21 Jul 2026 21:57:43 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4WTL2hhSz3gPn for ; Tue, 21 Jul 2026 21:57:42 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784671062; 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=ecfXgMesS4V7mocQloAlM4F3FH7/sU1lrsOD9rhzRL0=; b=OWAUm5T1MXRDwysr1zqoAyymjZch6s7o78HxAGkqyRX3QlmezSuKHQduDXfdx/0fp96X45 hWJ8sWzyomryDyphw1pzoeBIzAXi9HNq9A6NVg7FfSDvcyW1YRKvjIxp0NUPetyB3e/w7p Bgo+hxcqjy0Wf2TNKSAOFEyGUnJmn/BGDNMLVEs+XkRGjXji0+auUuQhPZFCHJB4R+a3Sl TO0ZwNJGw9hA+XCOLTs9iuc2sizOzesPIYx4YGmsAZWkQ7LfPh7sbEbpwtAAA+BN6sWJsD ORLkd+PG/SbkV/wsPX5DDNHyWPIFRHm51LE7C8I/Cr3rlHAkxofe83xzfz/LyQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784671062; a=rsa-sha256; cv=none; b=ifxuU6LUK8c5u49vDomvax/+SwaoFiGpgP4WypfBpCNbsJlUXeMjw6hPc4BmUS+GMwG1fn dKpSaIyacAXiB5Af7cgJIP/tlhHu8zQqfRm+vBvYc13D+WjnQ8lr3i4eFMyZA0cmEmCusa kyNW7vzkMGj4ictaCnzAkmhoPerXESESbx8uuzvqXu9Ockr9mYQMa8LBG72Ci8ucUqlvgB OOISNUZiJoMUqeTE8PyIzn4MFNGCwzqQqfdK7WmkTFegz8LO7Eg3ZZPDDNJ8u0htIhEuQe iNW1+Qf7tZrrW/PJlYUPEO/QKjZGJ1CBPNiM/lfDL7PIcoxxY/+L0UE+Gm1f8Q== 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=1784671062; 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=ecfXgMesS4V7mocQloAlM4F3FH7/sU1lrsOD9rhzRL0=; b=Vu6u7wg8aEJFRMF6UYprVerJREcOcvk8h+aKl11mqTMlfckLi/Z/bT2hod4cQ3o3zP0al3 Bf9mWBw0lSkJLn7ui3AokC1LpWu3/suf/2gQ9cX1XdxxW1re9kUa9+/zcXccZuL/IcdoEB kWascBLJM+tNosu9k4UAkW7P0KxyUsEvEze62VxJuL8XZxV4hGgMTrQykFqubNgTvVqubW 9qKBLT5ryqx07uDXbBxUfvQmQ1y53NoSoXZzoBwdK50zZ3aYqHDzLe2c4hmm9MBRDQEj++ yYQhNKpVIvGJEhLpOxM4DHArEAT/GiNSjzdlcfOfo6EINqtkObKQzfmpEloeUA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4WTL1gFmz162L for ; Tue, 21 Jul 2026 21:57:42 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 34479 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 21:57:42 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: a931431a1dec - main - libsysdecode: Recognize NOTE_PDSIGCHLD List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a931431a1deca75079f034b74a63c2774f83be8d Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 21:57:42 +0000 Message-Id: <6a5feb56.34479.57899d51@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=a931431a1deca75079f034b74a63c2774f83be8d commit a931431a1deca75079f034b74a63c2774f83be8d Author: Dag-Erling Smørgrav AuthorDate: 2026-07-21 21:56:56 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-07-21 21:57:32 +0000 libsysdecode: Recognize NOTE_PDSIGCHLD MFC after: 1 week Fixes: 2a5e58c59694 ("procdesc: add NOTE_PDSIGCHLD") Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D58388 --- lib/libsysdecode/flags.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/libsysdecode/flags.c b/lib/libsysdecode/flags.c index 983314e56369..90bebde4dc2b 100644 --- a/lib/libsysdecode/flags.c +++ b/lib/libsysdecode/flags.c @@ -377,8 +377,8 @@ static struct name_table kevent_vnode_fflags[] = { }; static struct name_table kevent_proc_fflags[] = { - X(NOTE_EXIT) X(NOTE_FORK) X(NOTE_EXEC) X(NOTE_TRACK) X(NOTE_TRACKERR) - X(NOTE_CHILD) XEND + X(NOTE_EXIT) X(NOTE_FORK) X(NOTE_EXEC) X(NOTE_PDSIGCHLD) + X(NOTE_TRACK) X(NOTE_TRACKERR) X(NOTE_CHILD) XEND }; static struct name_table kevent_timer_fflags[] = { From nobody Wed Jul 22 00:15:48 2026 X-Original-To: dev-commits-src-main@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 4h4ZXh2MTTz6kTc1 for ; Wed, 22 Jul 2026 00:15:48 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4ZXh1KYDz3Qyf for ; Wed, 22 Jul 2026 00:15:48 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784679348; 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=QAdphhqTd8lzjVwrlX0O7lg6RtkG+6WxPPIBLBmKXu4=; b=gjrMVsjvElJcoCNqj+RR0zk+MNr8SVSteLUzwOmjo9xfhsjB1mTupJq3BVEwbCALN68/qA UVj/rz9GI70xsVjsEkIRLCcdNm9oNI7TyZqBX3jxCMAaCb+wGRwCFnDTkeCYPj19+rzfDN 4U1sQKQ6rWP6Sl+5+M3FTA4JNE2ZQGn+vIcMyqfi2KgwwyjXK3tvsBSWwaOSBL25ouoeNo qNltUKUamL3HF4825aCv/c83IKLqTt+I6FyvQXW+a+Rxdv2pyzlZOSw2Tw7yjp2nwNArkv CdpvfGmErWeyeFJfI8X9Rw+2RfQHppi4JA49UxbQ/x6xrdYv34HgK1C81HEOdg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784679348; a=rsa-sha256; cv=none; b=dSRKkmiIPFvBN1In7E+wY+7OkKNNmKW7Cn7xLaUzKNJcRcCBFOUyUVt0cK6/eaVxIXEoCt 8QTzBkbr8AQcWQQKpaAXbg9Epq6UqvBuytnYU/NAKetegrLW6jVh/g+2y7TR0RkmRbxqB3 O2aHi9p9+RJD2TQdPuLGCNMtHnnNwmlgr6Ewnl3Auw/AfcWk+Lxie6YBWHrBtw52kqdqC8 B+FSfWhUs4upsEjziHgQfDWDq+ukpr4W2684DwBQqqra2BTh3F8ebY7jpWxoEc3sSKqRM5 r/O456PHEXweVUpumK+QjDBoJ6RzkxlcHgu4+hA6QL788dpAdSrf+1eJHguzwg== 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=1784679348; 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=QAdphhqTd8lzjVwrlX0O7lg6RtkG+6WxPPIBLBmKXu4=; b=a5WDtB9mLO6OAKvU3UJ2yeO3/me9Tx478ZU3DFAddG28xGB6hoYFubZQt0B/njWjYDAo0X gK1vuKPTYN4V/2gWq6jjX0bpol7ANlfCWqJblYvjiliTCKKkynHRkOMwUtc4osbyNMHmaC hPvaUS3bXMLgkOZ9Xo6C+Bp5wmedIYuvfWNe5Wcppv5h5NVHeQ5gMD/ROYoY2iUBZFf66U vE/E8kWg8NjwpoPWxpEYzrU/Pdb/y/Eiket6ii5564049+IXRBYoEtb/4oK46f6059Vk4/ 0y7CxZIBX7G96jxyfNBEa6sQRzfSjmsP6N5x3QFAH1o4KA3ZAZArXuyVcTZS5w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4ZXh0Mr4z19TZ for ; Wed, 22 Jul 2026 00:15:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 44464 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 00:15:48 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 55c240eada96 - main - amd64: Fix an off-by-one in the fred_ipi_handlers definition List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 55c240eada966b4595cbf93bf0641073713c5b99 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 00:15:48 +0000 Message-Id: <6a600bb4.44464.534d107c@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=55c240eada966b4595cbf93bf0641073713c5b99 commit 55c240eada966b4595cbf93bf0641073713c5b99 Author: Mark Johnston AuthorDate: 2026-07-21 15:29:33 +0000 Commit: Mark Johnston CommitDate: 2026-07-21 22:46:42 +0000 amd64: Fix an off-by-one in the fred_ipi_handlers definition Fixes: 6e93f5e4d693 ("amd64: FRED support") Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D58378 --- sys/x86/x86/local_apic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/x86/x86/local_apic.c b/sys/x86/x86/local_apic.c index 0dac24ae3048..405db4fcc550 100644 --- a/sys/x86/x86/local_apic.c +++ b/sys/x86/x86/local_apic.c @@ -2394,7 +2394,7 @@ native_lapic_ipi_vectored(u_int vector, int dest) void (*ipi_vectored)(u_int, int) = &native_lapic_ipi_vectored; #endif /* SMP */ -void (*fred_ipi_handlers[IPI_DYN_LAST - IPI_DYN_FIRST])(struct trapframe *); +void (*fred_ipi_handlers[IPI_DYN_LAST - IPI_DYN_FIRST + 1])(struct trapframe *); /* * Since the IDT is shared by all CPUs the IPI slot update needs to be globally From nobody Wed Jul 22 00:15:49 2026 X-Original-To: dev-commits-src-main@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 4h4ZXj3f1lz6kTW2 for ; Wed, 22 Jul 2026 00:15:49 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4ZXj2SfXz3QkS for ; Wed, 22 Jul 2026 00:15:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784679349; 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=VSzie/xhLYIS5tlqZV33LEujCR/qf/UHvmFc5+p4sYw=; b=NMS7rSEDe9ok+B2BVSnsJ/nIngv8X699Q5onkUnDiWNDAoT2liaHg5dAwaepPG/EN17Kjy XN3qT22ldZhU+LwB6hjTOI8hm6GZniVefTesJqQ5VZYo9SDgCmBkUz57jCE3TM+h7DFxfT sjK9x7xeF2oLpPSciQYgnKYt/h6U+b+/lKoEhpDFPdfTof3Zu28JvTyluUVkSYO+T0XDt0 spm6J78PZIMZPlN6k1hKcnrh2BcyN2fQznG2OoRcy0OhWTK7X1ZdT0pgOHAANHZQCyrVl0 N3zj5POqzUxtcR+VjJcVPfwo6kQo42/y7oO27polAdZvb7/f6nE1/pL5tJ4hsA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784679349; a=rsa-sha256; cv=none; b=Z3UkvNYKCJXy5Rb1zx5Wc6AcQy710W5B7L7qC9o/9Evzj/z1EI2Hqg5s2IozXP3X3Ksh7k i3fLpB4omp6SwqTXQPakQYwC+Ils1YLmMyEBuHXAN0BGOr512q101hZUqq4cvMa67AQATq oRyZ7jC8RJkNsyQAtnY7byZ+adXygDBk9g/fD9QojcPHfRNd96lH4rX9T6Of0jpwT4p8CN uCRqf5xLuUcH/exxPsjFB3k4/kGlrQMRZZGbp1x4ODcl1DZWP/ASt5l10NAJXhhGOF0YYC Kk5kT8X6Zz48Ylis20DW6v+JlOujT4MdoGLhYxBzStlVzy6OThIW5KV9X7GWNQ== 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=1784679349; 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=VSzie/xhLYIS5tlqZV33LEujCR/qf/UHvmFc5+p4sYw=; b=ecWxnp4y4GUVFVu8mRxDqYuti5RhKkxSy8fvrKH4aVDGjWz3GOVU3RNczQrjC/PWZTK3v2 +fQmKs0DWGJ+tB5nS5A5/9vkHQNke36uF1ejj5IfLPNcZjvE04mrOQNla337FiwySogzBI 8vLeB7z9YHWiz2F44yiq+UjLn611wW/h0VkrIrgVNKvZToi4/CC2Jl7V8JCmbcpRnf47Io 9ubMaPKnC8pGFB27sQdETkdl3R2awpeK86KBCeRC2cOhmNLRJYGri/uAT/MDyX9hB2fJqy iTQ74CNehZt6/a+F+NLU0BdMWZzZBLhDjSFEX2ypIiaNktpfGGOfjNCsKr6ojw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4ZXj13mLz19ck for ; Wed, 22 Jul 2026 00:15:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 43f46 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 00:15:49 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: f42c68291d68 - main - amd64: Remove a prototype for an unimplemented function List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: f42c68291d6803abc404fa8d6915a9f5de3a3448 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 00:15:49 +0000 Message-Id: <6a600bb5.43f46.24a32efc@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=f42c68291d6803abc404fa8d6915a9f5de3a3448 commit f42c68291d6803abc404fa8d6915a9f5de3a3448 Author: Mark Johnston AuthorDate: 2026-07-21 15:30:56 +0000 Commit: Mark Johnston CommitDate: 2026-07-21 22:46:42 +0000 amd64: Remove a prototype for an unimplemented function Fixes: 6e93f5e4d693 ("amd64: FRED support") Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D58379 --- sys/amd64/include/md_var.h | 1 - 1 file changed, 1 deletion(-) diff --git a/sys/amd64/include/md_var.h b/sys/amd64/include/md_var.h index 55aa4843705e..d51cfae510e7 100644 --- a/sys/amd64/include/md_var.h +++ b/sys/amd64/include/md_var.h @@ -72,7 +72,6 @@ void amd64_lower_shared_page(struct sysentvec *); void amd64_bsp_pcpu_init1(struct pcpu *pc); void amd64_bsp_pcpu_init2(uint64_t rsp0); void amd64_bsp_ist_init(struct pcpu *pc); -void amd64_bsp_fred_csl_init(struct pcpu *pc); void amd64_syscall(struct thread *td, int traced); void amd64_syscall_ret_flush_l1d(int error); void amd64_syscall_ret_flush_l1d_recalc(void); From nobody Wed Jul 22 00:15:50 2026 X-Original-To: dev-commits-src-main@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 4h4ZXk55mnz6kTH5 for ; Wed, 22 Jul 2026 00:15:50 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4ZXk30WNz3Qyj for ; Wed, 22 Jul 2026 00:15:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784679350; 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=P0KtCNeb3S0mgvmpU5RDYaFei1rZhiB9pcxdeDWtrqw=; b=bPpki3frGYFk08HEBkOsGhy2UOktRbKo6IKwjJpJOq/sGeBkupbzSA4+IOK2wNYt8wqcp5 62r4UPgrtsIv4pTgXlkVQdS7ZczhXH2mp9jCET/9B7vmkMpj5xmDeIosbcvB3lgMY5aHsl 0iSTTvIhmZcnvD+Ass2GHeEMx6IlW0QnXWhJ1+q6ARXnEC1iuzMgjBWh4bEyc95kDks9ZA SYoldj+ovWcPnhdR791H10FLyz79+bcwQZzya1rTlYNjMXZKd63/t9avgUbtbu+u+G1onx 3Nke6EX6qZFG60qDU3RMl72cXsGDlQ8l5mV8gh0uzhdiF3g2NMG9xq5x4jda5g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784679350; a=rsa-sha256; cv=none; b=LIWypH/bN+VM3KzwMhr+EADbxWHkDccnQQclWh3FbxtSyGO+Liai/6kiiPwiN/EXg8NXfE HGTMJF9jIS6+oeFYTU8OVO1Z6mUaa02A8ydek3a/sJbYwEvLPan8dx3eQbKAGcfcO5p/3a HdX/P9/R0Gq7o0uKVOQJ1Aux2TwQDMDIK+08Xv7vQ/dfRSOTwZw5+JCXGezmASeNG+hp8s wO3NMSNRzD521nw8NuRGxKL+bNujY1hn217QVodDWAuXvBVfR6oGe0UkA/OUvT3904fN5F eqdAv8G63wkLk/drXuD2Wn17WmijEOcknmLGMQKNT2nsLHIUl0wjOzSxivDGUQ== 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=1784679350; 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=P0KtCNeb3S0mgvmpU5RDYaFei1rZhiB9pcxdeDWtrqw=; b=uVs1WzKBkGQ8Pm4whKS4eW5OlpV8hReR4unH4DlMINYPhEskbTKRjSJn7tnQQ2zd+9cvp4 PH296wlReaB+BUwX/nmo3yp/4+tk2KvB9HaKCnFqeLzb9tWR39Tm/XfnU4d4406WSHsWA6 ZIM6+esiJXKypEoH8alN+sKLsW/aEwmgoK2SJknwXDJK2swIZrO9qUeRTNAHwBn7s8j35V XdsW6QXgKZTmR5TsdruP6DDWaFkMuwEKtuc+bEJ3IUa/wgci2wWTMZF4c0P7LIpcrZqnCQ 7YgYGhFYnyBxprGJ7HXqkumAgquD7s/nkdw6gpVNCd/Yte/A6zvWAJpn+ld6Aw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4ZXk1spTz19ls for ; Wed, 22 Jul 2026 00:15:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 43958 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 00:15:50 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 2efe148a2a32 - main - exec: Avoid overflow when computing the size of the exec map List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 2efe148a2a321d4c9ed46bdb166f710b2cb21529 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 00:15:50 +0000 Message-Id: <6a600bb6.43958.6c552007@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=2efe148a2a321d4c9ed46bdb166f710b2cb21529 commit 2efe148a2a321d4c9ed46bdb166f710b2cb21529 Author: Mark Johnston AuthorDate: 2026-07-21 22:30:53 +0000 Commit: Mark Johnston CommitDate: 2026-07-22 00:10:04 +0000 exec: Avoid overflow when computing the size of the exec map On a test system with 1024 cores the size of exec map exceeds 4GB, and all of the operands in the size calculation are 32-bit integers. Tested by: Jim Huang Chen MFC after: 1 week Sponsored by: AMD (hardware) --- sys/vm/vm_init.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/vm/vm_init.c b/sys/vm/vm_init.c index 316b43c1c240..85c425455ddb 100644 --- a/sys/vm/vm_init.c +++ b/sys/vm/vm_init.c @@ -276,7 +276,7 @@ again: exec_map_entry_size = round_page(PATH_MAX + ARG_MAX); exec_map_guard_pages = 1; TUNABLE_INT_FETCH("vm.exec_map_guard_pages", &exec_map_guard_pages); - size = exec_map_entries * + size = (vm_size_t)exec_map_entries * (exec_map_entry_size + 2 * ptoa(exec_map_guard_pages)) + 64 * PAGE_SIZE; kmem_subinit(exec_map, kernel_map, &minaddr, &maxaddr, size, false); From nobody Wed Jul 22 00:41:01 2026 X-Original-To: dev-commits-src-main@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 4h4b5n6vDJz6kW0C for ; Wed, 22 Jul 2026 00:41:01 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4b5n5TpLz3T3Z for ; Wed, 22 Jul 2026 00:41:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784680861; 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=DGTYIjPHl80AsI5fZNavDS3ewfTTJm+WY6TUnyOfA+o=; b=pk+0hpeO5huRNn3XLcCeV8anj1qgXUO5/ps6Vw9ToSEVc88zzwCIL5q/b2Qr9cZfd53YLU 5dfIj2Sq0C4V3Pw9GaP6dYnL0b4WHJvE5c8R+rj9FNuNDVanBemkzSGlWPNtpsLRTnwcGP VPbvGEaKyqa0XQILiElhHgKybzy5mPqKJSinbBFYnsAwpmeG4XxtK0oRieGmnyHv/GYsMD my4PmwDsxdRLqkjG4A+Pc65D+d5cG0FeC1GA08ucURkkKxeqSmvv78CwXubqyyMMFAzHuc pEkymZ7Z1/80I+vyoEP9DG62XJULKiZtBVY38dSXJfqJ8XWkc8w6m4wxrjvWvw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784680861; a=rsa-sha256; cv=none; b=VIZ8suZOKr1GQDJRLhQmORCDAbBtwF2WNcc7PuXIkcWF/o8v33vOV2tzi3CYkSYs+rylIc XCz5Ch3+NOodhZfUvr/CDfwKwLCNNlH45lJpbFzNXBGeH0vochaGQDBn0uWVfUuwsaCISd 1fR3NP/eCImrWtIloffza6OOiBKWH2gkLmX1W7LmhqYT/IzzoDoybszBI6F6IHzqalcbJ1 psziBN3dp+KoSId/zHPT/afGxbgrD1ICk6La6Fb4lru3wlIUl/fIfn5umxIBLOP7i6M4LC gwBRhYLeadhY+2Psqn5bYXoXHvEtYv0FQrXSr0BJazbaBP76GQs7iWINIcI6RQ== 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=1784680861; 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=DGTYIjPHl80AsI5fZNavDS3ewfTTJm+WY6TUnyOfA+o=; b=QU+G9deu+IrbAUeAcci2hvjIohKDnyjHr2qlm9/05zEK8HlInoA9RYT48Gg5FWS0n0NfBz Bami3TQ1fKA8K5x9kd6OfhNFC484kDa/kOFMfjt0K667lBaJmmHUBDxROFS4059V1rNB+9 8HLH71kNFWImyJM6arbUOBMQ4Qjx+NJVEj5rYOaVPiD62E0usUm3pGUQ97bFKmpLTXHSYU 1FpVR+yoEDBdQTTyoQKdH1mBtrqBVYC5WW4O7IOSwzuCuXo1gl6sxDNaiRpaGc2fYgyeY3 n1U/v2ysfErMreMjql6QWdSu4FO6lO+7IE2uyNHdCncnQY0u16kTwbyycqr39Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4b5n4WNVz1BCX for ; Wed, 22 Jul 2026 00:41:01 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 46479 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 00:41:01 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 5001af647b3b - main - loader: Fix error handling after an allocation failure List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 5001af647b3b263aeb3d4fa7a6c2690399265202 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 00:41:01 +0000 Message-Id: <6a60119d.46479.140bf2fb@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=5001af647b3b263aeb3d4fa7a6c2690399265202 commit 5001af647b3b263aeb3d4fa7a6c2690399265202 Author: Mark Johnston AuthorDate: 2026-07-22 00:17:56 +0000 Commit: Mark Johnston CommitDate: 2026-07-22 00:17:56 +0000 loader: Fix error handling after an allocation failure MFC after: 1 week --- stand/efi/loader/arch/amd64/elf64_freebsd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stand/efi/loader/arch/amd64/elf64_freebsd.c b/stand/efi/loader/arch/amd64/elf64_freebsd.c index 2ba5c1419168..592d553094ab 100644 --- a/stand/efi/loader/arch/amd64/elf64_freebsd.c +++ b/stand/efi/loader/arch/amd64/elf64_freebsd.c @@ -163,7 +163,7 @@ elf64_exec(struct preloaded_file *fp) (EFI_PHYSICAL_ADDRESS *)&PT4); if (EFI_ERROR(err)) { printf("Unable to allocate trampoline page table\n"); - BS->FreePages(trampcode, 9); + BS->FreePages(trampcode, 1); if (copy_auto) copy_staging = COPY_STAGING_AUTO; return (ENOMEM); From nobody Wed Jul 22 01:51:48 2026 X-Original-To: dev-commits-src-main@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 4h4cgT5twBz6lLS6 for ; Wed, 22 Jul 2026 01:51:49 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4cgT1jM9z3c03 for ; Wed, 22 Jul 2026 01:51:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784685109; 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=qyc7OYVy7aBXjSned35HCJFnWkmivMuEvKiXeQ3L3bs=; b=XOyJflSEOBUgmvbuMF4/23scxE1jOSVjtSXnPoRsTKoKNCsQBA6efDadG2x+zqHveAbmEr 832T9CTox2H8njMLYHizgzi8l1joxazdERvkCMkBbLU26yC3jYc/I5Kddndxgu7Lhj5DCs w1eT+zf1niyT4c4D1C8gqtKZl5XwrqgihTO6CG/v3ibmbSQ+kiiCykvMH1aHg4J9yaQrBM ZGkNdzKWwW6yegQgrmo20j70sZQyg1Y79gIIXaJrcnQfqiYWG1MzgFOVLEGB0tFnO8o4dn To5Ok1L5dVaFfkgHl0HUtS23Hxg1pw8DD+eWhOtXb0X7/W2L3QJFBIU1sLE23g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784685109; a=rsa-sha256; cv=none; b=QCnVLpb46jp4A3iWdQxDDXNMjjbS0LsOVPrIu+IjUwp+CcJ8pw94mUfaSGp4/SQcrG104G /yJh/rJlzr4ht7RLufImWPwd1JDup7KX8NcilWHAnL58bCpfBu3B1eGVluDdajvYZd4d+x 1h7A5deTRIKVPyRdd/5KbKvC8u/8gEghu9Sn6b7xVvIGq621sdEyDFhNfpiqoqDkddfraW kcGn2ALjLwBZRqmTrv2tAg6RSfp0ZRwru06kBzgxD3KwDRK3SI1/UAELxmEr1SvFekhRJI tuoum83kAQ9KmkfVVYyeD8B9RlgImSgPkpuLbHmWFKKmU+7jcjQpm3NdOzW3Xw== 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=1784685109; 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=qyc7OYVy7aBXjSned35HCJFnWkmivMuEvKiXeQ3L3bs=; b=aOGhXNJS5BPGcGEn61JMp+4CfN64Qh5XYuHWL9BYXBFLuIPxOwLr7n2NRxWy+x+j3Mae7P WVpa01GB5y3XCxG/kttmDbfl+v3pakcvclsYk1COuHe8xA9tDQPF9MRGtBTt68rYjSZEbc sjWlHw7wijQhaNlf4QyMTxkJY/yYwYrNcBsd8LI2XIcQ1EwjZiSt5nMMxYzqjCysFk46iX vUM44Z+qRKkxBqGdunz06Ob72hJiePm4HbqpFMVNgZ9zKUB3/SB/GxwB7H6dEIxyE66yHc EWJNmUX0rvoLTtsPBhsKgUB9QirbigxYAZNy61cIA9CxjvqTZVpWsR3VQB5OsA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4cgT0K96z1D2R for ; Wed, 22 Jul 2026 01:51:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1f0fb by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 01:51:48 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Muhammad Moinur Rahman Subject: git: 6433ec43c802 - main - contrib/libucl: Import libucl 0.9.4 List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bofh X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6433ec43c802d56ef615b44c435f8dd229d55695 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 01:51:48 +0000 Message-Id: <6a602234.1f0fb.442dc904@gitrepo.freebsd.org> The branch main has been updated by bofh: URL: https://cgit.FreeBSD.org/src/commit/?id=6433ec43c802d56ef615b44c435f8dd229d55695 commit 6433ec43c802d56ef615b44c435f8dd229d55695 Merge: 5001af647b3b d7ea4aaa3e20 Author: Muhammad Moinur Rahman AuthorDate: 2026-07-22 01:49:53 +0000 Commit: Muhammad Moinur Rahman CommitDate: 2026-07-22 01:49:53 +0000 contrib/libucl: Import libucl 0.9.4 Differential Revision: https://reviews.freebsd.org/D58333 Approved by: ivy MFC after: 3 days Changelog: https://github.com/vstakhov/libucl/releases/tag/0.9.4 contrib/libucl/FREEBSD-Xlist | 1 + contrib/libucl/FREEBSD-upgrade | 2 +- contrib/libucl/include/ucl.h | 23 +++++++++++++++++++++++ contrib/libucl/src/ucl_emitter.c | 12 +++++++++--- contrib/libucl/src/ucl_hash.c | 11 +++++++++++ contrib/libucl/src/ucl_hash.h | 6 ++++++ contrib/libucl/src/ucl_util.c | 31 +++++++++++++++++++++++++++---- contrib/libucl/tests/CMakeLists.txt | 12 ++++++++---- contrib/libucl/tests/basic/issue312.in | 4 ++++ contrib/libucl/tests/basic/issue312.res | 13 +++++++++++++ 10 files changed, 103 insertions(+), 12 deletions(-) diff --cc contrib/libucl/FREEBSD-Xlist index 6d8cb4ff8f5b,000000000000..ae8e77059488 mode 100644,000000..100644 --- a/contrib/libucl/FREEBSD-Xlist +++ b/contrib/libucl/FREEBSD-Xlist @@@ -1,40 -1,0 +1,41 @@@ +.github +.gitignore ++CLAUDE.md +CMakeLists.txt +ChangeLog.md +Makefile.am +Makefile.unix +Makefile.w32 +README.md +autogen.sh +configure.ac +doc/Makefile.am +doc/api.md +doc/lua_api.md +doc/pandoc.template +examples/ucl_cpp.cc +haskell/hucl.hs +libucl.pc.in +lua/Makefile.am +lua/libucl.rockspec.in +m4/.gitignore +m4/ax_lua.m4 +m4/gcov.m4 +python/MANIFEST.in +python/setup.py +python/src/uclmodule.c +python/tests/__init__.py +python/tests/compat.py +python/tests/test_dump.py +python/tests/test_example.py +python/tests/test_load.py +python/tests/test_validation.py +python/ucl.pyi +src/Makefile.am +stamp-h.in +tests/Makefile.am +utils/CMakeLists.txt +utils/Makefile.am +utils/chargen.c +utils/objdump.c +utils/ucl-tool.c diff --cc contrib/libucl/FREEBSD-upgrade index b80736d7877b,000000000000..6305899797f7 mode 100644,000000..100644 --- a/contrib/libucl/FREEBSD-upgrade +++ b/contrib/libucl/FREEBSD-upgrade @@@ -1,39 -1,0 +1,39 @@@ +# FreeBSD libucl import instruction +# +# At least the following ports are required when importing libucl: +# - devel/autoconf +# - devel/automake +# - devel/git +# - devel/gmake +# - devel/libtool +# +# 1. Vendor import +# +# $ git clone https://github.com/vstakhov/libucl.git /tmp/libucl +# $ cd /tmp/libucl +# $ git checkout +# $ cd /usr/src +# $ git checkout vendor/libucl +# $ rsync -va --delete --exclude=.git /tmp/libucl/ /usr/src/contrib/libucl/ +# $ git add . +# $ git commit -m "vendor import libucl " +# $ git tag -a vendor/libucl/ -m "vendor import libucl " +# $ git push --follow-tags freebsd vendor/libucl/ +# +# 2. Test +# +# $ cd /usr/src +# $ git checkout vendor/libucl/ +# $ ./autogen.sh +# $ ./configure +# $ gmake +# $ gmake check +# $ gmake clean +# +# 3. Merge vendor tree +# +# $ git subtree merge -P contrib/libucl vendor/libucl/ - # $ sh -c 'for F in `cat FREEBSD-Xlist | grep -v FreeBSD`; do rm -rf ./$F ; done' ++# $ sh -c 'for F in `cat FREEBSD-Xlist | grep -v FreeBSD`; do git rm -rf ./$F ; done' +# +# Recheck if there were any new files were added which are not necessary in the +# contrib tree. If so, remove them and also add them to the FREEBSD-Xlist file. diff --cc contrib/libucl/tests/basic/issue312.in index 000000000000,ec46cbe804da..ec46cbe804da mode 000000,100644..100644 --- a/contrib/libucl/tests/basic/issue312.in +++ b/contrib/libucl/tests/basic/issue312.in diff --cc contrib/libucl/tests/basic/issue312.res index 000000000000,739174f9f230..739174f9f230 mode 000000,100644..100644 --- a/contrib/libucl/tests/basic/issue312.res +++ b/contrib/libucl/tests/basic/issue312.res From nobody Wed Jul 22 06:05:45 2026 X-Original-To: dev-commits-src-main@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 4h4kJT44mxz6ldQk for ; Wed, 22 Jul 2026 06:05:45 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4kJT3Zjqz3tDk for ; Wed, 22 Jul 2026 06:05:45 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784700345; 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=cVKAg21BINPoQ4bnuIS7ir1KSV81bt4kiCNZUOqo6BU=; b=vOyNvPBEOIvBL8pHAu0ctbEQmHFwF00II69cpRTwVSxSToiluEo2RrwGNvz3p1jg0asDd+ lXN5t6Py93tl+uk3dCSlRDg7LvY2bK9mWWwAf1hVsQLPsupKmvghJ/bsxuxK5mHFc+mL7y cu2KGcoxhGnSOB0UQADYOU9JeL/RQPdlcE4yErAh9dJOkxFv1dcIf/BOYi5Bg1yeZ65Zh8 5/CHv56Kab2UKPaurBd/nT27ghI/xu+wosLRqAilrN5sap9Fk22RlknsCa5kGde+/YUwvV JB8nfjowTjCb4vBtgZ5g+3MqjSBANNBhNQHf9xejKNk5p2Zq5yc2VEYQU4ZnLQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784700345; a=rsa-sha256; cv=none; b=FnJQZ6TqMATPJBoSZfv8rwsqaZgCFtMQ5pPdwzROHDmkMqh7sjoeSm/VNHoUh6/lpEBU7R ShJBZp7nAsDI1KtKASVOqW3rBYgVOlErgkLOiOWdsVAnpDU1pWcogtiDzikX4N0pLSgTrx /7wRvJAhEJkI7SwBrQKTVm14QaTyAsM6lcpHkMWvdrX0wEXWIKLGnkSBSnQCKqZRkpRidK fjTLgrEZn/TcYZRYY8Yk0rUX6P7AqlnogSDsDCf8KauZG+2BO7wj/BjdFj5/tUpA5AUHpb H9io6nnDM5Gb8lEVq7b1KCEoBdpEflkTNJOnICCZGz+UVNcTIM5z8k3d0L9BXg== 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=1784700345; 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=cVKAg21BINPoQ4bnuIS7ir1KSV81bt4kiCNZUOqo6BU=; b=IDp8Dai8z5eeobVG0FxOzay+v8NX1qvAlYqTP+/E+vJ4DkTONN1Sz2qT+pHT0WDdDX8f1V yA0sUnACINSq69c3lfdxloz9h/mPfasm/2LqqNjNKghBHNU2SskAC5ubY/yQpDyFWBUAWI HF4CmedPfl1XuCQOn9G3+JTTJ7syqP3wVldomNawSu1EqZppN1NVp+e4nkgExk0qanWPJL xD7NefjHlwDkSvDUAHAsdV1O6ofL4FMZsRNDSG78Yy8ujVwiaVxVS/Z0LNodJsT+uurYVa 3rTKS1LVmsAdQjbHAK1TEP4jllMmU48kUlXIBXNJd5X7NGrTJAxsyreQnNRRbg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4kJT1g3tz1LR4 for ; Wed, 22 Jul 2026 06:05:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 412b1 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 06:05:45 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 0eef3d01c22a - main - install: Fix typo List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0eef3d01c22a5e00cd2cf10c34871eddbfd22aa0 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 06:05:45 +0000 Message-Id: <6a605db9.412b1.23ed0b16@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=0eef3d01c22a5e00cd2cf10c34871eddbfd22aa0 commit 0eef3d01c22a5e00cd2cf10c34871eddbfd22aa0 Author: Dag-Erling Smørgrav AuthorDate: 2026-07-22 06:04:18 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-07-22 06:05:30 +0000 install: Fix typo MFC after: 1 week Reported by: markj Fixes: d34870708db9 ("install: Allow installing stdin") --- usr.bin/xinstall/xinstall.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr.bin/xinstall/xinstall.c b/usr.bin/xinstall/xinstall.c index f2e0a523d4cf..7636da20153b 100644 --- a/usr.bin/xinstall/xinstall.c +++ b/usr.bin/xinstall/xinstall.c @@ -65,7 +65,7 @@ #ifndef _PATH_STDIN # ifndef _PATH_DEV -# defne _PATH_DEV "/dev/" +# define _PATH_DEV "/dev/" # endif # define _PATH_STDIN _PATH_DEV "stdin" #endif From nobody Wed Jul 22 08:39:04 2026 X-Original-To: dev-commits-src-main@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 4h4njP0GdXz6lplp for ; Wed, 22 Jul 2026 08:39:05 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4njN6Rzbz481F for ; Wed, 22 Jul 2026 08:39:04 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784709545; 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=zEZr4ZSomCZXBZhY3N3YRpAGv9UnbaN+GHfNmQzrdsc=; b=eHobGlXLnVSMnvnpikbC7Pyux1siLP6eqkKKXQBHEBXYfVry6xBjl/d9HPo6DFqUf+Yy0/ kdRcZbeikN/vJIMqxogneP+VjaIaJTdvcpMfzsNdlay9S4/ZLY/5R/gY579jYxe28rQ9GV Ztc27Rell5W2mo6uvg3d+oz9JiPsHYUF0UMUvkQeDF3iDa7WOXYVhjZ3ZSKs3/rOjT/4VB vXlzAaqO2E9v7QSIqLbeF1K3WB6c2CJArZ03C+Z1tS2fy45uo9gFmU57zcB+wndEig5zfB bFw9W2eQVONDaAF7IbwbAmaHCzIuMUMc61elslM3sg5fs+fHpix80TQt8/kZ4g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784709545; a=rsa-sha256; cv=none; b=hD/s1XMNPGoSH5HGpUv1iXvcOC0ii+H2fiqaIhcUn0GAzvz17pqR2oEYbRVgP4TbPLSGUX 7ZSmrUopHu2MWK5sWUwgb4Q+JAd4OwVHY3vzxi3GiaLoKPM5+8tnM87oKP+fE+RK8/kUiI 2hW/2x0NWqG74k+Pi3wwoMGW4rHTbz+EQjxEGfEVutdSKvtcXx8hiGbeDHI67SuIckGErh Wzu2CWYXPuggaG0JajkdkjbQd7ej6DHiFO6qcxKOH/DiwJ6Bsp5ONx5Mp0FC8NY5x+A0tR Vet5rMYwRYQ5FRehKLcWXWw5O5RkMiQWCTGRB+cnW21H9cyMv16K3gndIkJCzQ== 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=1784709544; 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=zEZr4ZSomCZXBZhY3N3YRpAGv9UnbaN+GHfNmQzrdsc=; b=cYxwMUJIoN1Zfo/v3L8Jwb4U1Ql37O5wnll3u8K29bLV7SeKZ14VPPQOFjdIgQnMd80IYr xnxlV8CSaFkimXPPDbNd5FMi3euf3bhryXHMwiRqipxcNPnNK7AVfNkKxdImAjfE8ZWPTL Js4orEzKxV/06ZuoxcoyjfZPQaX0Qn6lPNKpIZ3Ye4cSekayHsUSAbYKHO9FXmy1T0Nelp n2nQNj64yuEZMmW7CUrjSZdSFaKqVdyNAZ0mJkXqDV8Pe9c/Y+4iOAogbJ+QxGR8YGmt5N IozxCcfrn8IwT5gpMMHeX7kvNVDOeYvfqWLEZLqAjcA39tOwQQHgUxY60MMvsA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4njN4Ybmz1QB4 for ; Wed, 22 Jul 2026 08:39:04 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 2204c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 08:39:04 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 7c51da13ae55 - main - kyua-debug: Add -P option List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7c51da13ae55dc98e9cc1b794e1fe6fc001d7f42 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 08:39:04 +0000 Message-Id: <6a6081a8.2204c.27a151ce@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=7c51da13ae55dc98e9cc1b794e1fe6fc001d7f42 commit 7c51da13ae55dc98e9cc1b794e1fe6fc001d7f42 Author: Dag-Erling Smørgrav AuthorDate: 2026-07-22 08:37:56 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-07-22 08:38:24 +0000 kyua-debug: Add -P option Add -P as shorthand for --pause-before-cleanup. MFC after: 1 week Reviewed by: ngie Differential Revision: https://reviews.freebsd.org/D56613 --- contrib/kyua/cli/cmd_debug.cpp | 1 + contrib/kyua/doc/kyua-debug.1.in | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/contrib/kyua/cli/cmd_debug.cpp b/contrib/kyua/cli/cmd_debug.cpp index 060113d137fa..8ad52afb73a6 100644 --- a/contrib/kyua/cli/cmd_debug.cpp +++ b/contrib/kyua/cli/cmd_debug.cpp @@ -69,6 +69,7 @@ const cmdline::bool_option pause_before_cleanup_upon_fail_option( const cmdline::bool_option pause_before_cleanup_option( + 'P', "pause-before-cleanup", "Pauses right before the test cleanup"); diff --git a/contrib/kyua/doc/kyua-debug.1.in b/contrib/kyua/doc/kyua-debug.1.in index 263aef3667a7..a28c82dc270f 100644 --- a/contrib/kyua/doc/kyua-debug.1.in +++ b/contrib/kyua/doc/kyua-debug.1.in @@ -25,7 +25,7 @@ .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE .\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.Dd March 25, 2025 +.Dd July 22, 2026 .Dt KYUA-DEBUG 1 .Os .Sh NAME @@ -99,7 +99,7 @@ This flag makes it possible to preserve such artifacts immediately after a test failure, simplifying debugging. Otherwise, these artifacts would be removed by the test cleanup routine or by Kyua built-in cleanup mechanism. -.It Fl -pause-before-cleanup +.It Fl -pause-before-cleanup , Fl P The unconditional variant of the previous option. This can be helpful for reproducing the infrastructure or fixture of a passing test for further development or additional analysis. From nobody Wed Jul 22 08:40:06 2026 X-Original-To: dev-commits-src-main@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 4h4nkZ5R9Pz6lpxM for ; Wed, 22 Jul 2026 08:40:06 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4nkZ4Yntz48W9 for ; Wed, 22 Jul 2026 08:40:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784709606; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Xxlb8k2vuCy06gTzMM8SG+7MH7XbFnQ8/5bjuBLbh0o=; b=NqSwsgaNPxn2kQHTtrs3ezc6lhKHSVjUaqpMbskaNQM9fwtvXPeSj0OgvZV9kQvuZwn75u pO0V+ILEE4cQ2bKAGeiMszA2moj/GlQeFZCcaYryyRrPZzR0dqDR50b1Y0a+o/HO8KzOkQ QT8XPCzmSy/+c7r47b58f9qONsjIlZFnxTkRophIeuCmYK2tWpeFpmBd8EPfaEnkA5yiM9 eXqcqPTxLCT7wUgz1F8mL+PshPbu08lD8nYlBVNDhD1hjFBrpaQy6hogXHD2NapMMkKVwh QoN+VIrsEi4od/8v23sa11m5XFM80S6HB469EKWft+5kU/JZyOZv02G8og7q7g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784709606; a=rsa-sha256; cv=none; b=rLhI37HcW3BQ1rjZcoPc7lhmrW5EyjGDaxOcHtenHOzoaTXbJdO2iGW6JkJS57xhXnkXki rVsTPA1AagxXzfsTTiF3HDtMm3wIjEv9ME53g/by4BNm3v+sW09OL4pskC7H1WBfbjUBPt YKGVsIxbyuo3k6bxZzxPWGOEoK7/DvRTo5ci445VgUuGCjtPxzvO2mNbWWcGizIUCyF6uj bszvqET6Rqzou0cjSX/620reKyKj/Ied2W5jLqyrFNrEphixPsZusnm1UjCDjfvG64z4KE NBDEnSPl/0RoiEBYT5M+Sac0LudiaEuBALSzNi9rmkn24F9fNZDdmMyjMrJw/w== 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=1784709606; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Xxlb8k2vuCy06gTzMM8SG+7MH7XbFnQ8/5bjuBLbh0o=; b=iYen8EU5+GFFAk++IwHfncorJAT3zAybbAyb2xnCVgQAZRNcD+i8ja1lwdyK1SpP45J6O7 9kbPyHJHJvRpONqQok+pHlkigbQsNCCnKQfnpZgD3TeHlbKJQH3rHaRiUlhHw+fE4QU2+q 6LhyCtWIqtQKMzx+m9tvXbS54o+OFFV5IFGWDlIX+LHTETpXmzG0glLlQR/FxhZUSmGzsn Mrsnwh0wFdoyu7lwnymObQZv1UDVTTtbDiwQdpkaWmsqYVbuqmewCPxBhNJxZNhtMM1d1U 9QTkSkhq9uBYvoLn8G8rshmbJ74SHnsAmXNH7YpRlV7/enOzu2jawvgHMLZXFw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4nkZ39Pnz1QPw for ; Wed, 22 Jul 2026 08:40:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 217fe by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 08:40:06 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Philippe Michaud-Boudreault From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 54e6dec44b6d - main - tarfs: remove unused 'ino' in mount structure. List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 54e6dec44b6dd264b19e50439a58b33cab4c10c3 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 08:40:06 +0000 Message-Id: <6a6081e6.217fe.554e7608@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=54e6dec44b6dd264b19e50439a58b33cab4c10c3 commit 54e6dec44b6dd264b19e50439a58b33cab4c10c3 Author: Philippe Michaud-Boudreault AuthorDate: 2026-07-22 08:39:30 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-07-22 08:39:30 +0000 tarfs: remove unused 'ino' in mount structure. Differential Revision: https://reviews.freebsd.org/D57898 --- sys/fs/tarfs/tarfs.h | 1 - 1 file changed, 1 deletion(-) diff --git a/sys/fs/tarfs/tarfs.h b/sys/fs/tarfs/tarfs.h index 46fa8b55b3ad..9c4354e04016 100644 --- a/sys/fs/tarfs/tarfs.h +++ b/sys/fs/tarfs/tarfs.h @@ -132,7 +132,6 @@ struct tarfs_mount { struct tarfs_node *root; struct vnode *vp; struct mount *vfs; - ino_t ino; struct unrhdr *ino_unr; size_t iosize; size_t nblocks; From nobody Wed Jul 22 09:29:32 2026 X-Original-To: dev-commits-src-main@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 4h4pqd1DmTz6lsXj for ; Wed, 22 Jul 2026 09:29:33 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4pqd0gGwz3Dhx for ; Wed, 22 Jul 2026 09:29:33 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784712573; 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=LekwZ38ySSFKdOooFZytqPN7qk+zQopVJfoqx3aPWaE=; b=X2BlHMQUQniMGznd2XS0wO+s2PbjXFxRfo5uYUSMiCqLUK2BVk3kKrWSh0gJHtbnWDFCkP j4LsQNOcpRFenqhRTwWIYzgwFSkJycA4ioDpv2STVhrKJEh85Wh8/noX8ZpFkt8a2V+lqp OBUhqQsHrCF6jfk8Sbnj1IsEVMIMKDw5E2Ki21av7lwq1P7395aD2QBvCvfkqdkl037aCf E7a0VL272WtJOgOgr+s3AdRW+mQtNQe6dyr6o8AdnKJ5J2XNhtnYe4rd1Mm4qkqdcsnUT+ bzSHlzSmbaYm6ILAQm/2ie/JebzpkoyU2cFsP2WbPeWqaLWdaQpwGECs3y4R1w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784712573; a=rsa-sha256; cv=none; b=PUKKPhRGObM+fYJ4a1peUNHGtM7gKZC5kuZx/dqgZdgS5C0TxeGCAb5FLG5Rqkmb4W4nyK fixVMIX+tuj69sUlveqv8KTUXr7Jzw+Xd7KkkhXtF0a5vbN9odvKYle0UMpXUer7Fus8vr 3VAUoeCRLxX+sH9mVeQUL4Twp/oSybkR4JMo6pAlwF6XVs4msREW17LwMclPjR4J0S+Isc lXiRmvb/MNneQd1EdF/uV9mvZa4LHVn7OP0orz/Hy1jDi1F4lCrOBwA9N0SnydMKGrgj7G qpBM8r8s6BHs0OzI4IyhKqV/dvZRWaw5aCbFQZnsBL4d6XIA5S5Dd8wN9sV++A== 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=1784712573; 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=LekwZ38ySSFKdOooFZytqPN7qk+zQopVJfoqx3aPWaE=; b=vDV7feab5NT3LEZR59sA1C7FOb/0grM0ZlQv4qISOQhAyP9KIyqIVBUwGsRU2loZhIaobu yi01ZP3GSJ/dikjwrc7e94K+VvZpgzbTaYAUXQAnGiGoT8du5Mb6JVAuYfuF2pQARAygPR 2Jq3iROIvOpV1aOVVFXSBi6coRjw7goGJQAhTyJexLaDOlgge4ZjnW1Ws1osk2o3BBwUyt AO4GYUCnqEgNTplq5GlN2Q3BomsWs9xTPC88qJS9RnpGVKy/Qynr1D87RRtKmZYwDxgwvp wyO1M53Eu/6J2Ll3sGlwmBeEb3HarLrZ9lOaNsECxdUsY2u+0JeL8F/y/wETEA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4pqc6ckHz1QRv for ; Wed, 22 Jul 2026 09:29:32 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 25c35 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 09:29:32 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kristof Provost Subject: git: 04f25ef716f7 - main - authpf(8) read_config() should chop off trailing white space List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 04f25ef716f74d6bb7941750091c6cb4b51d0b4d Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 09:29:32 +0000 Message-Id: <6a608d7c.25c35.1805af92@gitrepo.freebsd.org> The branch main has been updated by kp: URL: https://cgit.FreeBSD.org/src/commit/?id=04f25ef716f74d6bb7941750091c6cb4b51d0b4d commit 04f25ef716f74d6bb7941750091c6cb4b51d0b4d Author: Kristof Provost AuthorDate: 2026-07-21 13:10:16 +0000 Commit: Kristof Provost CommitDate: 2026-07-22 09:29:14 +0000 authpf(8) read_config() should chop off trailing white space if administrator mistakenly types into configuration file anchor=authpf_test where 'authpf_test' is followed by white space, the authpf(8) is going to use anchor 'authpf_test ' instead of the 'authpf_test' which is defined in pf.conf(5) as 'anchor authpf_test/*' issue kindly reported and patch submitted by Avinash Duduskar OK sashan@ PR: 296958 MFC after: 1 week Obtained from: OpenBSD, sashan , 2d12a8e44d Sponsored by: Rubicon Communications, LLC ("Netgate") --- contrib/pf/authpf/authpf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/pf/authpf/authpf.c b/contrib/pf/authpf/authpf.c index 14d3d41b6e21..b835737c5ee2 100644 --- a/contrib/pf/authpf/authpf.c +++ b/contrib/pf/authpf/authpf.c @@ -404,8 +404,8 @@ read_config(FILE *f) if (ap != &pair[2]) goto parse_error; - tp = pair[1] + strlen(pair[1]); - while ((*tp == ' ' || *tp == '\t') && tp >= pair[1]) + tp = pair[1] + strlen(pair[1]) - 1; + while (tp >= pair[1] && (*tp == ' ' || *tp == '\t')) *tp-- = '\0'; if (strcasecmp(pair[0], "anchor") == 0) { From nobody Wed Jul 22 11:50:11 2026 X-Original-To: dev-commits-src-main@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 4h4sxv3yP8z6m2Mg for ; Wed, 22 Jul 2026 11:50:11 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4sxv3S5wz3PVq for ; Wed, 22 Jul 2026 11:50:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784721011; 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=W9+bx4drnviRj9xh9zLKUIDc+PUwhph73lvvmj4GQhA=; b=NHq0lchokDh7kxMVGjCPaVG0LDonh810u1cHAfad23o2w5H2JvUsERexrR5fN1HAFp4oBE +wd+Asnnl/5x8hL7wuS8MpMjfjvfPLQYLUMoTEB2WWhcVtD7y+UJHCrvO2rCyCNdA1km2E NOpKedMozqGiiyfszAEnGLntit1ADFLVnE77/Accddk4fEmO+L/+Nt/qpqFOM8OWb+oz5E alcTcemGFy+/5tYBDgtaVBHfARs/I8seECJl3iPnCd+zfTJam55NcXuScougEL9eup2FEF Nk0G/tcYBS3ywC486EiVXG/V+abUo4TD5gn1oKZSi6JDHmGXGntKFSR1hL4Zdg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784721011; a=rsa-sha256; cv=none; b=fNSFdqPaf2eJfIM2P93UPhIjj1Fhzrdtu5HvFTHr1XvOqMG6EYe2lp8O1NYGyUUkwJRYOv 5PVJIKPbWWWB657dFXybACYgdjtsumfHJHLaROQrDbasWPrYVP4vRutKnvqzYd2sbVMFfS Ixm52l36vwh+uCzQDQbpH/W5YrvElTyelKp3eV0323m3OhkFqlJVvVPHTryWqsTj5N71t4 /KfLCCdEbte5a0lUDl+Iy5UXx1elx06It/ihtGUk3xFfyRAsxNfnGweAlX6ilgof218wUz LTux9OgZmllmn2alJcCz+13nFBTwY2yhX2EDk1eyuiJVWnKKzJ5MWuAu8CDg0A== 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=1784721011; 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=W9+bx4drnviRj9xh9zLKUIDc+PUwhph73lvvmj4GQhA=; b=ovHOg4GfYBE/WdimmTBhwONwEfAxSNuOPYKqdUWpro6pZ/3YJnU1Nhoe8GqckHxG8xqBnA ol1iqPN7eAl7JTlWw0Qp7d2A6VrrbD5Wpc3QwRKFA11Lhr49TXQnSrKFgpLd+oulRB/+bb dwFvGZLqIrjNvTUXqzMFCmQ9qNrp4nhGCc87javQPXF9jRTQRsolJ1y1ANuNnDOm1zhMwY TgCczlG/JvKIBgvkGqgTzUAZkk2nNHZOcQCVGoz1Eg/R563NA9NIA7YQtshkTPpEsyKoRY mpfU0/V2KUefjt9EwtSqKPhBFOWeW+JQETrRt+byeXoVATNYbyfMoctP3TU6dQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4sxv2WFsz2QN for ; Wed, 22 Jul 2026 11:50:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3dcce by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 11:50:11 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bojan Novk=?utf-8?Q?ovi=C4=87?= Subject: git: 948ad32ae1e0 - main - bind(2): Lookup local address in current FIB if '*.bind_all_fibs' is active List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bnovkov X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 948ad32ae1e0811f45e1d38f26636fefed5051f0 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 11:50:11 +0000 Message-Id: <6a60ae73.3dcce.1e92e06d@gitrepo.freebsd.org> The branch main has been updated by bnovkov: URL: https://cgit.FreeBSD.org/src/commit/?id=948ad32ae1e0811f45e1d38f26636fefed5051f0 commit 948ad32ae1e0811f45e1d38f26636fefed5051f0 Author: Bojan Novković AuthorDate: 2026-07-15 13:47:01 +0000 Commit: Bojan Novković CommitDate: 2026-07-22 11:48:02 +0000 bind(2): Lookup local address in current FIB if '*.bind_all_fibs' is active When a protocol-specific 'bind_all_fibs' tunable is set to 0, a listening socket will only receive traffic originating from the FIB it was bound to. However, there are no checks to determine whether an address exists in the target FIB when binding the socket, which can lead to a situation where a socket and the address it was bound to belong to different FIBs. Prevent this footgun by looking up the requested address in the current FIB if 'bind_all_fibs' is active and returning an error if the address does not exist. Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D58281 Reviewed by: glebius, pouria, markj MFC after: 2 weeks --- sys/netinet/in_pcb.c | 2 +- sys/netinet/raw_ip.c | 7 ++- sys/netinet6/in6_pcb.c | 2 +- sys/netinet6/raw_ip6.c | 7 ++- tests/sys/netinet/Makefile | 1 + tests/sys/netinet/fib_bind.py | 100 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 113 insertions(+), 6 deletions(-) diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c index 8be91dc3eca2..365db895acda 100644 --- a/sys/netinet/in_pcb.c +++ b/sys/netinet/in_pcb.c @@ -925,7 +925,7 @@ in_pcbbind_avail(struct inpcb *inp, const struct in_addr laddr, * to any endpoint address, local or not. */ if ((inp->inp_flags & INP_BINDANY) == 0 && - ifa_ifwithaddr_check((const struct sockaddr *)&sin) == 0) + ifa_ifwithaddr_fib_check((const struct sockaddr *)&sin, fib) == 0) return (EADDRNOTAVAIL); } diff --git a/sys/netinet/raw_ip.c b/sys/netinet/raw_ip.c index 67e798ccad54..45d974ff60f0 100644 --- a/sys/netinet/raw_ip.c +++ b/sys/netinet/raw_ip.c @@ -860,7 +860,7 @@ rip_bind(struct socket *so, struct sockaddr *nam, struct thread *td) { struct sockaddr_in *addr = (struct sockaddr_in *)nam; struct inpcb *inp; - int error; + int fib, error; if (nam->sa_family != AF_INET) return (EAFNOSUPPORT); @@ -874,11 +874,14 @@ rip_bind(struct socket *so, struct sockaddr *nam, struct thread *td) inp = sotoinpcb(so); KASSERT(inp != NULL, ("rip_bind: inp == NULL")); + fib = V_rip_bind_all_fibs == 0 ? inp->inp_inc.inc_fibnum : + RT_ALL_FIBS; + if (CK_STAILQ_EMPTY(&V_ifnet) || (addr->sin_family != AF_INET && addr->sin_family != AF_IMPLINK) || (addr->sin_addr.s_addr && (inp->inp_flags & INP_BINDANY) == 0 && - ifa_ifwithaddr_check((struct sockaddr *)addr) == 0)) + ifa_ifwithaddr_fib_check((struct sockaddr *)addr, fib) == 0)) return (EADDRNOTAVAIL); INP_WLOCK(inp); diff --git a/sys/netinet6/in6_pcb.c b/sys/netinet6/in6_pcb.c index fc4cd3c9b1ad..3af4c0a14468 100644 --- a/sys/netinet6/in6_pcb.c +++ b/sys/netinet6/in6_pcb.c @@ -208,7 +208,7 @@ in6_pcbbind_avail(struct inpcb *inp, const struct sockaddr_in6 *sin6, int fib, sin6.sin6_addr = *laddr; NET_EPOCH_ENTER(et); - if ((ifa = ifa_ifwithaddr((const struct sockaddr *)&sin6)) == + if ((ifa = ifa_ifwithaddr_fib((const struct sockaddr *)&sin6, fib)) == NULL && (inp->inp_flags & INP_BINDANY) == 0) { NET_EPOCH_EXIT(et); return (EADDRNOTAVAIL); diff --git a/sys/netinet6/raw_ip6.c b/sys/netinet6/raw_ip6.c index a92035831c6c..8c503f70af0f 100644 --- a/sys/netinet6/raw_ip6.c +++ b/sys/netinet6/raw_ip6.c @@ -743,7 +743,7 @@ rip6_bind(struct socket *so, struct sockaddr *nam, struct thread *td) struct inpcb *inp; struct sockaddr_in6 *addr = (struct sockaddr_in6 *)nam; struct ifaddr *ifa = NULL; - int error = 0; + int fib, error = 0; inp = sotoinpcb(so); KASSERT(inp != NULL, ("rip6_bind: inp == NULL")); @@ -759,9 +759,12 @@ rip6_bind(struct socket *so, struct sockaddr *nam, struct thread *td) if ((error = sa6_embedscope(addr, V_ip6_use_defzone)) != 0) return (error); + fib = V_rip_bind_all_fibs == 0 ? inp->inp_inc.inc_fibnum : + RT_ALL_FIBS; + NET_EPOCH_ENTER(et); if (!IN6_IS_ADDR_UNSPECIFIED(&addr->sin6_addr) && - (ifa = ifa_ifwithaddr((struct sockaddr *)addr)) == NULL) { + (ifa = ifa_ifwithaddr_fib((struct sockaddr *)addr, fib)) == NULL) { NET_EPOCH_EXIT(et); return (EADDRNOTAVAIL); } diff --git a/tests/sys/netinet/Makefile b/tests/sys/netinet/Makefile index d5bfdad0a812..0812dc12a242 100644 --- a/tests/sys/netinet/Makefile +++ b/tests/sys/netinet/Makefile @@ -30,6 +30,7 @@ ATF_TESTS_SH= arp \ redirect ATF_TESTS_PYTEST+= carp.py \ + fib_bind.py \ igmp.py \ ip_mroute.py \ tcp_hpts_test.py diff --git a/tests/sys/netinet/fib_bind.py b/tests/sys/netinet/fib_bind.py new file mode 100644 index 000000000000..6768fcee5009 --- /dev/null +++ b/tests/sys/netinet/fib_bind.py @@ -0,0 +1,100 @@ +# +# Copyright (c) 2026 Stormshield +# +# SPDX-License-Identifier: BSD-2-Clause +# + +import pytest +import errno +import os +import socket +import struct +import sys +import logging + +from atf_python.sys.net.vnet import VnetTestTemplate +from atf_python.sys.net.tools import ToolsHelper + +def _common(tunable, addr, domain, type, proto): + """ + Test what happens when we try to bind a socket to an + address that is not present in the current FIB. + """ + sysctl_output = ToolsHelper.get_output(f"sysctl {tunable}") + tunable_val = int(sysctl_output.split(":")[1]) + if tunable_val != 0: + pytest.skip(f"{tunable} must be set to 0") + + port = 12345 if type != socket.SOCK_RAW else 0 + s = socket.socket(domain, type, proto) + s.setsockopt(socket.SOL_SOCKET, socket.SO_SETFIB, 0) + + failed = False + try: + s.bind((addr, port)) + except OSError as e: + assert e.errno == errno.EADDRNOTAVAIL + failed = True + assert failed + + s.setsockopt(socket.SOL_SOCKET, socket.SO_SETFIB, 1) + + failed = False + try: + s.bind((addr, port)) + except OSError: + failed = True + assert not failed + s.close() + +class TestFibBind(VnetTestTemplate): + REQUIRED_MODULES = [] + TOPOLOGY = { + "vnet1": { "ifaces": [ "if1", "if2" ] }, + "if1": { + "prefixes4": [("192.168.1.1/24", "192.168.1.2/24")], + "fib": (0, 0), + }, + "if2": { + "prefixes4": [("192.168.2.1/24", "192.168.2.2/24")], + "fib": (1, 0), + }, + } + + def setup_method(self, method): + super().setup_method(method) + + def test_TCP(self): + _common("net.inet.tcp.bind_all_fibs", "192.168.2.1", socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP) + + def test_UDP(self): + _common("net.inet.udp.bind_all_fibs", "192.168.2.1", socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + + def test_RAW(self): + _common("net.inet.raw.bind_all_fibs", "192.168.2.1", socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP) + +class TestFibBind6(VnetTestTemplate): + REQUIRED_MODULES = [] + TOPOLOGY = { + "vnet1": { "ifaces": [ "if1", "if2" ] }, + "if1": { + "prefixes6": [("2001:db8:0:1::1/64", "2001:db8:0:1::2/64")], + "fib": (0, 0), + }, + "if2": { + "prefixes6": [("2001:db8:0:2::1/64", "2001:db8:0:2::2/64")], + "fib": (1, 0), + }, + } + + def setup_method(self, method): + super().setup_method(method) + + def test_TCP(self): + _common("net.inet.tcp.bind_all_fibs", "2001:db8:0:2::1", socket.AF_INET6, socket.SOCK_STREAM, socket.IPPROTO_TCP) + + def test_UDP(self): + _common("net.inet.udp.bind_all_fibs", "2001:db8:0:2::1", socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + + def test_RAW(self): + _common("net.inet.raw.bind_all_fibs", "2001:db8:0:2::1", socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_IPV6) From nobody Wed Jul 22 12:34:19 2026 X-Original-To: dev-commits-src-main@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 4h4twr1tSXz6m4qW for ; Wed, 22 Jul 2026 12:34:20 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4twr16qjz3TBB for ; Wed, 22 Jul 2026 12:34:20 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784723660; 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=a5NfG7mAy6VAvRRp4JWQ/PyHEJeOl8hvD9lU8jgCGbM=; b=ny290OpAGx+Aj8kEHyzwlCyF6JLh2VlYcxVdUHFApxAL0bya0ODEJPkPN09hMY8TeyiId3 9FCLv+tGkPzVp+Sf4bUa8BAyO/jgZt8LykYV4UTeNtZ4Pw+Uqm2K+QqSQyrH4zxgHjZE3g QmgpkZ1YpxBmcNBcTYlgaJF8wxnTJ7PcJ8fhh3qvVHlVtSo9E2lFUdd/L7Qs9Zz2IjqHCm FBM1OcSozZngI+sT7nF7n2uTzUzat7Xpes6GFVPnIoeVnNVTkGBWJ6pUCEGzxXaqYVQmKP O20kt3IuqEfB5a/8uuQQy7SN64keuLhBRNQ+Ty4DDs5Sr/bsU3ax9nMePNF05A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784723660; a=rsa-sha256; cv=none; b=o2BYGcSM2wa+V8HuM8Tt9O7aMR451mB9T3ccWeLElqX75WYSvn5aOQ63dCv1RBiX8X/4Bq V6990gR+8TD4JLwX2ENF0Fp5pwg9tZCWtNBTUiraiGjZja7IlQvJuBOOgfcTDVL97Ed+hy 4EU1uK60oNQsw5Eo4KdgTWgOdzyNjWR98GxjUi6XM5cRQt9hY6Ki3dzjPxh6kII6+vuTun Rf7sWGZh9oCMXYVCKvwNaLBD8XWbuW/hCpul/fNmFO9jJL7iDApp2XXmuY//06NIv2GBvt 0ZC3Q06dGtWo4qxzOrUA1zyFhDob45sAYFZwlfFiEGKBksvDLcH6sl9XkJFXig== 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=1784723660; 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=a5NfG7mAy6VAvRRp4JWQ/PyHEJeOl8hvD9lU8jgCGbM=; b=nqLfg5GhZ/i1K8fo3eLlIfynWiCK9Cpz1bHTO559pnbn8xf3GM3jONh9zCJcIHOe+z+SUU 9/h/svb+49r1BJrgieCog2dSoSozTsQgqdGN+0ao/z6eqVoWnWhsME34cQOZqOvcxZluOr BOGPx9sDy/4xPgQIkCzWuZpDlfEXbIZegAz6nvhgwrPLSlaCY1vhHbjXUofYp5QuCzTOqY /HDf07b4WcS+w6A8qG5qc8CcmGr9wxpGfe5vd4zMbOKP84+BYxV5h/fpha39/eNA0xB8NL 8EOONq2sHMQIaMqLclfFOBOD/FnatghWLi3chgwNsIUJlms+8DGW6AB0i7w8vA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4twr0B42z3wD for ; Wed, 22 Jul 2026 12:34:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1bc48 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 12:34:19 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: e27b1cae8482 - main - unbound: Update to 1.25.2 List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e27b1cae848219d07f0a12a48990af0558b4cced Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 12:34:19 +0000 Message-Id: <6a60b8cb.1bc48.c4ad11f@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=e27b1cae848219d07f0a12a48990af0558b4cced commit e27b1cae848219d07f0a12a48990af0558b4cced Merge: 948ad32ae1e0 c68e7bcd81d6 Author: Dag-Erling Smørgrav AuthorDate: 2026-07-22 12:23:53 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-07-22 12:23:53 +0000 unbound: Update to 1.25.2 Release notes at https://community.nlnetlabs.nl/t/unbound-1-25-2-released Merge commit 'c68e7bcd81d62e9f5364c6da22fd9917976acf85' Security: CVE-2026-14586 Security: CVE-2026-32665 Security: CVE-2026-40691 Security: CVE-2026-41637 Security: CVE-2026-42955 Security: CVE-2026-44621 Security: CVE-2026-44687 Security: CVE-2026-44690 Security: CVE-2026-46582 Security: CVE-2026-50045 Security: CVE-2026-50046 Security: CVE-2026-50243 Security: CVE-2026-50248 Security: CVE-2026-50251 Security: CVE-2026-50252 Security: CVE-2026-52863 Security: CVE-2026-54478 Security: CVE-2026-55708 Security: CVE-2026-55717 Security: CVE-2026-55973 Security: CVE-2026-55990 Security: CVE-2026-55991 Security: CVE-2026-56416 Security: CVE-2026-56444 contrib/unbound/config.guess | 17 +- contrib/unbound/config.sub | 11 +- contrib/unbound/configure | 48 ++- contrib/unbound/configure.ac | 21 +- contrib/unbound/daemon/daemon.c | 12 +- contrib/unbound/daemon/daemon.h | 3 + contrib/unbound/daemon/remote.c | 16 + contrib/unbound/daemon/worker.c | 30 +- contrib/unbound/daemon/worker.h | 8 +- contrib/unbound/dnscrypt/dnscrypt.c | 26 +- contrib/unbound/dnscrypt/dnscrypt.h | 3 +- contrib/unbound/dnstap/unbound-dnstap-socket.c | 5 + contrib/unbound/doc/README | 2 +- contrib/unbound/doc/example.conf | 2 +- contrib/unbound/doc/example.conf.in | 2 +- contrib/unbound/doc/libunbound.3 | 4 +- contrib/unbound/doc/libunbound.3.in | 4 +- contrib/unbound/doc/unbound-anchor.8 | 4 +- contrib/unbound/doc/unbound-anchor.8.in | 4 +- contrib/unbound/doc/unbound-checkconf.8 | 4 +- contrib/unbound/doc/unbound-checkconf.8.in | 4 +- contrib/unbound/doc/unbound-control.8 | 4 +- contrib/unbound/doc/unbound-control.8.in | 4 +- contrib/unbound/doc/unbound-host.1 | 4 +- contrib/unbound/doc/unbound-host.1.in | 4 +- contrib/unbound/doc/unbound.8 | 4 +- contrib/unbound/doc/unbound.8.in | 4 +- contrib/unbound/doc/unbound.conf.5 | 4 +- contrib/unbound/doc/unbound.conf.5.in | 4 +- contrib/unbound/doc/unbound.conf.rst | 7 + contrib/unbound/iterator/iter_donotq.c | 12 + contrib/unbound/iterator/iterator.c | 67 +++-- contrib/unbound/libunbound/libworker.c | 13 +- contrib/unbound/libunbound/libworker.h | 3 + contrib/unbound/respip/respip.c | 8 +- contrib/unbound/services/authzone.c | 28 +- contrib/unbound/services/cache/dns.c | 4 +- contrib/unbound/services/cache/rrset.c | 44 ++- contrib/unbound/services/listen_dnsport.c | 234 ++++++++++----- contrib/unbound/services/listen_dnsport.h | 37 ++- contrib/unbound/services/localzone.h | 2 +- contrib/unbound/services/mesh.c | 66 ++++- contrib/unbound/services/mesh.h | 8 +- contrib/unbound/services/outside_network.c | 388 ++++++++++++++++++++----- contrib/unbound/services/outside_network.h | 107 ++++++- contrib/unbound/smallapp/worker_cb.c | 6 + contrib/unbound/util/data/msgparse.c | 9 +- contrib/unbound/util/data/packed_rrset.c | 1 + contrib/unbound/util/fptr_wlist.c | 1 + contrib/unbound/util/module.h | 6 + contrib/unbound/util/netevent.c | 44 ++- contrib/unbound/util/netevent.h | 6 +- contrib/unbound/validator/val_sigcrypt.c | 18 +- contrib/unbound/validator/val_utils.c | 17 +- contrib/unbound/validator/val_utils.h | 4 + contrib/unbound/validator/validator.c | 59 +++- lib/libunbound/config.h | 6 +- 57 files changed, 1130 insertions(+), 337 deletions(-) diff --cc contrib/unbound/config.guess index a9d01fde4617,000000000000..c7f4c3294a63 mode 100755,000000..100755 --- a/contrib/unbound/config.guess +++ b/contrib/unbound/config.guess @@@ -1,1818 -1,0 +1,1823 @@@ +#! /bin/sh +# Attempt to guess a canonical system name. - # Copyright 1992-2025 Free Software Foundation, Inc. ++# Copyright 1992-2026 Free Software Foundation, Inc. + +# shellcheck disable=SC2006,SC2268 # see below for rationale + - timestamp='2025-07-10' ++timestamp='2026-05-17' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess +# +# Please send patches to . + + +# The "shellcheck disable" line above the timestamp inhibits complaints +# about features and limitations of the classic Bourne shell that were +# superseded or lifted in POSIX. However, this script identifies a wide +# variety of pre-POSIX systems that do not have POSIX shells at all, and +# even some reasonably current systems (Solaris 10 as case-in-point) still +# have a pre-POSIX /bin/sh. + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system '$me' is run on. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. - Copyright 1992-2025 Free Software Foundation, Inc. ++Copyright 1992-2026 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try '$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +# Just in case it came from the environment. +GUESS= + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, 'CC_FOR_BUILD' used to be named 'HOST_CC'. We still +# use 'HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039,SC3028 + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c17 c99 c89 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD=$driver + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if test -f /.attbin/uname ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case $UNAME_SYSTEM in - Linux|GNU|GNU/*) ++Ironclad|Linux|GNU|GNU/*) + LIBC=unknown + + set_cc_for_build + cat <<-EOF > "$dummy.c" + #if defined(__ANDROID__) + LIBC=android + #else + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #elif defined(__GLIBC__) + LIBC=gnu + #elif defined(__LLVM_LIBC__) + LIBC=llvm ++ #elif defined(__mlibc__) ++ LIBC=mlibc + #else + #include + /* First heuristic to detect musl libc. */ + #ifdef __DEFINED_va_list + LIBC=musl + #endif + #endif + #endif + EOF + cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + eval "$cc_set_libc" + + # Second heuristic to detect musl libc. + if [ "$LIBC" = unknown ] && + command -v ldd >/dev/null && + ldd --version 2>&1 | grep -q ^musl; then + LIBC=musl + fi + + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + if [ "$LIBC" = unknown ]; then + LIBC=gnu + fi + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + echo unknown)` + case $UNAME_MACHINE_ARCH in + aarch64eb) machine=aarch64_be-unknown ;; + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; + *) machine=$UNAME_MACHINE_ARCH-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently (or will in the future) and ABI. + case $UNAME_MACHINE_ARCH in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # Determine ABI tags. + case $UNAME_MACHINE_ARCH in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case $UNAME_VERSION in + Debian*) + release='-gnu' + ;; + *) + release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + GUESS=$machine-${os}${release}${abi-} + ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE + ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE + ;; + *:SecBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE + ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE + ;; + *:MidnightBSD:*:*) + GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE + ;; + *:ekkoBSD:*:*) + GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE + ;; + *:SolidBSD:*:*) + GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE + ;; + *:OS108:*:*) + GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE + ;; + macppc:MirBSD:*:*) + GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE + ;; + *:MirBSD:*:*) + GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE + ;; + *:Sortix:*:*) + GUESS=$UNAME_MACHINE-unknown-sortix + ;; + *:Twizzler:*:*) + GUESS=$UNAME_MACHINE-unknown-twizzler + ;; + *:Redox:*:*) + GUESS=$UNAME_MACHINE-unknown-redox + ;; + mips:OSF1:*.*) + GUESS=mips-dec-osf1 + ;; + alpha:OSF1:*:*) + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + trap '' 0 + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case $ALPHA_CPU_TYPE in + "EV4 (21064)") + UNAME_MACHINE=alpha ;; + "EV4.5 (21064)") + UNAME_MACHINE=alpha ;; + "LCA4 (21066/21068)") + UNAME_MACHINE=alpha ;; + "EV5 (21164)") + UNAME_MACHINE=alphaev5 ;; + "EV5.6 (21164A)") + UNAME_MACHINE=alphaev56 ;; + "EV5.6 (21164PC)") + UNAME_MACHINE=alphapca56 ;; + "EV5.7 (21164PC)") + UNAME_MACHINE=alphapca57 ;; + "EV6 (21264)") + UNAME_MACHINE=alphaev6 ;; + "EV6.7 (21264A)") + UNAME_MACHINE=alphaev67 ;; + "EV6.8CB (21264C)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8AL (21264B)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8CX (21264D)") + UNAME_MACHINE=alphaev68 ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE=alphaev69 ;; + "EV7 (21364)") + UNAME_MACHINE=alphaev7 ;; + "EV7.9 (21364A)") + UNAME_MACHINE=alphaev79 ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + GUESS=$UNAME_MACHINE-dec-osf$OSF_REL + ;; + Amiga*:UNIX_System_V:4.0:*) + GUESS=m68k-unknown-sysv4 + ;; + *:[Aa]miga[Oo][Ss]:*:*) + GUESS=$UNAME_MACHINE-unknown-amigaos + ;; + *:[Mm]orph[Oo][Ss]:*:*) + GUESS=$UNAME_MACHINE-unknown-morphos + ;; + *:OS/390:*:*) + GUESS=i370-ibm-openedition + ;; + *:z/VM:*:*) + GUESS=s390-ibm-zvmoe + ;; + *:OS400:*:*) + GUESS=powerpc-ibm-os400 + ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + GUESS=arm-acorn-riscix$UNAME_RELEASE + ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + GUESS=arm-unknown-riscos + ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + GUESS=hppa1.1-hitachi-hiuxmpp + ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + case `(/bin/universe) 2>/dev/null` in + att) GUESS=pyramid-pyramid-sysv3 ;; + *) GUESS=pyramid-pyramid-bsd ;; + esac + ;; + NILE*:*:*:dcosx) + GUESS=pyramid-pyramid-svr4 + ;; + DRS?6000:unix:4.0:6*) + GUESS=sparc-icl-nx6 + ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) GUESS=sparc-icl-nx7 ;; + esac + ;; + s390x:SunOS:*:*) + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL + ;; + sun4H:SunOS:5.*:*) + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-hal-solaris2$SUN_REL + ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-sun-solaris2$SUN_REL + ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + GUESS=i386-pc-auroraux$UNAME_RELEASE + ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + set_cc_for_build + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=$SUN_ARCH-pc-solaris2$SUN_REL + ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-sun-solaris3$SUN_REL + ;; + sun4*:SunOS:*:*) + case `/usr/bin/arch -k` in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like '4.1.3-JL'. + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` + GUESS=sparc-sun-sunos$SUN_REL + ;; + sun3*:SunOS:*:*) + GUESS=m68k-sun-sunos$UNAME_RELEASE + ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 + case `/bin/arch` in + sun3) + GUESS=m68k-sun-sunos$UNAME_RELEASE + ;; + sun4) + GUESS=sparc-sun-sunos$UNAME_RELEASE + ;; + esac + ;; + aushp:SunOS:*:*) + GUESS=sparc-auspex-sunos$UNAME_RELEASE + ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + GUESS=m68k-milan-mint$UNAME_RELEASE + ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + GUESS=m68k-hades-mint$UNAME_RELEASE + ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + GUESS=m68k-unknown-mint$UNAME_RELEASE + ;; + m68k:machten:*:*) + GUESS=m68k-apple-machten$UNAME_RELEASE + ;; + powerpc:machten:*:*) + GUESS=powerpc-apple-machten$UNAME_RELEASE + ;; + RISC*:Mach:*:*) + GUESS=mips-dec-mach_bsd4.3 + ;; + RISC*:ULTRIX:*:*) + GUESS=mips-dec-ultrix$UNAME_RELEASE + ;; + VAX*:ULTRIX*:*:*) + GUESS=vax-dec-ultrix$UNAME_RELEASE + ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + GUESS=clipper-intergraph-clix$UNAME_RELEASE + ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`"$dummy" "$dummyarg"` && + { echo "$SYSTEM_NAME"; exit; } + GUESS=mips-mips-riscos$UNAME_RELEASE + ;; + Motorola:PowerMAX_OS:*:*) + GUESS=powerpc-motorola-powermax + ;; + Motorola:*:4.3:PL8-*) + GUESS=powerpc-harris-powermax + ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + GUESS=powerpc-harris-powermax + ;; + Night_Hawk:Power_UNIX:*:*) + GUESS=powerpc-harris-powerunix + ;; + m88k:CX/UX:7*:*) + GUESS=m88k-harris-cxux7 + ;; + m88k:*:4*:R4*) + GUESS=m88k-motorola-sysv4 + ;; + m88k:*:3*:R3*) + GUESS=m88k-motorola-sysv3 + ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 + then + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x + then + GUESS=m88k-dg-dgux$UNAME_RELEASE + else + GUESS=m88k-dg-dguxbcs$UNAME_RELEASE + fi + else + GUESS=i586-dg-dgux$UNAME_RELEASE + fi + ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + GUESS=m88k-dolphin-sysv3 + ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + GUESS=m88k-motorola-sysv3 + ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + GUESS=m88k-tektronix-sysv3 + ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + GUESS=m68k-tektronix-bsd + ;; + *:IRIX*:*:*) + IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` + GUESS=mips-sgi-irix$IRIX_REL + ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id + ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + GUESS=i386-ibm-aix + ;; + ia64:AIX:*:*) + if test -x /usr/bin/oslevel ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=$UNAME_VERSION.$UNAME_RELEASE + fi + GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV + ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #include + + int + main () + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` + then + GUESS=$SYSTEM_NAME + else + GUESS=rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + GUESS=rs6000-ibm-aix3.2.4 + else + GUESS=rs6000-ibm-aix3.2 + fi + ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if test -x /usr/bin/lslpp ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + else + IBM_REV=$UNAME_VERSION.$UNAME_RELEASE + fi + GUESS=$IBM_ARCH-ibm-aix$IBM_REV + ;; + *:AIX:*:*) + GUESS=rs6000-ibm-aix + ;; + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) + GUESS=romp-ibm-bsd4.4 + ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to + ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + GUESS=rs6000-bull-bosx + ;; + DPX/2?00:B.O.S.:*:*) + GUESS=m68k-bull-sysv3 + ;; + 9000/[34]??:4.3bsd:1.*:*) + GUESS=m68k-hp-bsd + ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + GUESS=m68k-hp-bsd4.4 + ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` + case $UNAME_MACHINE in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if test -x /usr/bin/getconf; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case $sc_cpu_version in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case $sc_kernel_bits in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac + fi + if test "$HP_ARCH" = ""; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + + #define _HPUX_SOURCE + #include + #include + + int + main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if test "$HP_ARCH" = hppa2.0w + then + set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH=hppa2.0w + else + HP_ARCH=hppa64 + fi + fi + GUESS=$HP_ARCH-hp-hpux$HPUX_REV + ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` + GUESS=ia64-hp-hpux$HPUX_REV + ;; + 3050*:HI-UX:*:*) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && + { echo "$SYSTEM_NAME"; exit; } + GUESS=unknown-hitachi-hiuxwe2 + ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) + GUESS=hppa1.1-hp-bsd + ;; + 9000/8??:4.3bsd:*:*) + GUESS=hppa1.0-hp-bsd + ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + GUESS=hppa1.0-hp-mpeix + ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) + GUESS=hppa1.1-hp-osf + ;; + hp8??:OSF1:*:*) + GUESS=hppa1.0-hp-osf + ;; + i*86:OSF1:*:*) + if test -x /usr/sbin/sysversion ; then + GUESS=$UNAME_MACHINE-unknown-osf1mk + else + GUESS=$UNAME_MACHINE-unknown-osf1 + fi + ;; + parisc*:Lites*:*:*) + GUESS=hppa1.1-hp-lites + ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + GUESS=c1-convex-bsd + ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + GUESS=c34-convex-bsd + ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + GUESS=c38-convex-bsd + ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + GUESS=c4-convex-bsd + ;; + CRAY*Y-MP:*:*:*) + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=ymp-cray-unicos$CRAY_REL + ;; + CRAY*[A-Z]90:*:*:*) + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=t90-cray-unicos$CRAY_REL + ;; + CRAY*T3E:*:*:*) + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=alphaev5-cray-unicosmk$CRAY_REL + ;; + CRAY*SV1:*:*:*) *** 15251 LINES SKIPPED *** From nobody Wed Jul 22 13:40:12 2026 X-Original-To: dev-commits-src-main@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 4h4wNr2VkDz6m8ML for ; Wed, 22 Jul 2026 13:40:12 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4wNr1xSXz3Z8y for ; Wed, 22 Jul 2026 13:40:12 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784727612; 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=1K6SNEc7w0scynFnWwKl8WfUJGonxSwRuvm1Xgsug+Q=; b=yElN6FanS7wai2gKcpOM0BDCKQWslrbyLxbFtZ+sbZkwXTsrtCjm4d4Dh1JJbL4RO2Fi8N o3ce4JqI0qaYdHGGlJtohnsLXu2BvwBZwLXdnZ+jkNQwXWNbYNt8Ythojphrb5K3T/HP/Q SUKI0N85TQHUHZxEkOSIwOeddaBYp417G3arRkdYqWCfB62zrXmBzrzEhgKMxE76+rzKsi 9pULMGAYy+XFLmAEGvxTvVXFWnTf2UFEUspSZgMAFWTvRJdcJ7kpAhvhMt8nDQ5TAnUzy+ p6ArU2/PB3UwdjyuTitC7p+yFj7T3AqKVXNUPjKBAb6KvV3MH+lSqmXwZC0xGQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784727612; a=rsa-sha256; cv=none; b=EakfQ37ws/cGcsW1RymEfxjDWEm2VYzZTM62/adahpW0bmvoYGEJ1n+gNT9sdKA8JZoQb7 H9ImPKsSqRr+boRfmUhJs/IlBFlS+kztXp/EwPuCxjm3CdUwowShr/dLLmxhqk7iwASGVX FsyW8/LhqLXa/hmSrtJ+3jh7eKgIkGwNd8RwZGOeAeErlnFVAaZV/rJuOLGarUq62LxFAN QlRqhG2e7YGOxR/j0kdVlI6GblNSUJGIX2/GTXLOipHBmMIX2DnBSFBrUaqEpdsBqVb/DN eGzZ3ARr+kZlzujc5JP+wz/EiE+VNUadp6sr1SHw0k0HTM3BY+awwEGeRpU8nQ== 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=1784727612; 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=1K6SNEc7w0scynFnWwKl8WfUJGonxSwRuvm1Xgsug+Q=; b=lGktI9Y8OqlY0pwdCJFO1ugOFwGtfe+n4nAIjiBwLhoF+wXf8NUPOpesULUvlQbF+uaK+r QZk5kD+IWEbslT8Ata7urUHlyvh2mRZhpfi01YrGQHRabR/OqiVhwgl9w7ofRt4mW975OY 1UvfF+ZrQarCXPvGHo5y0I3a454wYAlF9i9JZTMxtKq9CAJlcso/8FmQRuPlavaANHzYwi qrxxmfqT0BFTV9zzQgSsYMVHu/0uIYRvKXDTYCWDJHPKwNx7Rm7w5O1tKTwmSDdqm+fMY3 f2MfR/cqpkvhTtMorON1jMlUaSTvUR3mj53QsE31Jsu4MOtJb7KHcWUn5EHnfA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4wNr0y7Mz52d for ; Wed, 22 Jul 2026 13:40:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 2313a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 13:40:12 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Siva Mahadevan Subject: git: afbb7dc0a51e - main - tests/netpfil: start ipfilter for ipfnat firewall type List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: siva X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: afbb7dc0a51e4d4c227bdf00770d1ad821cf9889 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 13:40:12 +0000 Message-Id: <6a60c83c.2313a.70b8b2a2@gitrepo.freebsd.org> The branch main has been updated by siva: URL: https://cgit.FreeBSD.org/src/commit/?id=afbb7dc0a51e4d4c227bdf00770d1ad821cf9889 commit afbb7dc0a51e4d4c227bdf00770d1ad821cf9889 Author: Siva Mahadevan AuthorDate: 2026-06-30 16:40:00 +0000 Commit: Siva Mahadevan CommitDate: 2026-07-22 13:35:51 +0000 tests/netpfil: start ipfilter for ipfnat firewall type This requested fix[0] was not complete before the change was committed. Cleans up this error message when running tests[1]: "Cannot 'start' ipfilter. Set ipfilter_enable to YES in /etc/rc.conf or use 'onestart' instead of 'start'." [0] https://reviews.freebsd.org/D21065?id=60288#inline-131488 [1] https://ci.freebsd.org/job/FreeBSD-main-amd64-test/28917/testReport/sys.netpfil.common/rdr/ipfnat_local_redirect/ Fixes: f97a8a36153a9 MFC after: 3 days Sponsored by: The FreeBSD Foundation --- tests/sys/netpfil/common/utils.subr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/sys/netpfil/common/utils.subr b/tests/sys/netpfil/common/utils.subr index 8885495cec11..f5013098f5f2 100644 --- a/tests/sys/netpfil/common/utils.subr +++ b/tests/sys/netpfil/common/utils.subr @@ -63,7 +63,7 @@ firewall_config() jexec ${jname} ipf -E jexec ${jname} ipf -Fa -f $cwd/ipf.rule elif [ ${fw} == "ipfnat" ]; then - jexec ${jname} service ipfilter start + jexec ${jname} ipf -E jexec ${jname} ipnat -CF -f $cwd/ipfnat.rule jexec ${jname} pfilctl link -o ipfilter:default-ip4 inet-local jexec ${jname} pfilctl link -o ipfilter:default-ip6 inet6-local From nobody Wed Jul 22 13:41:28 2026 X-Original-To: dev-commits-src-main@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 4h4wQJ6ZQpz6m8dl for ; Wed, 22 Jul 2026 13:41:28 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4wQJ5d1Mz3ZTW for ; Wed, 22 Jul 2026 13:41:28 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784727688; 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=kpSh8KvwEA7yWlT3SmEgqbnrDHuNEW2cVmmE61txzKI=; b=x8FHpIV2oD5jRPuvUH/uedKXx17Xt3ec7FkcrePVQ6gcaItCKsUDKenIOiSNXGqZvQRIeL hqosk6qAOPVh9wpjYD+8/lkacZHF5Uv3CFF73AziSfuv4VEGln4wUg+1bl039dQB1nD5Qt yr5/dIPL9KSeCRdF4ckish8TaieufXgWmPr7pRPIogvARPkSXXCORGNlcj32lrUbqQKPDx my64dTEgs4qiSUEq/0rc3/gv/5rq5wTMbUgoNOQQnkFveNPATVVwZYMDyEms5Hlz8Gh3lA sfrZcPK817fxY43Dy+u8bMtxtEaNuMhZQEUwwMvT7/z9bmxiz6krKpajr7dytA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784727688; a=rsa-sha256; cv=none; b=KVm8MslPsOILzCT8ooRXigrbd16DABnIwWrcJiWYsnv+gRg5VuNfaBJ0NAtSOLcrv3ClVR yP2lcLDkYbK42tMteAZUOjMrIkaas/RGezY8tNf13L7bjbi/K6uBbUrh2WTDsX5we6SWI+ bnoPhALuxJC0rRevgb5IgEEJZA4LYbyf1n4YXDtkYobxeFWefPKI8lhtWYtcUBWo43AJh0 uAAKileZUnRxj+0JI+EKmC20EpijsJTAaCPfSov0r2ykTJshCMjFBsVHW7HedMYLhIGNDn RaSN5glsV7wLWjEAk4c7apj4yvkF/0KT8WilvVbNGnumoZu4wwzVz7IJ+gCNvA== 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=1784727688; 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=kpSh8KvwEA7yWlT3SmEgqbnrDHuNEW2cVmmE61txzKI=; b=VysUjCw+asYNRcowYhFs1Gvq26JqveSnTa6k3XGtXlXar0/+P/vrClJm9vG5hbvCwFa/wA DzwDccwRBSZU2FUIMvc7/KaIwrzBGvBIrABu8WSsDy4fKvKRey70uCC9oW5/mE4Q0+vkLZ Va/fHT7/eND2UW7W0HFtBccpSSgSd9FbEHGaVIn2nA1DYRRCwsA0uT8u9YjTYFLZ7S/eOr jFQnyaknTdfuNdB9QnTuegEYtE0TwVexrCGLc08+MOPldCZU+rkZcdc/8enQrn0wtOFwVC R90m+MN8ZoUoVxcKv3ag0DcV7vx4bJNX36YSNBQxQinjc8c9JxQgeNRgKth7qQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4wQJ4M5Zz533 for ; Wed, 22 Jul 2026 13:41:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 2381a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 13:41:28 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Siva Mahadevan Subject: git: 3e946566c134 - main - tests/exterr_test: use ATF_REQUIRE_FEATURE to check exterr_strings List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: siva X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 3e946566c134e039f9c777eaa1232a32e383692c Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 13:41:28 +0000 Message-Id: <6a60c888.2381a.12193b83@gitrepo.freebsd.org> The branch main has been updated by siva: URL: https://cgit.FreeBSD.org/src/commit/?id=3e946566c134e039f9c777eaa1232a32e383692c commit 3e946566c134e039f9c777eaa1232a32e383692c Author: Siva Mahadevan AuthorDate: 2026-07-22 01:27:11 +0000 Commit: Siva Mahadevan CommitDate: 2026-07-22 13:40:53 +0000 tests/exterr_test: use ATF_REQUIRE_FEATURE to check exterr_strings This keeps the skipped test message consistent with others. Reviewed by: netchild MFC after: 3 days Sponsored by: The FreeBSD Foundation --- tests/sys/kern/Makefile | 2 ++ tests/sys/kern/exterr_test.c | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/sys/kern/Makefile b/tests/sys/kern/Makefile index f7f5d1825e01..f025172c8388 100644 --- a/tests/sys/kern/Makefile +++ b/tests/sys/kern/Makefile @@ -153,6 +153,8 @@ SRCS.subr_physmem_test+= subr_physmem_test.c subr_physmem.c CFLAGS.subr_unit.c+= -Wno-missing-prototypes SRCS.subr_unit_test+= subr_unit.c +CFLAGS.exterr_test+= -I${SRCTOP}/tests + WARNS?= 3 TESTS_SUBDIRS+= acct diff --git a/tests/sys/kern/exterr_test.c b/tests/sys/kern/exterr_test.c index 316b5b66b0e0..bde7654fecfc 100644 --- a/tests/sys/kern/exterr_test.c +++ b/tests/sys/kern/exterr_test.c @@ -34,6 +34,8 @@ #include #include +#include "freebsd_test_suite/macros.h" + /* * Pin the message format by clearing EXTERROR_VERBOSE, which would * otherwise change the output shape. @@ -66,8 +68,7 @@ ATF_TC_BODY(gettext_extended, tc) r = uexterr_gettext(exterr, sizeof(exterr)); ATF_CHECK_EQ(0, r); printf("Extended error: %s\n", exterr); - if (feature_present("exterr_strings") == 0) - atf_tc_skip("kernel built without EXTERR_STRINGS"); + ATF_REQUIRE_FEATURE("exterr_strings"); /* Note: error string may need to be updated due to kernel changes */ ATF_CHECK(strstr(exterr, " is not subset of ") != NULL); } From nobody Wed Jul 22 13:42:44 2026 X-Original-To: dev-commits-src-main@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 4h4wRm5g55z6m8NW for ; Wed, 22 Jul 2026 13:42:44 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4wRm3tFCz3bLD for ; Wed, 22 Jul 2026 13:42:44 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784727764; 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=VVY6tG2klc5/SYpidxylY6HuVBXvlE+Ombx/iVnmmjw=; b=T36PuU4M7oK2yMxlrhuZLMRsk2XjY/v3P6gTx0IAlV97yvgajfa4vWfjKPupY0PynVtw3s gQ4voBU9kl2XCQT8k5w+QEOI1D2+smWIVkI50aezpINPpdboAEGB5DRp4GzdvvhdaUiFb2 eWQ1JKk4DY2jWdYFx9t1s7mdwdvrzhNVx+Ge0crPm0tEcZMxpKt+Q9U4LdE04Hzm8qg8+5 A32/9jfXQOT6RQz7PnPgxZ07CEiYIb6+M8PPKgO+/deZ/BSAlCnyInL5mskzbtGxD4QREK 1/MBaZX6RzTwM0ZeA3R1JOxb6q+w/Rxv7QkjQcn2zFQDqcRZAw/LtjY6Mzn4zA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784727764; a=rsa-sha256; cv=none; b=xrQcml8947pQ32sc1kbbMreErlIy9QZhUeE2oi9y8WL77BurO32TLvDkFdpph3Y5Jezhyj M7ww+aK/uyS/CpxWVS/FZ018UusiSxP9+jSU8KW6r8AQuPABkJ5rmpOUXUL7gZct1iRO98 Sed0A+hLwIEK711Muv0MPMEncbpnpdvPu/cG6wQ9n5Geu6xUuFvGfZNLCu2UiuTuNQinQS rgvFG8WH1CMLo2JCnxDVe+rJFrGR3GlTdr7Kj+QQ5dwQaNh+THP6nIRJH043NQ9LEXeqwD lwvYEqWPjLF33MR+rmyRolstKCuwx1rRArcBLUUkKC5R5IR8tgNA08FbcNRHWg== 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=1784727764; 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=VVY6tG2klc5/SYpidxylY6HuVBXvlE+Ombx/iVnmmjw=; b=fTav0JK5oS7+6N2ksgCN6Wv3i/TXZu3TFvQuCwVR9dTFptoCCny3VlL5rCIIsDUo5/8V1a pq8QbGsyOc5SkSWDmmJypQOuGNnNtZ2zV4KIy5BKZyaNyZjFUFcV8rFJ4xXBzIYXFfH+gY 4F+IXDDJD7orNqo4aVt0QE5zCxEOhmHuEuprra2oFB+hnsc4nxMbGLHWkZmrJqf48nPLBk 0QLZKB2QTSxH/AVc6TQx3aMNiY5x7FSDnPtZqiiEuVFg4bykK058WqwDWwV4aTYTYp6o7Y c4heoEYbr1ypa1Es3L5bxxTvOTv3Zf0ZtsPC7WVKYgabPY7TA7JCn3WZblsz5g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4wRm2tKQz5x8 for ; Wed, 22 Jul 2026 13:42:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 23f51 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 13:42:44 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Siva Mahadevan Subject: git: afa048d159f6 - main - powerpc64: enable extended error strings in GENERIC64* configs List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: siva X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: afa048d159f64e1c609475314e19fb030ffd595f Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 13:42:44 +0000 Message-Id: <6a60c8d4.23f51.30b0a1a@gitrepo.freebsd.org> The branch main has been updated by siva: URL: https://cgit.FreeBSD.org/src/commit/?id=afa048d159f64e1c609475314e19fb030ffd595f commit afa048d159f64e1c609475314e19fb030ffd595f Author: Siva Mahadevan AuthorDate: 2026-07-22 01:58:58 +0000 Commit: Siva Mahadevan CommitDate: 2026-07-22 13:41:53 +0000 powerpc64: enable extended error strings in GENERIC64* configs These kernconfs were missed in the previous commit. PR: 289236 Reviewed by: kib Fixes: f38cbefef8090f3363e5685c5a3b30ffbf1d3ad0 MFC after: 3 days Sponsored by: The FreeBSD Foundation --- sys/powerpc/conf/GENERIC64 | 1 + sys/powerpc/conf/GENERIC64LE | 1 + 2 files changed, 2 insertions(+) diff --git a/sys/powerpc/conf/GENERIC64 b/sys/powerpc/conf/GENERIC64 index f2c688b1c622..b435ebcf87b7 100644 --- a/sys/powerpc/conf/GENERIC64 +++ b/sys/powerpc/conf/GENERIC64 @@ -37,6 +37,7 @@ options FDT # Flattened Device Tree options SCHED_ULE # ULE scheduler options NUMA # Non-Uniform Memory Architecture support options PREEMPTION # Enable kernel thread preemption +options EXTERR_STRINGS # Retain exterror(9) strings in the kernel options VIMAGE # Subsystem virtualization, e.g. VNET options INET # InterNETworking options INET6 # IPv6 communications protocols diff --git a/sys/powerpc/conf/GENERIC64LE b/sys/powerpc/conf/GENERIC64LE index ee5ecc271743..c6dbbdc3a613 100644 --- a/sys/powerpc/conf/GENERIC64LE +++ b/sys/powerpc/conf/GENERIC64LE @@ -36,6 +36,7 @@ options FDT # Flattened Device Tree options SCHED_ULE # ULE scheduler options NUMA # Non-Uniform Memory Architecture support options PREEMPTION # Enable kernel thread preemption +options EXTERR_STRINGS # Retain exterror(9) strings in the kernel options VIMAGE # Subsystem virtualization, e.g. VNET options INET # InterNETworking options INET6 # IPv6 communications protocols From nobody Wed Jul 22 15:12:45 2026 X-Original-To: dev-commits-src-main@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 4h4yRd4JVHz6mFTj for ; Wed, 22 Jul 2026 15:12:45 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4yRd3Srvz3kWp for ; Wed, 22 Jul 2026 15:12:45 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784733165; 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=gTD7kcdMOF67ZEPNxR8oi8+JTDmcaAHwwwqFFhPR/FQ=; b=k3i5Dtv36mkFaqWODBdxqd1LrXsovT7XMcPm1ZuL6sdSR5aNHqX+IMqs1PYL2lGHG82l0m Al6J5yY9LqerDYwb+6ej5edWEkUAayy8pBg1cU6NKXTx0+QbNaB2MgEAAj8d9KMF5j993T EVYz7eGZw0qiEXUuQvSyLTDTkne9NfJQ8t4eyxkLZWx1xupXBePLyzREP8erE4Ev5imarT gh1/0h8hxtYgyYyh+uAEXVyTj9Zd6gCiLHxGDnAfcNKRrARU0QcKOKn0WmateaYPzoG1dM Xs91XsTd1HvJm7+zbyzmk+f4dg9FvZ4lnwr6/qMvnJkmJ6Pvn4It5Ed7aUrX7A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784733165; a=rsa-sha256; cv=none; b=UnTsSWE4RqJ1d0ldgtwF+Oau7Ap+grp2LrzZgXKPmFyjV5pyZYju6gUMWk3/mJ9MZbU+dd +citCnqxMdGrypXTDZV8fhKPJxcDuiKW7FjXUnFJRtkTBflifVbxyhhtbsynbM8i/wfyvn HMlglDGm32lQz0xEZmgc1sSZUPyXpPfJnBF6LHwxi0T6r9+f3WIFfC/mQEgkdpJonNY3ju 6u7SLB6mlIn4Yo73UknZKM8x2q4N0cRcBJoovP4dw27ToAcdaAygiJf1neCC8unhnDo6fN UWMT+RexnxS9aEnh+xBBp5tuDHNcAJeKIAt8uT9+MoYLV15cjqX3QTAfI6aR2w== 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=1784733165; 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=gTD7kcdMOF67ZEPNxR8oi8+JTDmcaAHwwwqFFhPR/FQ=; b=ywbqLkRBzBEZ/SjqiQpUtiWJHk40Jjeuw6U57wtejGNHC7ki2ofd6JUmIGfarpqIT+cgz4 nKxfOtz2qeUKqH4kw+Cp4QOH4Qk1AUhuxavYpvGdFrsd29R+VocouiH/vR0gVxZ/HZCfay jTg4wAtrOR+dwWPrYa+eAbevu4z5zR8B+1GL0pGJjIW3GRHnCrnvAB6GFn/eb1QpvZhJ9u 64PPkzcWXj7O8wrrjKJnqRHWSnQS88yBK+50hb6Xd/nI2RyGG5p14KyXwhrJU1T3IcUpyC y5NDPBerXkpTiie5dXJYvZ3lzWrYiNnbOfxO5daAzD2zf9vfaM2AmaRBItvmLw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4yRd2VTXz82v for ; Wed, 22 Jul 2026 15:12:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 33eb7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 15:12:45 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: 4c94869c37e1 - main - uvideo: replace contigmalloc with OBJT_PHYS vm_object for mmap buffer List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4c94869c37e14dc334e2400d1a26d5ded89576fc Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 15:12:45 +0000 Message-Id: <6a60dded.33eb7.43e089@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=4c94869c37e14dc334e2400d1a26d5ded89576fc commit 4c94869c37e14dc334e2400d1a26d5ded89576fc Author: Baptiste Daroussin AuthorDate: 2026-07-22 11:25:31 +0000 Commit: Baptiste Daroussin CommitDate: 2026-07-22 15:10:57 +0000 uvideo: replace contigmalloc with OBJT_PHYS vm_object for mmap buffer Allocate the mmap buffer via phys_pager_allocate() and map it into kernel space with vm_map_find()/vm_map_wire(), instead of a custom cdev_pager backed by contigmalloc. phys_pager_allocate() is required over a bare vm_object_allocate(OBJT_PHYS) to initialise un_pager.phys.ops, otherwise phys_pager_getpages() NULL-derefs during vm_map_wire(). Reviewed by: markj Reported by: markj Differential Revision: https://reviews.freebsd.org/D58394 --- sys/dev/usb/video/uvideo.c | 192 ++++++++++++--------------------------------- 1 file changed, 51 insertions(+), 141 deletions(-) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index 07f74f55b121..bb4d42778998 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -46,10 +46,14 @@ #include #include -#include -#include +#include +#include #include +#include #include +#include +#include +#include #include #include @@ -168,25 +172,6 @@ static d_ioctl_t uvideo_cdev_ioctl; static d_poll_t uvideo_cdev_poll; static d_kqfilter_t uvideo_cdev_kqfilter; static d_mmap_single_t uvideo_cdev_mmap_single; -static int uvideo_pg_ctor(void *, vm_ooffset_t, vm_prot_t, - vm_ooffset_t, struct ucred *, u_short *); -static void uvideo_pg_dtor(void *); -static int uvideo_pg_fault(vm_object_t, vm_ooffset_t, int, - vm_page_t *); - -/* - * Per-buffer state for mmap lifetime management. Allocated together - * with the contig buffer at REQBUFS time and attached to a single - * shared vm_object whose reference count tracks the active mappings. - * The buffer is freed by cdev_pg_dtor() when the last reference (the - * softc's own or a user mapping) is dropped. Lives independently of - * the softc so the pager dtor can safely free the buffer even after - * device detach. - */ -struct uvideo_mmap_state { - uint8_t *ms_buffer; - size_t ms_buffer_size; -}; static int uvideo_querycap(struct uvideo_softc *, struct v4l2_capability *); static int uvideo_enum_fmt(struct uvideo_softc *, struct v4l2_fmtdesc *); @@ -258,6 +243,7 @@ struct uvideo_softc { struct uvideo_mmap *sc_mmap_cur; uint8_t *sc_mmap_buffer; size_t sc_mmap_buffer_size; + vm_offset_t sc_mmap_kva; int sc_mmap_buffer_idx; q_mmap sc_mmap_q; int sc_mmap_count; @@ -745,12 +731,6 @@ static const struct usb_config uvideo_bulk_config[1] = { }, }; -static const struct cdev_pager_ops uvideo_pager_ops = { - .cdev_pg_ctor = uvideo_pg_ctor, - .cdev_pg_dtor = uvideo_pg_dtor, - .cdev_pg_fault = uvideo_pg_fault, -}; - /* * Character device switch */ @@ -940,6 +920,7 @@ uvideo_attach(device_t dev) /* Init mmap queue */ STAILQ_INIT(&sc->sc_mmap_q); sc->sc_mmap_count = 0; + sc->sc_mmap_kva = 0; sc->sc_mmap_object = NULL; /* Allocate unit number and create character device */ @@ -2296,18 +2277,14 @@ uvideo_vs_free_frame(struct uvideo_softc *sc) fb->buf = NULL; } - if (sc->sc_mmap_object != NULL) { - /* - * Drop the softc's reference to the shared mmap object. - * If user-space mappings still exist, the object and its - * backing contig buffer stay alive until the last mapping - * is dropped, at which point uvideo_pg_dtor() frees them. - */ - vm_object_deallocate(sc->sc_mmap_object); - sc->sc_mmap_object = NULL; + if (sc->sc_mmap_kva != 0) { + vm_map_remove(kernel_map, sc->sc_mmap_kva, + sc->sc_mmap_kva + sc->sc_mmap_buffer_size); sc->sc_mmap_buffer = NULL; + sc->sc_mmap_kva = 0; sc->sc_mmap_buffer_size = 0; } + sc->sc_mmap_object = NULL; while (!STAILQ_EMPTY(&sc->sc_mmap_q)) STAILQ_REMOVE_HEAD(&sc->sc_mmap_q, q_frames); @@ -2896,11 +2873,6 @@ uvideo_cdev_close(struct cdev *dev, int flags, int fmt, struct thread *td) uvideo_vs_close(sc); } - /* - * Release mmap buffer. If there are still active mmap - * mappings, the actual contigfree() is deferred to the - * last uvideo_pg_dtor() invocation. - */ uvideo_vs_free_frame(sc); if (sc->sc_fbuffer != NULL) { @@ -3157,79 +3129,6 @@ uvideo_cdev_mmap_single(struct cdev *dev, vm_ooffset_t *offset, return (0); } -static int -uvideo_pg_ctor(void *handle, vm_ooffset_t size, vm_prot_t prot, - vm_ooffset_t foff, struct ucred *cred, u_short *color) -{ - struct uvideo_mmap_state *ms = handle; - - if (ms->ms_buffer == NULL || foff + size > ms->ms_buffer_size) - return (EINVAL); - - *color = 0; - return (0); -} - -static void -uvideo_pg_dtor(void *handle) -{ - struct uvideo_mmap_state *ms = handle; - - /* - * The last reference to the shared mmap object is gone (either the - * softc released it, or the final user mapping was dropped). Free - * the backing contig buffer and the state. - */ - if (ms->ms_buffer != NULL) - contigfree(ms->ms_buffer, ms->ms_buffer_size, M_USBDEV); - free(ms, M_USBDEV); -} - -static int -uvideo_pg_fault(vm_object_t object, vm_ooffset_t offset, int prot, - vm_page_t *mres) -{ - struct uvideo_mmap_state *ms = object->un_pager.devp.handle; - vm_paddr_t paddr; - vm_page_t m; - - if (ms->ms_buffer == NULL) - return (VM_PAGER_FAIL); - - if (offset >= ms->ms_buffer_size) - return (VM_PAGER_FAIL); - - paddr = vtophys(ms->ms_buffer + offset); - if (paddr == 0) - return (VM_PAGER_FAIL); - - if (((*mres)->flags & PG_FICTITIOUS) != 0) { - /* - * The passed-in page is already a fake page: just update - * its physical address in place. - */ - m = *mres; - vm_page_updatefake(m, paddr, object->memattr); - } else { - /* - * Replace the placeholder page allocated by the generic - * fault path with our own fake page. vm_page_getfake() can - * allocate and must not be called with the object lock held; - * vm_page_replace() then swaps the new page into the object - * and frees the placeholder. Without this the busy - * placeholder stays in the object and dev_pager_dealloc() - * dead-locks trying to acquire it. - */ - VM_OBJECT_WUNLOCK(object); - m = vm_page_getfake(paddr, object->memattr); - VM_OBJECT_WLOCK(object); - vm_page_replace(m, object, (*mres)->pindex, *mres); - *mres = m; - } - m->valid = VM_PAGE_BITS_ALL; - return (VM_PAGER_OK); -} - /* ---------------------------------------------------------------- */ /* V4L2 Ioctl Handlers */ /* ---------------------------------------------------------------- */ @@ -3633,7 +3532,9 @@ static int uvideo_reqbufs(struct uvideo_softc *sc, struct v4l2_requestbuffers *rb) { int i, buf_size, buf_size_total; - struct uvideo_mmap_state *ms; + vm_object_t obj; + vm_offset_t kva; + int error; DPRINTFN(1, "reqbufs: count=%d\n", rb->count); @@ -3654,39 +3555,48 @@ uvideo_reqbufs(struct uvideo_softc *sc, struct v4l2_requestbuffers *rb) buf_size_total = sc->sc_mmap_count * buf_size; buf_size_total = round_page(buf_size_total); - sc->sc_mmap_buffer = contigmalloc(buf_size_total, M_USBDEV, - M_WAITOK | M_ZERO, 0, ~0UL, PAGE_SIZE, 0); - if (sc->sc_mmap_buffer == NULL) { - device_printf(sc->sc_dev, "can't allocate mmap buffer!\n"); + /* + * Allocate a physical vm_object of the requested size. Use + * phys_pager_allocate() so that un_pager.phys.ops is properly + * initialised: a bare vm_object_allocate(OBJT_PHYS, ...) + * leaves ops NULL and causes a page fault when the VM system + * calls phys_pager_getpages() during vm_map_wire() or a + * userspace fault on the mmap mapping. + */ + obj = phys_pager_allocate(NULL, &default_phys_pg_ops, NULL, + buf_size_total, VM_PROT_ALL, 0, curthread->td_ucred); + if (obj == NULL) { + device_printf(sc->sc_dev, "can't allocate mmap vm_object!\n"); sc->sc_mmap_count = 0; return (ENOMEM); } - sc->sc_mmap_buffer_size = buf_size_total; - /* - * Create a single shared vm_object backing the whole mmap buffer. - * Its reference count (bumped by each mmap() and held by the softc) - * tracks the lifetime of the mappings; the contig buffer is freed - * by uvideo_pg_dtor() when the last reference goes away, which may - * be after device detach. - */ - ms = malloc(sizeof(*ms), M_USBDEV, M_WAITOK | M_ZERO); - ms->ms_buffer = sc->sc_mmap_buffer; - ms->ms_buffer_size = sc->sc_mmap_buffer_size; - sc->sc_mmap_object = cdev_pager_allocate(ms, OBJT_DEVICE, - &uvideo_pager_ops, sc->sc_mmap_buffer_size, VM_PROT_ALL, - 0, curthread->td_ucred); - if (sc->sc_mmap_object == NULL) { - free(ms, M_USBDEV); - contigfree(sc->sc_mmap_buffer, sc->sc_mmap_buffer_size, - M_USBDEV); - sc->sc_mmap_buffer = NULL; - sc->sc_mmap_buffer_size = 0; + kva = vm_map_min(kernel_map); + error = vm_map_find(kernel_map, obj, 0, &kva, buf_size_total, 0, + VMFS_OPTIMAL_SPACE, VM_PROT_READ | VM_PROT_WRITE, + VM_PROT_READ | VM_PROT_WRITE, 0); + if (error != KERN_SUCCESS) { + vm_object_deallocate(obj); + device_printf(sc->sc_dev, "vm_map_find failed: %d\n", error); sc->sc_mmap_count = 0; - return (ENOMEM); + return (vm_mmap_to_errno(error)); } + error = vm_map_wire(kernel_map, kva, kva + buf_size_total, + VM_MAP_WIRE_SYSTEM | VM_MAP_WIRE_NOHOLES); + if (error != KERN_SUCCESS) { + vm_map_remove(kernel_map, kva, kva + buf_size_total); + device_printf(sc->sc_dev, "vm_map_wire failed: %d\n", error); + sc->sc_mmap_count = 0; + return (vm_mmap_to_errno(error)); + } + + sc->sc_mmap_object = obj; + sc->sc_mmap_buffer = (uint8_t *)kva; + sc->sc_mmap_kva = kva; + sc->sc_mmap_buffer_size = buf_size_total; - DPRINTFN(1, "allocated %d bytes mmap buffer\n", buf_size_total); + DPRINTFN(1, "allocated %d bytes mmap buffer at kva %#jx\n", + buf_size_total, (uintmax_t)kva); for (i = 0; i < sc->sc_mmap_count; i++) { sc->sc_mmap[i].buf = sc->sc_mmap_buffer + (i * buf_size); From nobody Wed Jul 22 15:12:46 2026 X-Original-To: dev-commits-src-main@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 4h4yRf5pNdz6mFKr for ; Wed, 22 Jul 2026 15:12:46 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4yRf4m7zz3kTF for ; Wed, 22 Jul 2026 15:12:46 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784733166; 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=E6xeqFV68C8sRelTtvMntGKyHk3jHbkKMYh/PVVEjZM=; b=kkem4gV9bG8bB4ZvMQKZ3VSRCkMDM3ZWhb56Zwu1jM+yt7PNqFi0aBcmUYz3yTcW1U8CdL KqScNXV0d2qJut52j9ESmRXQ/dixBEKmGqfhC7UOzkutBRK3DygGmiOw8fdAuUQIvVvtWk qEYntNMnnOSWbv+GjIvIVrTG4/mkCfKN0fJd3QBPpG2LGnPfIjuXh6vOrpIrU/1MaN02qN qbC4CxnCzulsKVmncpkvOwudz0z1OwTHLdkUDI3RggZuA1I4JiB9V4SPuIM4KOBRVce0ZR u84bh8S850B5M0VnLENph6Ci9/bR+FEp2WFS9qr16Gmsw+WSrTr8SEpHPD9ToA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784733166; a=rsa-sha256; cv=none; b=oDCs3CYDAVToVKon0Oaxoz/FGV3HfI+orQP2VumR6X1RE23+QND1gUxYape7RIzR1rOBlS d94Lgv6WWEMS2JrxxH9BXw036ZOD99WuPjFlnh0bfNSsvvtqZd4nmm+lCctxzXF575PKHl yK9DD/D+VadMTuyj34WCt6sXh1+2GThdTJ9vAIHKdVicWpAJgF+seMd+MWrtlCSFTDwK8h VUHRZOn++qbTw2zPNkup/5jRhFv1bvwR/CHmI/msx9GsODD9V/5VpgvTWFcXzWyjnApVez XwYafbEIW7GdXOGaDHiW8nLevepFSpGvAiUzi4QakCisQnR2uiz1FCt3N3Y9tQ== 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=1784733166; 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=E6xeqFV68C8sRelTtvMntGKyHk3jHbkKMYh/PVVEjZM=; b=T7UAQGiq1zqYP8s8R2acfzI1ltu9INrksNse96FouW8kBZx72UawFo1QPg/LqSmCIKn/ed QZixXvfOYbWHo/J6ojbzZira3oAkYhAqRFkhOsOQsdF8QltvA9N8x4EPl+Y/tIc1djhSBf E2fs2TWaA6CDQWFxrOvcgKYcPx1TApdR3bLkH/kcZxUr1RZxiAwV5bkybACdmHs7QYn2Wi i29m7L9ViZujJzJnFb2rW8WmYf3iQUxiVktGSFSiOJ9/Im7L1VBoLqMHjsIDf11xzFfyWn 6ukqW9g2ot+v7Wbg8RpeB2lPYIyQMjokl+8eSDp+BU5UAZWFwz1z1pJX1yfUkQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4yRf36Qbz7sg for ; Wed, 22 Jul 2026 15:12:46 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 34719 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 15:12:46 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: 4b9d794b6aa8 - main - uvideo: validate frame size before mmap buffer allocation List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4b9d794b6aa86a2b205e480928552d3f606d9bcc Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 15:12:46 +0000 Message-Id: <6a60ddee.34719.708b084f@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=4b9d794b6aa86a2b205e480928552d3f606d9bcc commit 4b9d794b6aa86a2b205e480928552d3f606d9bcc Author: Baptiste Daroussin AuthorDate: 2026-07-22 07:25:52 +0000 Commit: Baptiste Daroussin CommitDate: 2026-07-22 15:10:57 +0000 uvideo: validate frame size before mmap buffer allocation dwMaxVideoFrameSize comes from the USB probe/commit response and is not validated. reqbufs() computed buf_size_total with signed int arithmetic and no bound, so a bogus value could wrap the product to a small size and yield a too-small buffer with a huge sc_mmap_buffer_size, causing out-of-bounds writes from the USB transfer callbacks. Bound the frame size against sc_max_fbuf_size and use overflow-checked size_t arithmetic for the total and per-buffer offsets. Reported by: emaste --- sys/dev/usb/video/uvideo.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index bb4d42778998..9c6076bc76d0 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -3531,7 +3531,9 @@ uvideo_g_input(struct uvideo_softc *sc, int *input) static int uvideo_reqbufs(struct uvideo_softc *sc, struct v4l2_requestbuffers *rb) { - int i, buf_size, buf_size_total; + int i; + uint32_t buf_size; + size_t buf_size_total; vm_object_t obj; vm_offset_t kva; int error; @@ -3552,7 +3554,12 @@ uvideo_reqbufs(struct uvideo_softc *sc, struct v4l2_requestbuffers *rb) sc->sc_mmap_count = rb->count; buf_size = UGETDW(sc->sc_desc_probe.dwMaxVideoFrameSize); - buf_size_total = sc->sc_mmap_count * buf_size; + if (buf_size == 0 || sc->sc_max_fbuf_size <= 0 || + buf_size > (u_int)sc->sc_max_fbuf_size) + return (EINVAL); + if (SIZE_MAX / sc->sc_mmap_count < buf_size) + return (EINVAL); + buf_size_total = (size_t)sc->sc_mmap_count * buf_size; buf_size_total = round_page(buf_size_total); /* @@ -3599,10 +3606,11 @@ uvideo_reqbufs(struct uvideo_softc *sc, struct v4l2_requestbuffers *rb) buf_size_total, (uintmax_t)kva); for (i = 0; i < sc->sc_mmap_count; i++) { - sc->sc_mmap[i].buf = sc->sc_mmap_buffer + (i * buf_size); + sc->sc_mmap[i].buf = sc->sc_mmap_buffer + + ((size_t)i * buf_size); sc->sc_mmap[i].v4l2_buf.index = i; - sc->sc_mmap[i].v4l2_buf.m.offset = i * buf_size; + sc->sc_mmap[i].v4l2_buf.m.offset = (size_t)i * buf_size; sc->sc_mmap[i].v4l2_buf.length = buf_size; sc->sc_mmap[i].v4l2_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; sc->sc_mmap[i].v4l2_buf.sequence = 0; From nobody Wed Jul 22 15:12:47 2026 X-Original-To: dev-commits-src-main@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 4h4yRh1WwXz6mFKw for ; Wed, 22 Jul 2026 15:12:48 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4yRg5P2yz3kRk for ; Wed, 22 Jul 2026 15:12:47 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784733167; 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=2lw+qz2+lkO1v0ALIH1b5NuogDTkJ7V+ipxNegipPvs=; b=ca6R7H6eGt908TrFJ8viAcEuuOn/9rapTeRKsSK4TuinW2Qfl5VVsOMf9hVB18LSmuiBb+ AM+GgvfRFeBtXJ56IQUgyvrXWlz1Khl2aVcX5lgOwYOwlP4BQIaBgPEPWNvDpCpOoKQ0St 86LdHOP3SEReIA0ch4awEgY6cZ9ifHFiMVYNpEWC+IbIlFJQwa1ex6Yz9P9DiX7zRNSJHz dvkKgN0tzfUj60uNMpKGtw5Pkdfaxvl7z4O9bkoOyKPJwih4LDIpK/0g5+NGwdswaN2LPK zt2VnwxiISC3ro5FWNuWnfyXOGaZ1BOLXtrpuNLva3h7TccB7Dgz59TJTIktuQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784733167; a=rsa-sha256; cv=none; b=PYYN3XVlL3RX4LVnSuSbPcaNgRutgXSS5xBx3yNoaV0qC9n3uHYuGn13KQP7VvVPk484jO s2IIwtSTSQRTQkhj4g9AfFQvfuoTW/2nKAuaWz7wGDXvuZnBe3e42n0yHbukwsWn/s11Yh 8txBNynuCK1izcbfjDkcPmVaCXbOmGraMJAASeW3BujlIxVvYfA6j/8nFUIrtNHpa6UTwC yG6OBRgJJgsOZKnpdWlv7M2AC1STEHhWTnyoJlnN5usGqEEnV9cZxjtii1vU/DG8joU/2F U90FU7gIYm2c+Bb6WwCRtoEK9AW1kpopjT27bNZZxRSQwl8h2TWOjjwQtdjCSA== 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=1784733167; 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=2lw+qz2+lkO1v0ALIH1b5NuogDTkJ7V+ipxNegipPvs=; b=xbeefoxKrdxxoU4cBuo/Yep5aDKemlWFkQzZZ4o2sxFEyzDgTzHSFSK13wPBd1/34yXdZ4 cfVC1MOPcq4OOwH5Hpn+rJ2xL/ggcfDqGiu/c0kb0mn4M/bo75Asi8YbhhvOXrzP8AiQCi axP3McaPhhwG+JbrCORUTgOi3ICQJUE2NT/rmLj+o6qiSeBmYHC9JET2P5KaOOo2LBZMT2 FfEdWE1kh2ei9bwOlVMRMVJbTnLsgezGgmvxJ2BnCG5EE5sPDeS9qtjBWtK5+5Sa5eJmFZ nqEbMqPz1M0lH+DYZrGnebV7gkOpxOHAWuW4tOrgTjLfQP3a6V6zvFq+Wylt5Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4yRg45zrz7sj for ; Wed, 22 Jul 2026 15:12:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3377b by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 15:12:47 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: f12dd1d5f030 - main - uvideo: lock the mmap queue and read path List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f12dd1d5f0303fe3bc5030293bda04b04995b72c Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 15:12:47 +0000 Message-Id: <6a60ddef.3377b.5517bd77@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=f12dd1d5f0303fe3bc5030293bda04b04995b72c commit f12dd1d5f0303fe3bc5030293bda04b04995b72c Author: Baptiste Daroussin AuthorDate: 2026-07-22 07:26:18 +0000 Commit: Baptiste Daroussin CommitDate: 2026-07-22 15:10:57 +0000 uvideo: lock the mmap queue and read path qbuf(), dqbuf() and read() manipulated sc_mmap_q / sc_mmap_cur / sc_frames_ready without sc_mtx, racing with the USB transfer callbacks (producer) that run under the mutex. This could corrupt the queue or trigger use-after-free. Take sc_mtx around qbuf(), use mtx_sleep() and protect the queue operations in dqbuf(), and use mtx_sleep() with a snapshot of sc_fsize in read(). Also reject S_FMT and S_PARM with EBUSY while streaming: both re-negotiate the probe/commit controls with the device, which disrupts the active USB transfers (a second client opening the device would otherwise freeze the first one's stream). --- sys/dev/usb/video/uvideo.c | 72 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 13 deletions(-) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index 9c6076bc76d0..708660adeafb 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -2893,7 +2893,7 @@ uvideo_cdev_read(struct cdev *dev, struct uio *uio, int ioflag) { struct uvideo_softc *sc = dev->si_drv1; usb_error_t error; - int ret; + int ret, fsize; if (sc == NULL || sc->sc_dying) return (ENXIO); @@ -2942,23 +2942,31 @@ uvideo_cdev_read(struct cdev *dev, struct uio *uio, int ioflag) return (EBUSY); /* Wait for a frame */ + mtx_lock(&sc->sc_mtx); while (sc->sc_frames_ready == 0) { - if (ioflag & IO_NDELAY) + if (ioflag & IO_NDELAY) { + mtx_unlock(&sc->sc_mtx); return (EWOULDBLOCK); - ret = tsleep(sc, PCATCH, "uvread", hz * 10); - if (ret != 0) + } + ret = mtx_sleep(sc, &sc->sc_mtx, PCATCH, "uvread", hz * 10); + if (ret != 0) { + mtx_unlock(&sc->sc_mtx); return (ret); - if (sc->sc_dying) + } + if (sc->sc_dying) { + mtx_unlock(&sc->sc_mtx); return (ENXIO); + } } sc->sc_frames_ready--; + fsize = sc->sc_fsize; + mtx_unlock(&sc->sc_mtx); - if (sc->sc_fsize == 0) + if (fsize == 0) return (0); - return (uiomove(sc->sc_fbuffer, MIN(uio->uio_resid, sc->sc_fsize), - uio)); + return (uiomove(sc->sc_fbuffer, MIN(uio->uio_resid, fsize), uio)); } static int @@ -3367,6 +3375,16 @@ uvideo_s_fmt(struct uvideo_softc *sc, struct v4l2_format *fmt) if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) return (EINVAL); + /* Reject format changes while streaming: re-negotiating the probe + * and commit controls with the device would disrupt the active USB + * transfers. V4L2 mandates EBUSY in this case. */ + mtx_lock(&sc->sc_mtx); + if (sc->sc_streaming) { + mtx_unlock(&sc->sc_mtx); + return (EBUSY); + } + mtx_unlock(&sc->sc_mtx); + DPRINTFN(1, "s_fmt: requested %dx%d\n", fmt->fmt.pix.width, fmt->fmt.pix.height); @@ -3448,6 +3466,15 @@ uvideo_s_parm(struct uvideo_softc *sc, struct v4l2_streamparm *parm) { usb_error_t error; + /* Reject parameter changes while streaming for the same reason as + * S_FMT: they re-negotiate with the device. */ + mtx_lock(&sc->sc_mtx); + if (sc->sc_streaming) { + mtx_unlock(&sc->sc_mtx); + return (EBUSY); + } + mtx_unlock(&sc->sc_mtx); + if (parm->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) { if (parm->parm.capture.timeperframe.numerator == 0 || parm->parm.capture.timeperframe.denominator == 0) @@ -3652,8 +3679,11 @@ uvideo_qbuf(struct uvideo_softc *sc, struct v4l2_buffer *qb) qb->index >= sc->sc_mmap_count) return (EINVAL); + /* Serialize with the USB transfer callbacks (producer). */ + mtx_lock(&sc->sc_mtx); sc->sc_mmap[qb->index].v4l2_buf.flags &= ~V4L2_BUF_FLAG_DONE; sc->sc_mmap[qb->index].v4l2_buf.flags |= V4L2_BUF_FLAG_QUEUED; + mtx_unlock(&sc->sc_mtx); DPRINTFN(2, "buffer %d ready for queueing\n", qb->index); @@ -3670,24 +3700,40 @@ uvideo_dqbuf(struct uvideo_softc *sc, struct v4l2_buffer *dqb) dqb->memory != V4L2_MEMORY_MMAP) return (EINVAL); - if (STAILQ_EMPTY(&sc->sc_mmap_q)) { - error = tsleep(sc, PCATCH, "uvdqbuf", hz * 10); - if (error) + /* + * Serialize with the USB transfer callbacks (producer) that insert + * completed buffers into sc_mmap_q under sc_mtx. Use mtx_sleep so + * the wait and the queue inspection are atomic. + */ + mtx_lock(&sc->sc_mtx); + while (STAILQ_EMPTY(&sc->sc_mmap_q)) { + error = mtx_sleep(sc, &sc->sc_mtx, PCATCH, "uvdqbuf", hz * 10); + if (error != 0) { + mtx_unlock(&sc->sc_mtx); return (EINVAL); + } + if (sc->sc_dying) { + mtx_unlock(&sc->sc_mtx); + return (ENXIO); + } } mmap = STAILQ_FIRST(&sc->sc_mmap_q); - if (mmap == NULL) + if (mmap == NULL) { + mtx_unlock(&sc->sc_mtx); return (EINVAL); + } bcopy(&mmap->v4l2_buf, dqb, sizeof(struct v4l2_buffer)); mmap->v4l2_buf.flags &= ~V4L2_BUF_FLAG_DONE; mmap->v4l2_buf.flags &= ~V4L2_BUF_FLAG_QUEUED; + STAILQ_REMOVE_HEAD(&sc->sc_mmap_q, q_frames); + mtx_unlock(&sc->sc_mtx); + DPRINTFN(2, "frame dequeued from index %d\n", mmap->v4l2_buf.index); - STAILQ_REMOVE_HEAD(&sc->sc_mmap_q, q_frames); return (0); } From nobody Wed Jul 22 15:12:48 2026 X-Original-To: dev-commits-src-main@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 4h4yRj1TYHz6mFKx for ; Wed, 22 Jul 2026 15:12:49 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4yRh6WZwz3kbM for ; Wed, 22 Jul 2026 15:12:48 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784733169; 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=xs96SD9lX6WdLOW4gp4dcoI6X0eEbOihpSa18ZM89SU=; b=IidoM3RKZsNkvBTeHwIfzls8GxqV6MaRP/EaNPTweizYZtj1x4rjWkyloKxBUHZMCTtAu2 DU/JM8Sr3CGCE5DkoDfcFmIM17FXFlQETBqNW9sL2SAN8cmEcgPLFtH76tUWLmk63aVsFk gQn9k6JWp2OJ989WEfsP3AJ+8rpm9ipfqBGCWwPbK5QcgaaanXWQoG8k+FKU0IMDa+56FS BcSDVYrihfIst83y8Q48xCOxlVMGNP1TFcWupSiNyP5nmKEU9jupr14vt0tHPgNqHXUIxz iMSZAk6oTsSQMQLXQ989lcFhnqTw7i8VOO1caCdTooPkIP84/ryKJmoI4p4eEQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784733169; a=rsa-sha256; cv=none; b=GoXpUTds+G6/cCr84ippbyOQVJB1l5Mvj+HQyentIj0KfT8UEav2SKZGz+09oVaYtYk6iS JHfXnJ2o/aquZfyVwLsu9KrnZZ88bG9K1YR6uqL8GVAiZlRj1dPKnWM1Q3mX0vx3xL2vaB Gz046PY7aaPQXbeIZCQLpgxqBaDhYZpCJpaBP+KpdIYW08J+F+BXV91snn9TvYL8g3fvD1 KYd6nJ6buU6vhb2phiraZDQDsyu8YttTmhgnQVwwjod6Uypu4EKKUyXOtweYdM110+i7eV K4v00BVqe6Gi7iOU7Pfl6uT3zYSSNfrQ5Xjvk0zliJX0hY1rjHiDilyIZJhfHw== 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=1784733169; 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=xs96SD9lX6WdLOW4gp4dcoI6X0eEbOihpSa18ZM89SU=; b=EyiCUz+SH5w1XZRu+uzibaSQ+kqGN+gtVCbE+VUjhUxttagVeAORcY+DL/CPWtprom6Ouy lWvl3fbLbpmTiUdqWCe5UBuWguGn4B+tXqdh6AY74iNHSf9Gq6I9LTWzmNCmPsKp51d4kG TU1kECrjmpnO87Ar8TyAOXRGWAtCOeqjq48o4y0Z0g/HkIE3tblNESIUcVb7xqSrpjXnN6 PvTAPqmqoT1n28c6qKcuB2OktEVLWXS7SbNg7u3+525tuECkOnt/Tuy56Jag+zs4CBv20+ BgOgaKJQLz6Ngw/87BcedVwjHdePVtXT21JEdnmkS2p2V+kls9Bs+9V6Ybwk1w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4yRh4q28z83y for ; Wed, 22 Jul 2026 15:12:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3377f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 15:12:48 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: cb26bda8ca36 - main - uvideo: bounds-check frame interval reads against bLength List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: cb26bda8ca36e0e421f75d82e1aa46df8f2ff814 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 15:12:48 +0000 Message-Id: <6a60ddf0.3377f.5adea594@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=cb26bda8ca36e0e421f75d82e1aa46df8f2ff814 commit cb26bda8ca36e0e421f75d82e1aa46df8f2ff814 Author: Baptiste Daroussin AuthorDate: 2026-07-22 07:42:29 +0000 Commit: Baptiste Daroussin CommitDate: 2026-07-22 15:10:57 +0000 uvideo: bounds-check frame interval reads against bLength Frame interval data is read from device-supplied frame descriptors whose bLength may be shorter than the number of intervals declared by bFrameIntervalType. The continuous branch of uvideo_enum_fivals() read three intervals unconditionally, and the discrete branch checked the pointer but not the four bytes that UGETDW() reads, so a short or malformed descriptor could read past bLength and leak adjacent kernel memory to userspace. uvideo_vs_parse_desc_frame_max_rate() had the same class of off-by-up-to-three-bytes read. Compute the available bytes from bLength and validate before each read. Reported by: emaste --- sys/dev/usb/video/uvideo.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index 708660adeafb..ac54eba19695 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -1791,7 +1791,7 @@ uvideo_vs_parse_desc_frame_max_rate(struct uvideo_softc *sc, nivals = UVIDEO_FRAME_NUM_INTERVALS(fd); for (i = 0; i < nivals; i++) { - if (length <= 0) + if (length < (int)sizeof(uDWord)) break; next_frame_ival = UGETDW(p); if (next_frame_ival > frame_ival) @@ -3294,7 +3294,7 @@ uvideo_enum_fsizes(struct uvideo_softc *sc, struct v4l2_frmsizeenum *fsizes) static int uvideo_enum_fivals(struct uvideo_softc *sc, struct v4l2_frmivalenum *fivals) { - int idx; + int idx, ival_bytes; struct uvideo_format_group *fmtgrp = NULL; struct usb_video_frame_desc *frame = NULL; uint8_t *p; @@ -3327,6 +3327,9 @@ uvideo_enum_fivals(struct uvideo_softc *sc, struct v4l2_frmivalenum *fivals) return (EINVAL); p = (uint8_t *)frame + UVIDEO_FRAME_MIN_LEN(frame); + ival_bytes = (int)frame->bLength - (int)UVIDEO_FRAME_MIN_LEN(frame); + if (ival_bytes < 0) + return (EINVAL); bzero(fivals, sizeof(*fivals)); fivals->index = fi_index; @@ -3337,6 +3340,8 @@ uvideo_enum_fivals(struct uvideo_softc *sc, struct v4l2_frmivalenum *fivals) if (UVIDEO_FRAME_NUM_INTERVALS(frame) == 0) { if (fi_index != 0) return (EINVAL); + if (ival_bytes < (int)(3 * sizeof(uDWord))) + return (EINVAL); fivals->type = V4L2_FRMIVAL_TYPE_STEPWISE; fivals->stepwise.min.numerator = UGETDW(p); fivals->stepwise.min.denominator = 10000000; @@ -3349,12 +3354,9 @@ uvideo_enum_fivals(struct uvideo_softc *sc, struct v4l2_frmivalenum *fivals) } else { if (fi_index >= (uint32_t)UVIDEO_FRAME_NUM_INTERVALS(frame)) return (EINVAL); - p += sizeof(uDWord) * fi_index; - if (p > frame->bLength + (uint8_t *)frame) { - device_printf(sc->sc_dev, - "frame desc too short?\n"); + if (ival_bytes < (int)((fi_index + 1) * sizeof(uDWord))) return (EINVAL); - } + p += sizeof(uDWord) * fi_index; fivals->type = V4L2_FRMIVAL_TYPE_DISCRETE; fivals->discrete.numerator = UGETDW(p); fivals->discrete.denominator = 10000000; From nobody Wed Jul 22 15:12:49 2026 X-Original-To: dev-commits-src-main@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 4h4yRk1Zxvz6mFjR for ; Wed, 22 Jul 2026 15:12:50 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4yRk03XHz3kV1 for ; Wed, 22 Jul 2026 15:12:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784733170; 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=dOckhgicRN0blltWDs244CLYuSs0+/7pN2MFPSElFIg=; b=m8aYWPXE96E87T6ZWDnylzOj1+X3gmOZ1KCs3GnnA+eiTD8G2FvH5i4w+WAWBaemMs/pcp Cu2M63ABq38IuPzLPZ0Y7ix3e4bB6Fwwl+pp6GXYquda+FqeoGjCNP/mF2Flc2FsGmTbsJ TY3Tc4X9EJLR0p50ZH5hGperry+3yi2Np8SwlUr2yfcyXKo0gFqljWto+oDlVXnY3KFHAX u+iUTBSDfqkcHv0d43VQYEEGt+OCaE2rrGMZ4IWDPqbI4KEz237oLLkjsY5O9m24Rm22eD Q9WeUIDGKru1rMix8pR0k5VWWmvjyCdslnKHQf662fkQaZxnJwleE2WqvD+xQA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784733170; a=rsa-sha256; cv=none; b=kQIOhdoIJR+rm0TmxVwVfu+cQ04O1HCmpGThcBsTtk/940n7J4rIyJepH5IARTI/lwRHoj tI0M2IMM4TXYkuabQjNEvT+6vQjl6G04b6bZ2YF7Jrd9NDBmmBmc7tJV99dx0QyN51M2cb A1iko94/aL371oFl3tYxPULLXsIQwEGuC1Aa85t4Yzqv20K97epN/+LqzdCdsAsISRdeEG 0azx663aBtaipeom9AqYDLqmp+fgV39t05IW7OGJqxQ4POH24aXSyoA2BQnAjyLjCnsnr5 u5aUwzkakLm7bmaKn5tFsCB407UeZfYMMnXNvxJgK5ae3/zr0C3wtrGdvkpqIA== 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=1784733170; 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=dOckhgicRN0blltWDs244CLYuSs0+/7pN2MFPSElFIg=; b=lsMVQI2BFCNOQkUip6S6OsqRtYvTEzEk31nTcLQwwsczzfEG2y5/1cJM+qX4dftt8XKbo3 9Sf/jS2yimM3pL0tRRnpZQ1qJlC5F1zh54QdNsT4+RBsz5Faxhk2HZJJImOAIxEcUPZqqH 4/pM5UWNTLNfga5oL1if/HhiOVDeQLgrwtCrM2MLCka6sf8axIoapzL43ooOhEwxrX+uco pL5ZwQ3GgSGJJ7e/K/QUdC1mxaBqlaQdWsRr98h8iBb3dNuUBmifazXQR5uAvKFgj6GsfZ MAYrqqe1SUyek+13xmryQz+nyERxHgAPRaefY9S8V8+SGuKR6HPwGqSMT4FcAQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4yRj5jMwz8Fy for ; Wed, 22 Jul 2026 15:12:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 33e3c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 15:12:49 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: 2120f3e5ec70 - main - uvideo: track streaming ownership per-fd and free buffers on STREAMOFF List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2120f3e5ec701d92848c259ece4dfbf1aa95f6cb Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 15:12:49 +0000 Message-Id: <6a60ddf1.33e3c.5b935d5f@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=2120f3e5ec701d92848c259ece4dfbf1aa95f6cb commit 2120f3e5ec701d92848c259ece4dfbf1aa95f6cb Author: Baptiste Daroussin AuthorDate: 2026-07-22 08:14:18 +0000 Commit: Baptiste Daroussin CommitDate: 2026-07-22 15:10:58 +0000 uvideo: track streaming ownership per-fd and free buffers on STREAMOFF The driver shared a single streaming state and buffer pool across all open file descriptors, so a second client (e.g. another browser tab) could disrupt the first: its cleanup STREAMOFF would tear down the active stream, and stale buffers prevented re-acquisition. Add per-fd state via devfs cdevpriv tracking whether this fd started streaming. STREAMOFF and close from a non-streaming fd are no-ops. STREAMOFF from the streaming fd stops the stream and frees the buffers so that a new fd can re-acquire the camera. DQBUF returns EPIPE immediately when buffers are freed instead of waiting for a timeout. --- sys/dev/usb/video/uvideo.c | 79 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 76 insertions(+), 3 deletions(-) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index ac54eba19695..bfcd6696a8e0 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -2822,10 +2822,31 @@ uvideo_read_frame(struct uvideo_softc *sc, uint8_t *buf, int len) /* Character Device Operations */ /* ---------------------------------------------------------------- */ +/* + * Per-fd state (via devfs cdevpriv). Tracks whether this fd started + * streaming so that STREAMOFF or close from a non-streaming fd (e.g. a + * second tab that failed REQBUFS) does not tear down the active stream + * owned by another fd. + */ +struct uvideo_cdevpriv { + int streaming; +}; + +static void uvideo_cdevpriv_dtor(void *); + +static void +uvideo_cdevpriv_dtor(void *data) +{ + + free(data, M_USBDEV); +} + static int uvideo_cdev_open(struct cdev *dev, int flags, int fmt, struct thread *td) { struct uvideo_softc *sc = dev->si_drv1; + struct uvideo_cdevpriv *priv; + int error; if (sc == NULL || sc->sc_dying) return (ENXIO); @@ -2833,6 +2854,13 @@ uvideo_cdev_open(struct cdev *dev, int flags, int fmt, struct thread *td) if (sc->sc_vs_cur == NULL) return (EIO); + priv = malloc(sizeof(*priv), M_USBDEV, M_WAITOK | M_ZERO); + error = devfs_set_cdevpriv(priv, uvideo_cdevpriv_dtor); + if (error != 0) { + free(priv, M_USBDEV); + return (error); + } + mtx_lock(&sc->sc_mtx); if (sc->sc_open == 0) { /* First open: initialize state */ @@ -2853,10 +2881,27 @@ static int uvideo_cdev_close(struct cdev *dev, int flags, int fmt, struct thread *td) { struct uvideo_softc *sc = dev->si_drv1; + struct uvideo_cdevpriv *priv; if (sc == NULL) return (0); + /* + * If this fd started streaming, stop the stream and free the + * buffers so that a new fd (e.g. a refreshed browser tab) can + * re-acquire the camera. Other fds sharing the stream will get + * EPIPE on DQBUF and should re-open. + */ + if (devfs_get_cdevpriv((void **)&priv) == 0 && priv != NULL && + priv->streaming) { + priv->streaming = 0; + mtx_lock(&sc->sc_mtx); + sc->sc_streaming = 0; + mtx_unlock(&sc->sc_mtx); + uvideo_vs_close(sc); + uvideo_vs_free_frame(sc); + } + mtx_lock(&sc->sc_mtx); sc->sc_open--; if (sc->sc_open > 0) { @@ -2865,7 +2910,7 @@ uvideo_cdev_close(struct cdev *dev, int flags, int fmt, struct thread *td) } mtx_unlock(&sc->sc_mtx); - /* Last close: stop streaming if active */ + /* Last close: stop streaming if still active (safety net) */ if (sc->sc_streaming) { mtx_lock(&sc->sc_mtx); sc->sc_streaming = 0; @@ -2892,6 +2937,7 @@ static int uvideo_cdev_read(struct cdev *dev, struct uio *uio, int ioflag) { struct uvideo_softc *sc = dev->si_drv1; + struct uvideo_cdevpriv *priv; usb_error_t error; int ret, fsize; @@ -2903,6 +2949,8 @@ uvideo_cdev_read(struct cdev *dev, struct uio *uio, int ioflag) /* Start streaming in read mode if not already running */ if (sc->sc_vidmode == VIDMODE_NONE) { + if (devfs_get_cdevpriv((void **)&priv) != 0 || priv == NULL) + return (EINVAL); sc->sc_mmap_flag = 0; sc->sc_vidmode = VIDMODE_READ; @@ -2928,6 +2976,7 @@ uvideo_cdev_read(struct cdev *dev, struct uio *uio, int ioflag) mtx_lock(&sc->sc_mtx); sc->sc_streaming = 1; + priv->streaming = 1; if (sc->sc_vs_cur->bulk_endpoint) usbd_transfer_start(sc->sc_xfer[0]); else { @@ -3702,6 +3751,11 @@ uvideo_dqbuf(struct uvideo_softc *sc, struct v4l2_buffer *dqb) dqb->memory != V4L2_MEMORY_MMAP) return (EINVAL); + /* Buffers were freed (e.g. the streaming fd closed); fail fast + * so the caller can re-open instead of waiting for a timeout. */ + if (sc->sc_mmap_count == 0 || sc->sc_mmap_buffer == NULL) + return (EPIPE); + /* * Serialize with the USB transfer callbacks (producer) that insert * completed buffers into sc_mmap_q under sc_mtx. Use mtx_sleep so @@ -3743,13 +3797,21 @@ uvideo_dqbuf(struct uvideo_softc *sc, struct v4l2_buffer *dqb) static int uvideo_streamon(struct uvideo_softc *sc, int type) { + struct uvideo_cdevpriv *priv; usb_error_t error; if (type != V4L2_BUF_TYPE_VIDEO_CAPTURE) return (EINVAL); - if (sc->sc_streaming) + if (devfs_get_cdevpriv((void **)&priv) != 0 || priv == NULL) + return (EINVAL); + + mtx_lock(&sc->sc_mtx); + if (priv->streaming || sc->sc_streaming) { + mtx_unlock(&sc->sc_mtx); return (0); + } + mtx_unlock(&sc->sc_mtx); sc->sc_vidmode = VIDMODE_MMAP; @@ -3759,6 +3821,8 @@ uvideo_streamon(struct uvideo_softc *sc, int type) mtx_lock(&sc->sc_mtx); sc->sc_streaming = 1; + priv->streaming = 1; + if (sc->sc_vs_cur->bulk_endpoint) usbd_transfer_start(sc->sc_xfer[0]); else { @@ -3774,18 +3838,27 @@ uvideo_streamon(struct uvideo_softc *sc, int type) static int uvideo_streamoff(struct uvideo_softc *sc, int type) { + struct uvideo_cdevpriv *priv; if (type != V4L2_BUF_TYPE_VIDEO_CAPTURE) return (EINVAL); - if (!sc->sc_streaming) + if (devfs_get_cdevpriv((void **)&priv) != 0 || priv == NULL) + return (EINVAL); + + /* Only the fd that started streaming may stop it. */ + if (!priv->streaming) { return (0); + } + + priv->streaming = 0; mtx_lock(&sc->sc_mtx); sc->sc_streaming = 0; mtx_unlock(&sc->sc_mtx); uvideo_vs_close(sc); + uvideo_vs_free_frame(sc); return (0); } From nobody Wed Jul 22 15:12:50 2026 X-Original-To: dev-commits-src-main@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 4h4yRl5TJLz6mFTw for ; Wed, 22 Jul 2026 15:12:51 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4yRl0tDJz3kbl for ; Wed, 22 Jul 2026 15:12:51 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784733171; 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=/EzOBE6ldS2IOyLlxurn00P/+uyu+j0mkyLmdxP3YBc=; b=bIRjhrPHbkRjI8twxRevHVmRaGVRFVpX337XLcg8vRH4CS7ivASI7ueNPq+T35dT7n7hF4 BqC2Zy7v+FG08+Xo+k1sxPUPCWJschzN1DVdA3zyx9JiS7oJMcKJ6x93CfKk1f1m2mExtJ 5TTVsejBWBVq6JQWJIUywZAOiv0Yp1QZrZVzmHBmFo/yj8MbGLdeA5yiuhcc6DHgVB7RZI tWmnFur35U3PVk2PQIhvcGJEqmUq1ytIE0bl0j9M/TA6QXwSxnrSSf5vpWrvZo8o76Bh0t vrEQ2vFUaXm5r249K0Jhw33mawg8zIwewSKC4wQunmGA+xGbdE3deL+1uAxizQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784733171; a=rsa-sha256; cv=none; b=rGDf8ker3h/WQkAQGr92uzVBwz4+/BkydCcuwIH2sWMDs5F7WJvkDazggbkXp9/gch5Tqs TiPw0Ha8LRYMZji2TT1SR5gNlEvonrvYem5VfWZ8S658cocL9CI478v0rhNQziWwQyUKsa 9aOk1ZCmWaWqu0tY9Dcw6SsWIQtRty/GGrfgsmcKrMiXnY4E4um5ByCkN1A1R/B6k6I/5J OZwzARbGVeNoqUrrgjk2JhB30tA6Nywz10B3vy8yiznMh15Kg3iq4i2ucGpqbLLs9LHEqB kN+3HmNhzoq3/cHL4j92aw3JZvyVcBFyL8tDklMB9RFCQHVoltqtzTLZKCEK0Q== 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=1784733171; 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=/EzOBE6ldS2IOyLlxurn00P/+uyu+j0mkyLmdxP3YBc=; b=xtZEufrD73iO185+JwQm6bvIQnOcVVPoZuAHVyXRQg0thEKETUb2ZxppPA9mwRwNCssrmV sai5pDVBd3m0t012fFokDyrv/365gQ5q6ceEAS5sLss2JcjbVQIje4pAQ2KuUXXNV/H4Tl /tiykHlUsJZMnE1KL0jHBSxxTHui/Jb+yB7F2I0f0a3XPDVQ9ajcBdI3nvWlWU3IiPcG+5 9VB94eHSNoNMf/tWXftuXHhmyJtGrPlQrba0aruXZ86ImPvimw8mPlYJOkS0KRxkXOQq7P GywWS1MI0papVrs3D9//quODYejYRyYALt+9fSj8N1zlb3udwoKzVMb0Wmj4nw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4yRk6ZjCz8G0 for ; Wed, 22 Jul 2026 15:12:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 33f9c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 15:12:50 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: 12b4a02bd881 - main - uvideo: fix close/detach race on streaming teardown List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 12b4a02bd88117b07f3e142af71b70bade4fd57e Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 15:12:50 +0000 Message-Id: <6a60ddf2.33f9c.710b3d4a@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=12b4a02bd88117b07f3e142af71b70bade4fd57e commit 12b4a02bd88117b07f3e142af71b70bade4fd57e Author: Baptiste Daroussin AuthorDate: 2026-07-22 08:18:23 +0000 Commit: Baptiste Daroussin CommitDate: 2026-07-22 15:10:58 +0000 uvideo: fix close/detach race on streaming teardown detach() stopped streaming and called uvideo_vs_close() before destroy_dev(), so a concurrent close() could race the teardown and call uvideo_vs_close() a second time (double usbd_transfer_unsetup), and mtx_destroy() could race a close still holding sc_mtx. sc_streaming was also read without the lock in both paths. Reorder detach() to call destroy_dev() first so all in-flight cdev methods drain before any teardown. Read sc_streaming under sc_mtx in both detach() and the last-close safety net. --- sys/dev/usb/video/uvideo.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index bfcd6696a8e0..57d31d2b5286 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -960,21 +960,20 @@ uvideo_detach(device_t dev) sc->sc_dying = 1; - /* Stop any active streaming */ - if (sc->sc_streaming) { - mtx_lock(&sc->sc_mtx); - sc->sc_streaming = 0; - mtx_unlock(&sc->sc_mtx); - uvideo_vs_close(sc); - } - /* Destroy character device */ if (sc->sc_cdev != NULL) { destroy_dev(sc->sc_cdev); sc->sc_cdev = NULL; } - /* Unit number is implicitly freed when the cdev is destroyed */ + /* Stop streaming if still active (e.g. detached while idle). */ + mtx_lock(&sc->sc_mtx); + if (sc->sc_streaming) { + sc->sc_streaming = 0; + mtx_unlock(&sc->sc_mtx); + uvideo_vs_close(sc); + } else + mtx_unlock(&sc->sc_mtx); /* Free frame buffers */ uvideo_vs_free_frame(sc); @@ -2911,12 +2910,13 @@ uvideo_cdev_close(struct cdev *dev, int flags, int fmt, struct thread *td) mtx_unlock(&sc->sc_mtx); /* Last close: stop streaming if still active (safety net) */ + mtx_lock(&sc->sc_mtx); if (sc->sc_streaming) { - mtx_lock(&sc->sc_mtx); sc->sc_streaming = 0; mtx_unlock(&sc->sc_mtx); uvideo_vs_close(sc); - } + } else + mtx_unlock(&sc->sc_mtx); uvideo_vs_free_frame(sc); From nobody Wed Jul 22 15:12:52 2026 X-Original-To: dev-commits-src-main@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 4h4yRm53jbz6mFgM for ; Wed, 22 Jul 2026 15:12:52 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4yRm1l46z3kSG for ; Wed, 22 Jul 2026 15:12:52 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784733172; 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=fyc4WDfEmhA2eMDRdSZNl/QpuDJLUoXPh3uN/n4HehM=; b=M5VoGFiJtdNFZPGQJZCPJ4VuGUE7riO508NZxb2iaIGzzBPDGI4czHEAi0Yxi74Xc98t6T nfy4dJvbt1c68gYga0C9xXiBSgFv+sqbILDCOZl8Npn9t50jH2OeCLv75jDHYvijIxTN8L 0oK0ng1BuC0JOSO53jXFzWdvXBzFgq+znGoY11yWhN0po/LSh0jHlvJqA9P28V6K1mnU4Z YS/gnhUlMXXk7MpuEkveI9/oZ51vR7lS2SqYzZFpge6byWrtDJFPDqjv1ZSvCC/Rt0WIdW Ezjgtnx/EW8buqiBYDhS13oH2JlQ3GxsHzdh6H2GOLk0vvTvHCB7serQbIJnfg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784733172; a=rsa-sha256; cv=none; b=w0+ppW2rvUGjtaA8abXjAAJOvNf9I1PsuGbGQgx1wLTZx3q/HtFm4kSO9yZZ6lKAi6Jvd/ hzs8NU9GIJAIZLh5UMKZBHd3b2Lwbb02MlG+V0dgsmqy5ZnqHw5gtsJz/cQzzicHLSDgSy QY57RTvs4BX3a52MX48jKvfgnVxX7LuQ5t4leUUqezVrnkU0iYdWAlEwJDcAB6qd3qDwQG vH/cazNZ6Pxv+dOSy85QDxUS0uH45RcIj8tbUShPdADrwrYSZiQE8EIoGIriVJYSicRW9L x4Ly5LE04pbXfvRhoUacOhJ9aqWFWyycz/BqoXh1T4OVy7z3EKIur9c++Tm1Sg== 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=1784733172; 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=fyc4WDfEmhA2eMDRdSZNl/QpuDJLUoXPh3uN/n4HehM=; b=iuPPdLKCuaTKEhbUmUqqoSmhLWBtwzfAXKzwHXN3MqLuD6zWy1sKAJMra6OMtJMxg302A9 vfjHiBbjJwwmXoP2fBW4vOyuFQfAquPxNABOhpoiwZIsEaEpStJvKtGIWogaPZc+Y5+FoT Qve1s6mUbJw1hLxDMe6bv6WfJszRqJo/1dvYUhdIjQXARzZ7CFFElJtvwxGk8w8AxoOm1a xaLMET8cP7bjCCOYHbrCsz0lRtEorquLj66tNApARCVbr4pnMc0S9yEYhOxGuoNaJdk+gC grgBfvIe5DdxU9pJAJXm5BtlAkqmT2ORLoDl8MJjHHn8xdXCcvlmaFfv3B5qfw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4yRm0LM5z7bs for ; Wed, 22 Jul 2026 15:12:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 321d8 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 15:12:52 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: 599a4d6beff0 - main - uvideo: use size_t for sc_mmap_count and loop index in reqbufs List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 599a4d6beff07f93f019e0aff9105a8e642a600f Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 15:12:52 +0000 Message-Id: <6a60ddf4.321d8.75000217@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=599a4d6beff07f93f019e0aff9105a8e642a600f commit 599a4d6beff07f93f019e0aff9105a8e642a600f Author: Baptiste Daroussin AuthorDate: 2026-07-22 11:53:34 +0000 Commit: Baptiste Daroussin CommitDate: 2026-07-22 15:10:58 +0000 uvideo: use size_t for sc_mmap_count and loop index in reqbufs --- sys/dev/usb/video/uvideo.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index 57d31d2b5286..b31b3fe294cd 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -246,7 +246,7 @@ struct uvideo_softc { vm_offset_t sc_mmap_kva; int sc_mmap_buffer_idx; q_mmap sc_mmap_q; - int sc_mmap_count; + size_t sc_mmap_count; int sc_mmap_flag; vm_object_t sc_mmap_object; @@ -3609,7 +3609,7 @@ uvideo_g_input(struct uvideo_softc *sc, int *input) static int uvideo_reqbufs(struct uvideo_softc *sc, struct v4l2_requestbuffers *rb) { - int i; + size_t i; uint32_t buf_size; size_t buf_size_total; vm_object_t obj; @@ -3637,7 +3637,7 @@ uvideo_reqbufs(struct uvideo_softc *sc, struct v4l2_requestbuffers *rb) return (EINVAL); if (SIZE_MAX / sc->sc_mmap_count < buf_size) return (EINVAL); - buf_size_total = (size_t)sc->sc_mmap_count * buf_size; + buf_size_total = sc->sc_mmap_count * buf_size; buf_size_total = round_page(buf_size_total); /* @@ -3684,11 +3684,10 @@ uvideo_reqbufs(struct uvideo_softc *sc, struct v4l2_requestbuffers *rb) buf_size_total, (uintmax_t)kva); for (i = 0; i < sc->sc_mmap_count; i++) { - sc->sc_mmap[i].buf = sc->sc_mmap_buffer + - ((size_t)i * buf_size); + sc->sc_mmap[i].buf = sc->sc_mmap_buffer + (i * buf_size); sc->sc_mmap[i].v4l2_buf.index = i; - sc->sc_mmap[i].v4l2_buf.m.offset = (size_t)i * buf_size; + sc->sc_mmap[i].v4l2_buf.m.offset = i * buf_size; sc->sc_mmap[i].v4l2_buf.length = buf_size; sc->sc_mmap[i].v4l2_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; sc->sc_mmap[i].v4l2_buf.sequence = 0; From nobody Wed Jul 22 15:12:53 2026 X-Original-To: dev-commits-src-main@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 4h4yRn5gMmz6mFgQ for ; Wed, 22 Jul 2026 15:12:53 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4yRn1sDqz3kY3 for ; Wed, 22 Jul 2026 15:12:53 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784733173; 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=EN0NFLa9Qx5MG0YgPjvKWTjjeW+sdH8YGPptq5+PJFs=; b=D9GumWlhEs3/wxEGuhdQXEAkNXTd72bvNlt3CTkcYsIrPfEc34gQfgXBB9EY/8rZLaitZU zbV1MwVx3Uo9iH2xQYZCBtgvFgW8BmRw89gXn4GbjBuZMGs9yAf3Q6OmYhnmBpswc0e2rv XrXs14xNm0q/HPIAj5mHe/qUCw5KclrzuyaQ9yz9JkQ6gaiWd/u38OTaT0lXMk+xUseKJ8 4ulpAnw3oEJNqoCXadblPk9e6tZ22m3hS5y79ExwDZNr9iaK7AIHfCw7I+csuWLD6RQbGe uerXem7NDAN3tDM8TNaDFJxYb2P7N5/c8oxoLuttcnNsv+4iQRNQRTCVjanmZg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784733173; a=rsa-sha256; cv=none; b=o6rPohDXCNQgtbaWVT3zkwF6B2HcW8IWoCUFZyA8kTUiebpZvnsfPegKNZOpj6CvpyqeY/ WVEn6MdpTCD+ViazDLPM6RJejZTbeYHYzT9qHstiiXf/eU2PdkbTnsM46roIJz3CFxBMkX jhwQXenkBkiGzuebvQfNBVy4i0NmNr4H7V3NlJd+s6VeyDakummGxnF0JGfugdR5kTb2Gg XK8rlZ2TYgLtYWKdAYN1gTR4IMDP+ek17jRtH9ucvZ81gWljrrlTC9/kjWXYjZTMy2UuBL 0+UpPpqwWUnFdTH+RjVC36/Z0Mi7fFv9sroD1PzWSMhlI9boZhewBKr0uGmp4w== 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=1784733173; 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=EN0NFLa9Qx5MG0YgPjvKWTjjeW+sdH8YGPptq5+PJFs=; b=GP8ahyox0YGNeiphvMF5/KPJt3cJrAToT9UURkAo0kIbkBR5pjC89d/h6uo8lg/VBHvtJ6 s30FO8HQBCE6jNq06EtDsLuBlCHik8jmpn7Ua6nJGKABOjd9c+Qfz22LXyI2iIBEHkhQG1 nim1n5paXHmtXj+8GyeP9vSYDmS7crdhESW/dFxWVoFD5l6awJTCSrDYFHM93+RWNnJR/b IgFXZP7ES6RWprmBFMavSF4Gw2eKOxyUNwvjw7TjWuUCpcd7rAWFwbZ8x6UPh/NOlZj3t6 lot+6RUFQZSv+23kobWkgQNSIAt0FbhWbGZ4Dy+tEPbKRQLnRs/e9WCqGse/gQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h4yRn0rkqz7dX for ; Wed, 22 Jul 2026 15:12:53 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 344e8 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 15:12:53 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: c141d75430c7 - main - uvideo: validate frame descriptors and fix integer overflows in size computation List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c141d75430c75d21aa8260287b9e2a05905335b3 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 15:12:53 +0000 Message-Id: <6a60ddf5.344e8.13bc6cae@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=c141d75430c75d21aa8260287b9e2a05905335b3 commit c141d75430c75d21aa8260287b9e2a05905335b3 Author: Baptiste Daroussin AuthorDate: 2026-07-22 12:15:21 +0000 Commit: Baptiste Daroussin CommitDate: 2026-07-22 15:10:58 +0000 uvideo: validate frame descriptors and fix integer overflows in size computation --- sys/dev/usb/video/uvideo.c | 114 ++++++++++++++++++++++++++++----------------- 1 file changed, 70 insertions(+), 44 deletions(-) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index b31b3fe294cd..a00fcc5a7395 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -233,7 +233,7 @@ struct uvideo_softc { int sc_streaming; int sc_max_ctrl_size; - int sc_max_fbuf_size; + uint32_t sc_max_fbuf_size; int sc_negotiated_flag; int sc_frame_rate; @@ -1308,6 +1308,7 @@ uvideo_vs_parse_desc(struct uvideo_softc *sc, return (error); /* Parse video stream frame descriptors */ + sc->sc_fmtgrp_idx = 0; error = uvideo_vs_parse_desc_frame(sc); if (error != USB_ERR_NORMAL_COMPLETION) return (error); @@ -1715,9 +1716,15 @@ uvideo_vs_parse_desc_frame_buffer_size(struct uvideo_softc *sc, struct usb_video_frame_desc *fd = __DECONST(struct usb_video_frame_desc *, desc); int fmtidx, frame_num; - uint32_t fbuf_size; + uint64_t fbuf_size; fmtidx = sc->sc_fmtgrp_idx; + if (fmtidx >= UVIDEO_MAX_FORMAT || + sc->sc_fmtgrp[fmtidx].format == NULL) { + device_printf(sc->sc_dev, + "frame descriptor without format!\n"); + return (USB_ERR_INVAL); + } frame_num = sc->sc_fmtgrp[fmtidx].frame_num; if (frame_num >= UVIDEO_MAX_FRAME) { device_printf(sc->sc_dev, @@ -1744,7 +1751,7 @@ uvideo_vs_parse_desc_frame_buffer_size(struct uvideo_softc *sc, fbuf_size = UGETDW(fd->u.uc.dwMaxVideoFrameBufferSize); if (fbuf_size > sc->sc_max_fbuf_size) - sc->sc_max_fbuf_size = fbuf_size; + sc->sc_max_fbuf_size = (uint32_t)fbuf_size; if (++sc->sc_fmtgrp[fmtidx].frame_num == sc->sc_fmtgrp[fmtidx].format->bNumFrameDescriptors) @@ -1761,9 +1768,16 @@ uvideo_vs_parse_desc_frame_max_rate(struct uvideo_softc *sc, __DECONST(struct usb_video_frame_desc *, desc); uint8_t *p; int i, fmtidx, frame_num, length, nivals; - uint32_t fbuf_size, frame_ival, next_frame_ival; + uint64_t fbuf_size; + uint32_t frame_ival, next_frame_ival; fmtidx = sc->sc_fmtgrp_idx; + if (fmtidx >= UVIDEO_MAX_FORMAT || + sc->sc_fmtgrp[fmtidx].format == NULL) { + device_printf(sc->sc_dev, + "frame descriptor without format!\n"); + return (USB_ERR_INVAL); + } frame_num = sc->sc_fmtgrp[fmtidx].frame_num; if (frame_num >= UVIDEO_MAX_FRAME) { device_printf(sc->sc_dev, @@ -1803,7 +1817,7 @@ uvideo_vs_parse_desc_frame_max_rate(struct uvideo_softc *sc, fbuf_size /= 8 * 10000000; if (fbuf_size > sc->sc_max_fbuf_size) - sc->sc_max_fbuf_size = fbuf_size; + sc->sc_max_fbuf_size = (uint32_t)fbuf_size; if (++sc->sc_fmtgrp[fmtidx].frame_num == sc->sc_fmtgrp[fmtidx].format->bNumFrameDescriptors) @@ -2240,7 +2254,7 @@ uvideo_vs_alloc_frame(struct uvideo_softc *sc) fb->buf_size = UGETDW(sc->sc_desc_probe.dwMaxVideoFrameSize); - if (sc->sc_max_fbuf_size < fb->buf_size && sc->sc_mmap_flag == 0) { + if (sc->sc_max_fbuf_size < fb->buf_size) { device_printf(sc->sc_dev, "software video buffer too small!\n"); return (USB_ERR_NOMEM); @@ -2948,47 +2962,58 @@ uvideo_cdev_read(struct cdev *dev, struct uio *uio, int ioflag) return (EIO); /* Start streaming in read mode if not already running */ - if (sc->sc_vidmode == VIDMODE_NONE) { - if (devfs_get_cdevpriv((void **)&priv) != 0 || priv == NULL) - return (EINVAL); - sc->sc_mmap_flag = 0; - sc->sc_vidmode = VIDMODE_READ; + mtx_lock(&sc->sc_mtx); + if (sc->sc_vidmode != VIDMODE_NONE) { + mtx_unlock(&sc->sc_mtx); + if (sc->sc_vidmode != VIDMODE_READ) + return (EBUSY); + goto read_wait; + } + if (devfs_get_cdevpriv((void **)&priv) != 0 || priv == NULL) { + mtx_unlock(&sc->sc_mtx); + return (EINVAL); + } + sc->sc_mmap_flag = 0; + sc->sc_vidmode = VIDMODE_READ; + mtx_unlock(&sc->sc_mtx); - error = uvideo_vs_init(sc); - if (error != USB_ERR_NORMAL_COMPLETION) { - sc->sc_vidmode = VIDMODE_NONE; - return (EIO); - } + error = uvideo_vs_init(sc); + if (error != USB_ERR_NORMAL_COMPLETION) { + mtx_lock(&sc->sc_mtx); + sc->sc_vidmode = VIDMODE_NONE; + mtx_unlock(&sc->sc_mtx); + return (EIO); + } - /* Allocate a separate read buffer for frame delivery */ - sc->sc_fbufferlen = sc->sc_max_fbuf_size; - if (sc->sc_fbufferlen == 0) - sc->sc_fbufferlen = - UGETDW(sc->sc_desc_probe.dwMaxVideoFrameSize); + /* Allocate a separate read buffer for frame delivery */ + sc->sc_fbufferlen = sc->sc_max_fbuf_size; + if (sc->sc_fbufferlen == 0) + sc->sc_fbufferlen = + UGETDW(sc->sc_desc_probe.dwMaxVideoFrameSize); + if (sc->sc_fbuffer == NULL) { + sc->sc_fbuffer = malloc(sc->sc_fbufferlen, M_USBDEV, + M_WAITOK | M_ZERO); if (sc->sc_fbuffer == NULL) { - sc->sc_fbuffer = malloc(sc->sc_fbufferlen, M_USBDEV, - M_WAITOK | M_ZERO); - if (sc->sc_fbuffer == NULL) { - sc->sc_vidmode = VIDMODE_NONE; - return (ENOMEM); - } + mtx_lock(&sc->sc_mtx); + sc->sc_vidmode = VIDMODE_NONE; + mtx_unlock(&sc->sc_mtx); + return (ENOMEM); } + } - mtx_lock(&sc->sc_mtx); - sc->sc_streaming = 1; - priv->streaming = 1; - if (sc->sc_vs_cur->bulk_endpoint) - usbd_transfer_start(sc->sc_xfer[0]); - else { - int i; - for (i = 0; i < UVIDEO_IXFERS; i++) - usbd_transfer_start(sc->sc_xfer[i]); - } - mtx_unlock(&sc->sc_mtx); + mtx_lock(&sc->sc_mtx); + sc->sc_streaming = 1; + priv->streaming = 1; + if (sc->sc_vs_cur->bulk_endpoint) + usbd_transfer_start(sc->sc_xfer[0]); + else { + int i; + for (i = 0; i < UVIDEO_IXFERS; i++) + usbd_transfer_start(sc->sc_xfer[i]); } + mtx_unlock(&sc->sc_mtx); - if (sc->sc_vidmode != VIDMODE_READ) - return (EBUSY); +read_wait: /* Wait for a frame */ mtx_lock(&sc->sc_mtx); @@ -3181,7 +3206,9 @@ uvideo_cdev_mmap_single(struct cdev *dev, vm_ooffset_t *offset, vm_object_reference(sc->sc_mmap_object); *object = sc->sc_mmap_object; + mtx_lock(&sc->sc_mtx); sc->sc_mmap_flag = 1; + mtx_unlock(&sc->sc_mtx); return (0); } @@ -3430,7 +3457,7 @@ uvideo_s_fmt(struct uvideo_softc *sc, struct v4l2_format *fmt) * and commit controls with the device would disrupt the active USB * transfers. V4L2 mandates EBUSY in this case. */ mtx_lock(&sc->sc_mtx); - if (sc->sc_streaming) { + if (sc->sc_streaming || sc->sc_mmap_count > 0) { mtx_unlock(&sc->sc_mtx); return (EBUSY); } @@ -3520,7 +3547,7 @@ uvideo_s_parm(struct uvideo_softc *sc, struct v4l2_streamparm *parm) /* Reject parameter changes while streaming for the same reason as * S_FMT: they re-negotiate with the device. */ mtx_lock(&sc->sc_mtx); - if (sc->sc_streaming) { + if (sc->sc_streaming || sc->sc_mmap_count > 0) { mtx_unlock(&sc->sc_mtx); return (EBUSY); } @@ -3632,8 +3659,7 @@ uvideo_reqbufs(struct uvideo_softc *sc, struct v4l2_requestbuffers *rb) sc->sc_mmap_count = rb->count; buf_size = UGETDW(sc->sc_desc_probe.dwMaxVideoFrameSize); - if (buf_size == 0 || sc->sc_max_fbuf_size <= 0 || - buf_size > (u_int)sc->sc_max_fbuf_size) + if (buf_size == 0 || buf_size > sc->sc_max_fbuf_size) return (EINVAL); if (SIZE_MAX / sc->sc_mmap_count < buf_size) return (EINVAL); From nobody Wed Jul 22 15:52:08 2026 X-Original-To: dev-commits-src-main@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 4h4zK60Pf3z6mHRy; Wed, 22 Jul 2026 15:52:10 +0000 (UTC) (envelope-from vishwin@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (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 "smtp.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h4zK56cbgz3qMC; Wed, 22 Jul 2026 15:52:09 +0000 (UTC) (envelope-from vishwin@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784735530; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=uqDgtJ6xK6yGIF1dRlOrCYDNoCkHxY+K+a7Kgr/HTV0=; b=lueEWHYGluL/PXnKCTUa9QBaV/uRaTRYEgndMbcbLR4gd2jo1r8hYY7lXUrtvupa96zI2y sK/aXP5NU/BYa4oX/TTLSzFDTMpvT2ZnoD2b4ABrxd/qBUxzr571nbsP5O01d48NfHYDfN OXEY030QaPPV3o4PWpemSTQ37TyTavMv0N9VtHMVOIH8MWFptFfJ0XANxU/mYfVLJScA++ hhL2kiPcJDiL+ddia5fXK/b8qBMV9HABr2Xpq6CmLdQUoaQoqcSxZxR+j/GGJ69RDh2xO2 WlCHtQKMYR+5BiwdXlGX9s5dZiTZU/K4K0oXLAPLhJY61QdLbqlTP3+pyg85ng== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784735530; a=rsa-sha256; cv=none; b=bEdlGIDaS0cOjCx7KdCoOpCWGJfQkdoljMJf7oIjOgjNOmM041jkn4ZQskmR67bcMTsQbn sARLFJB++wkSYNOoGmdr9T/qZ02p9uIFl1O4jYHnDeCnDsbtDFtF6IX24sATVp6BLyAMEx ASzH+qgZHkQ8CsWru83OFWGK6/0KX6Zdf9u/SN68xCJjcVaO7+doWiihcanPkKmW0Rjr+F vcIQ6WHazoDpHQNtF92HdXwkDMXm7hp0LPyMlqGEOxVF/JnRCzvmA0jQICFn7nyAA8vZpZ YHWhFpR2RoeMRQ+7s6PwQHADZ+MzBIHbBbpFVNiuw6kPMgD2637rf0H+tewUsg== 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=1784735530; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=uqDgtJ6xK6yGIF1dRlOrCYDNoCkHxY+K+a7Kgr/HTV0=; b=W5XjzoEErT6A8RT3Apz4ID7QdjA1vczOyqztYJgYPmSX5njVCt5aEaxgdOCJgNK3mknpfT VKuSyjQVGkJkJ1HmAaSQv1ASHT9K6/oCHQ8gNSNhA/pesdWHFGCqLiR5AgigPbQyanzG8M aVAuQj8Pfjlr0bnrl6VgaBV83N8EZAg1AE5Xp3OudkH4Lp3Y7AwuyaRnFMSzfNU4855cxd nMMaxJfJZCTh3Te+TPRO8mjtTPBhNUUYnmC8+JIAjsd6AurUNZb6WQeiUKCaCeTogbozGu 40ldcBeSA+aYmlm/ExHH7rQbeO7CnsjKTpxfydsVUXTbS/D6AMHFgJV5ybvGZg== Received: from [IPV6:2601:98a:f01:42f0:b76f:46b2:d87f:7018] (unknown [IPv6:2601:98a:f01:42f0:b76f:46b2:d87f:7018]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: vishwin/mail) by smtp.freebsd.org (Postfix) with ESMTPSA id 4h4zK53gtSz15VS; Wed, 22 Jul 2026 15:52:09 +0000 (UTC) (envelope-from vishwin@freebsd.org) Message-ID: <133477f8-9530-4ce7-a97d-796972af53e9@freebsd.org> Date: Wed, 22 Jul 2026 11:52:08 -0400 List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: git: 599a4d6beff0 - main - uvideo: use size_t for sc_mmap_count and loop index in reqbufs To: Baptiste Daroussin , src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org References: <6a60ddf4.321d8.75000217@gitrepo.freebsd.org> Content-Language: en-GB From: Charlie Li Autocrypt: addr=vishwin@freebsd.org; keydata= xjMEaEicoBYJKwYBBAHaRw8BAQdAZBuydpjFLGem4uRJPWaYMXX2e+BN1jDhbD3tcqbxhdfN MkNoYXJsaWUgTGkgKEZyZWVCU0QgUHJvamVjdCkgPHZpc2h3aW5ARnJlZUJTRC5vcmc+wpkE ExYKAEEWIQTHxcCLnAXo3rFg6k7P+1cn7slqBAUCaEicoAIbAwUJCWYBgAULCQgHAgIiAgYV CgkICwIEFgIDAQIeBwIXgAAKCRDP+1cn7slqBM/bAP9bhA4e0LxJYFYJlftZM5WHrMSPpUe6 G2pVqmQWTQ0EZQEA0PNryfH3qRWWPSI8mFNRnG24hi5/aXFqCnHj1tcJ9Q/OOARoSJygEgor BgEEAZdVAQUBAQdAUT4TzYFmV6ueIGwjX0N+445KZV6ns1Wiw67QMsJZxHkDAQgHwn4EGBYK ACYWIQTHxcCLnAXo3rFg6k7P+1cn7slqBAUCaEicoAIbDAUJCWYBgAAKCRDP+1cn7slqBPO/ AQCPuGiyyfJClICRs/ToG0MsT8YcPdBygzuUIIeGpkjJpgEA7AoFCQ0Y28Y3hIDFn2k9PH3B nGWL3g05W0ds2qoj+gQ= Organization: FreeBSD Project In-Reply-To: <6a60ddf4.321d8.75000217@gitrepo.freebsd.org> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------s4kqiDgUuWP4ceusyyEuBcWX" This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------s4kqiDgUuWP4ceusyyEuBcWX Content-Type: multipart/mixed; boundary="------------sTY4hRa8h03onnDVeQmXV4G6"; protected-headers="v1"; hp="clear" Message-ID: <133477f8-9530-4ce7-a97d-796972af53e9@freebsd.org> Date: Wed, 22 Jul 2026 11:52:08 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: git: 599a4d6beff0 - main - uvideo: use size_t for sc_mmap_count and loop index in reqbufs To: Baptiste Daroussin , src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org References: <6a60ddf4.321d8.75000217@gitrepo.freebsd.org> Content-Language: en-GB From: Charlie Li Autocrypt: addr=vishwin@freebsd.org; keydata= xjMEaEicoBYJKwYBBAHaRw8BAQdAZBuydpjFLGem4uRJPWaYMXX2e+BN1jDhbD3tcqbxhdfN MkNoYXJsaWUgTGkgKEZyZWVCU0QgUHJvamVjdCkgPHZpc2h3aW5ARnJlZUJTRC5vcmc+wpkE ExYKAEEWIQTHxcCLnAXo3rFg6k7P+1cn7slqBAUCaEicoAIbAwUJCWYBgAULCQgHAgIiAgYV CgkICwIEFgIDAQIeBwIXgAAKCRDP+1cn7slqBM/bAP9bhA4e0LxJYFYJlftZM5WHrMSPpUe6 G2pVqmQWTQ0EZQEA0PNryfH3qRWWPSI8mFNRnG24hi5/aXFqCnHj1tcJ9Q/OOARoSJygEgor BgEEAZdVAQUBAQdAUT4TzYFmV6ueIGwjX0N+445KZV6ns1Wiw67QMsJZxHkDAQgHwn4EGBYK ACYWIQTHxcCLnAXo3rFg6k7P+1cn7slqBAUCaEicoAIbDAUJCWYBgAAKCRDP+1cn7slqBPO/ AQCPuGiyyfJClICRs/ToG0MsT8YcPdBygzuUIIeGpkjJpgEA7AoFCQ0Y28Y3hIDFn2k9PH3B nGWL3g05W0ds2qoj+gQ= Organization: FreeBSD Project In-Reply-To: <6a60ddf4.321d8.75000217@gitrepo.freebsd.org> --------------sTY4hRa8h03onnDVeQmXV4G6 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 QmFwdGlzdGUgRGFyb3Vzc2luIHdyb3RlOg0KPiBUaGUgYnJhbmNoIG1haW4gaGFzIGJlZW4g dXBkYXRlZCBieSBiYXB0Og0KPiANCj4gVVJMOiBodHRwczovL2NnaXQuRnJlZUJTRC5vcmcv c3JjL2NvbW1pdC8/aWQ9NTk5YTRkNmJlZmYwN2Y5M2YwMTllMGFmZjkxMDVhOGU2NDJhNjAw Zg0KPiANCj4gY29tbWl0IDU5OWE0ZDZiZWZmMDdmOTNmMDE5ZTBhZmY5MTA1YThlNjQyYTYw MGYNCj4gQXV0aG9yOiAgICAgQmFwdGlzdGUgRGFyb3Vzc2luIDxiYXB0QEZyZWVCU0Qub3Jn Pg0KPiBBdXRob3JEYXRlOiAyMDI2LTA3LTIyIDExOjUzOjM0ICswMDAwDQo+IENvbW1pdDog ICAgIEJhcHRpc3RlIERhcm91c3NpbiA8YmFwdEBGcmVlQlNELm9yZz4NCj4gQ29tbWl0RGF0 ZTogMjAyNi0wNy0yMiAxNToxMDo1OCArMDAwMA0KPiANCj4gICAgICB1dmlkZW86IHVzZSBz aXplX3QgZm9yIHNjX21tYXBfY291bnQgYW5kIGxvb3AgaW5kZXggaW4gcmVxYnVmcw0KPiAt LS0NCj4gICBzeXMvZGV2L3VzYi92aWRlby91dmlkZW8uYyB8IDExICsrKysrLS0tLS0tDQo+ ICAgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkNCj4g DQo+IGRpZmYgLS1naXQgYS9zeXMvZGV2L3VzYi92aWRlby91dmlkZW8uYyBiL3N5cy9kZXYv dXNiL3ZpZGVvL3V2aWRlby5jDQo+IGluZGV4IDU3ZDMxZDJiNTI4Ni4uYjMxYjNmZTI5NGNk IDEwMDY0NA0KPiAtLS0gYS9zeXMvZGV2L3VzYi92aWRlby91dmlkZW8uYw0KPiArKysgYi9z eXMvZGV2L3VzYi92aWRlby91dmlkZW8uYw0KPiBAQCAtMjQ2LDcgKzI0Niw3IEBAIHN0cnVj dCB1dmlkZW9fc29mdGMgew0KPiAgIAl2bV9vZmZzZXRfdAkJc2NfbW1hcF9rdmE7DQo+ICAg CWludAkJCXNjX21tYXBfYnVmZmVyX2lkeDsNCj4gICAJcV9tbWFwCQkJc2NfbW1hcF9xOw0K PiAtCWludAkJCXNjX21tYXBfY291bnQ7DQo+ICsJc2l6ZV90CQkJc2NfbW1hcF9jb3VudDsN Cj4gICAJaW50CQkJc2NfbW1hcF9mbGFnOw0KPiAgIAl2bV9vYmplY3RfdAkJCXNjX21tYXBf b2JqZWN0Ow0KPiAgIA0KPiBAQCAtMzYwOSw3ICszNjA5LDcgQEAgdXZpZGVvX2dfaW5wdXQo c3RydWN0IHV2aWRlb19zb2Z0YyAqc2MsIGludCAqaW5wdXQpDQo+ICAgc3RhdGljIGludA0K PiAgIHV2aWRlb19yZXFidWZzKHN0cnVjdCB1dmlkZW9fc29mdGMgKnNjLCBzdHJ1Y3QgdjRs Ml9yZXF1ZXN0YnVmZmVycyAqcmIpDQo+ICAgew0KPiAtCWludCBpOw0KPiArCXNpemVfdCBp Ow0KPiAgIAl1aW50MzJfdCBidWZfc2l6ZTsNCj4gICAJc2l6ZV90IGJ1Zl9zaXplX3RvdGFs Ow0KPiAgIAl2bV9vYmplY3RfdCBvYmo7DQo+IEBAIC0zNjM3LDcgKzM2MzcsNyBAQCB1dmlk ZW9fcmVxYnVmcyhzdHJ1Y3QgdXZpZGVvX3NvZnRjICpzYywgc3RydWN0IHY0bDJfcmVxdWVz dGJ1ZmZlcnMgKnJiKQ0KPiAgIAkJcmV0dXJuIChFSU5WQUwpOw0KPiAgIAlpZiAoU0laRV9N QVggLyBzYy0+c2NfbW1hcF9jb3VudCA8IGJ1Zl9zaXplKQ0KPiAgIAkJcmV0dXJuIChFSU5W QUwpOw0KPiAtCWJ1Zl9zaXplX3RvdGFsID0gKHNpemVfdClzYy0+c2NfbW1hcF9jb3VudCAq IGJ1Zl9zaXplOw0KPiArCWJ1Zl9zaXplX3RvdGFsID0gc2MtPnNjX21tYXBfY291bnQgKiBi dWZfc2l6ZTsNCj4gICAJYnVmX3NpemVfdG90YWwgPSByb3VuZF9wYWdlKGJ1Zl9zaXplX3Rv dGFsKTsNCj4gICANCj4gICAJLyoNCj4gQEAgLTM2ODQsMTEgKzM2ODQsMTAgQEAgdXZpZGVv X3JlcWJ1ZnMoc3RydWN0IHV2aWRlb19zb2Z0YyAqc2MsIHN0cnVjdCB2NGwyX3JlcXVlc3Ri dWZmZXJzICpyYikNCj4gICAJICAgIGJ1Zl9zaXplX3RvdGFsLCAodWludG1heF90KWt2YSk7 DQo+ICAgDQo+ICAgCWZvciAoaSA9IDA7IGkgPCBzYy0+c2NfbW1hcF9jb3VudDsgaSsrKSB7 DQo+IC0JCXNjLT5zY19tbWFwW2ldLmJ1ZiA9IHNjLT5zY19tbWFwX2J1ZmZlciArDQo+IC0J CSAgICAoKHNpemVfdClpICogYnVmX3NpemUpOw0KPiArCQlzYy0+c2NfbW1hcFtpXS5idWYg PSBzYy0+c2NfbW1hcF9idWZmZXIgKyAoaSAqIGJ1Zl9zaXplKTsNCj4gICANCj4gICAJCXNj LT5zY19tbWFwW2ldLnY0bDJfYnVmLmluZGV4ID0gaTsNCj4gLQkJc2MtPnNjX21tYXBbaV0u djRsMl9idWYubS5vZmZzZXQgPSAoc2l6ZV90KWkgKiBidWZfc2l6ZTsNCj4gKwkJc2MtPnNj X21tYXBbaV0udjRsMl9idWYubS5vZmZzZXQgPSBpICogYnVmX3NpemU7DQo+ICAgCQlzYy0+ c2NfbW1hcFtpXS52NGwyX2J1Zi5sZW5ndGggPSBidWZfc2l6ZTsNCj4gICAJCXNjLT5zY19t bWFwW2ldLnY0bDJfYnVmLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7DQo+ ICAgCQlzYy0+c2NfbW1hcFtpXS52NGwyX2J1Zi5zZXF1ZW5jZSA9IDA7DQo+IA0KPiANCi91 c3Ivc3JjL3N5cy9kZXYvdXNiL3ZpZGVvL3V2aWRlby5jOjM3MTA6NjogZXJyb3I6IGZvcm1h dCBzcGVjaWZpZXMgdHlwZSANCidpbnQnIGJ1dCB0aGUgYXJndW1lbnQgaGFzIHR5cGUgJ3Np emVfdCcgKGFrYSAndW5zaWduZWQgbG9uZycpIA0KWy1XZXJyb3IsLVdmb3JtYXRdDQogIDM3 MDkgfCAgICAgICAgIERQUklOVEZOKDEsICJhbGxvY2F0ZWQgJWQgYnl0ZXMgbW1hcCBidWZm ZXIgYXQga3ZhICUjanhcbiIsDQogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfn4NCiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlenUN CiAgMzcxMCB8ICAgICAgICAgICAgIGJ1Zl9zaXplX3RvdGFsLCAodWludG1heF90KWt2YSk7 DQogICAgICAgfCAgICAgICAgICAgICBefn5+fn5+fn5+fn5+fg0KL3Vzci9zcmMvc3lzL2Rl di91c2IvdXNiX2RlYnVnLmg6NDI6MjE6IG5vdGU6IGV4cGFuZGVkIGZyb20gbWFjcm8gJ0RQ UklOVEZOJw0KICAgIDQxIHwgICAgIHByaW50ZigiJXM6ICIgZm10LCAgICAgICAgICAgICAg ICAgICAgICAgICAgXA0KICAgICAgIHwgICAgICAgICAgICAgICAgICAgfn5+DQogICAgNDIg fCAgICAgICAgICAgIF9fRlVOQ1RJT05fXyAsIyNfX1ZBX0FSR1NfXyk7ICAgICAgICBcDQog ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+fg0KMSBlcnJv ciBnZW5lcmF0ZWQuDQoqKiogW3V2aWRlby5vXSBFcnJvciBjb2RlIDENCg0KLS0gDQpDaGFy bGllIExpDQouLi5ub3BlLCBzdGlsbCBkb24ndCBoYXZlIGFuIGV4aXQgbGluZS4NCg0K --------------sTY4hRa8h03onnDVeQmXV4G6-- --------------s4kqiDgUuWP4ceusyyEuBcWX Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- wnsEABYIACMWIQTHxcCLnAXo3rFg6k7P+1cn7slqBAUCamDnKAUDAAAAAAAKCRDP+1cn7slqBFUv AQCmJPOKO8uiX5210nIMkTnZEl7m6iHm8ICVHRsQ+Du8twD+KPFJlIjPN+E5aR2yLP/7uIZHzyIV BPo/c86RvXK/dgE= =nelI -----END PGP SIGNATURE----- --------------s4kqiDgUuWP4ceusyyEuBcWX-- From nobody Wed Jul 22 16:38:41 2026 X-Original-To: dev-commits-src-main@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 4h50Lp095Qz6lLgs for ; Wed, 22 Jul 2026 16:38:42 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h50Ln6mVgz3w0L for ; Wed, 22 Jul 2026 16:38:41 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784738321; 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=QJH7MR0f+MTuPrBdG1fEB1SQpQKVnMLr/m5DG3sOwr4=; b=PFR1rrGzrBcTkqsLnFEMtAQvXQhObD42WWCW2PlztS8geU0NShFayOXArmT1Py0TKvA0/E PU4Csku1FRJDo9ShJgpsJpHOuLgwjJeEkQcTFJlxVR/rBszTKaiEtzdcOuNqXaW7lTJaEl NOqTrwvJJJdcMeqjyfPb6d0sKF52tA4jNogpZFd2SlsdshFNsrqVpWinX4R3Ip98QV2Tb4 NywI15c+aRvjLepWzQP0/9ubbCjXaZSTb6FtuzqzBT+EF/0kFe+lnPt4dgcn6s3Zu6B6ty Y3wPf0On4mfBS9x+xYtDhEO+M9mcstECmJiwCylfEqobCCJthTtGRGWrKRnBXA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784738321; a=rsa-sha256; cv=none; b=B/7L04LN47zNXzfULv2XywRDqEND778QCU52PZXSUQB3CCIuOetW8cx99RF8a+q5swz/jQ Tkh4nT5h6kHaQoWLKtb2XBzE+doQs24674eubu0sXYYeUCI5ZIOVpxQTCJn+DCrDFQ3+DV tX7rp3D4r0cOSlJTteS96y32EoiUDhpjLxkH/gy0gaMdumt4GDfTPrfSCAnmKTId8FjZhe sAHS3RicB2YpKnDDRD8HzVsjmXjgDS5GsqccBAaLZeItO1CyeecvQwoERnMEn4Sp83oFm4 OZFdDariooEiuEMTy9oG7Uyr4CQyUSLidzotnSB+CC467P0UaxH8rSvQ32fm9A== 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=1784738321; 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=QJH7MR0f+MTuPrBdG1fEB1SQpQKVnMLr/m5DG3sOwr4=; b=CbyBYQQ4C3nR1qEWOYAvMvN+ZmyZbicGLX+oDuPOpIFU9XRelAnNO13KNuS5uyB64H4KRm dA0yb5ty3EsLuc/A5F2+GC6RyOvkR50zVpcf/aZPfakHX3ch81eYuuXJ5so1jDYP8ui0QS Twhf8wI9xHXlK2bbLdjHrC+GdwunzXg2j2Jjy5FQt2I94v/MxR2WM4LRALG8i/uOdrKE0y LOd+1E8UkFlyzISExA4yccQ3htvb1UWKOOTVgXI59UjqSqK9ppHyIibNe1xwdIwf8XcUGF nsPr8d5VgNzBsNL+gs8xAE0ovbieK6LIk5PgdbfyfXt0vax76I55A2V9WH4pLw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h50Ln585Rz9QX for ; Wed, 22 Jul 2026 16:38:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3ce1d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 16:38:41 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: ba567508718a - main - uvideo: fix printf type List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ba567508718a173e74754d1a010de2f94edd5603 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 16:38:41 +0000 Message-Id: <6a60f211.3ce1d.ba47ee5@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=ba567508718a173e74754d1a010de2f94edd5603 commit ba567508718a173e74754d1a010de2f94edd5603 Author: Baptiste Daroussin AuthorDate: 2026-07-22 16:37:52 +0000 Commit: Baptiste Daroussin CommitDate: 2026-07-22 16:37:52 +0000 uvideo: fix printf type Reported by: vishwin --- sys/dev/usb/video/uvideo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index a00fcc5a7395..7c7268454ae2 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -3706,7 +3706,7 @@ uvideo_reqbufs(struct uvideo_softc *sc, struct v4l2_requestbuffers *rb) sc->sc_mmap_kva = kva; sc->sc_mmap_buffer_size = buf_size_total; - DPRINTFN(1, "allocated %d bytes mmap buffer at kva %#jx\n", + DPRINTFN(1, "allocated %zu bytes mmap buffer at kva %#jx\n", buf_size_total, (uintmax_t)kva); for (i = 0; i < sc->sc_mmap_count; i++) { From nobody Wed Jul 22 17:05:50 2026 X-Original-To: dev-commits-src-main@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 4h50y62Dldz6lNX5 for ; Wed, 22 Jul 2026 17:05:50 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h50y61KK9z411Q for ; Wed, 22 Jul 2026 17:05:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784739950; 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=5+x2MUhNpGDeurnXkObYhy6pAhRDM6x4bVsueUlBswU=; b=NXW2OqLEqBoz2ZV8iAb3p+8ZPAfQRjUgZwitla9BrXEXfWj+2pkCHVCHWmN5WsMDt7C/UB J1wK6IvVMpdz747dvwOm+c5TJXpm5io2BGoslBBWDt8mk46+14HNi60Vm+3sn7gj3w0SI0 MOr2ND0xgTe4e9+XAsu7ElgEh+YsWbcp0t229IytP+4BBxNl1trphrFD9shlZg2DR6oHfh RC5ZapaicvJxwhShdgXY+jLQ5Q0RJSF4BcQV7VNhrR+bZ2DJr/QjaQn8VPTlwmMnYSVVJy KFCP0h8cn8mIn8dL14gXXe2LqhThre1UCT8TkQ0H2uW/y7vE5OhqRqpujkrrcw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784739950; a=rsa-sha256; cv=none; b=EfWLOZ2YvpWUGD0yocJJn+PtyhHkamGimI3qQPdHmtjM2Tm71tRhIQsQQ40ClLCipVMftA 8QiJ3aqvhBL+swvx2atcQ5QRcIgSVCIK6l6F1tREnPteB30C9YSF8osQ6dvHSRkFLLh8s6 NbYuNjOI2T5ZIO8B+0JNqRs4c4nKSX/7xlk+YcGJZpGglVYwjR2MMyVMukfrCYa1MNQkVR n6HA2UFKf6E1ajXHzqIOnqR4ak/erhECM6y7AcKkzrF8sxHlyy253hOMgx53feiRrDrlJo /IFaUuOdNkuxJsTcxa+WO2QEq0GytrwwdX/Rzos4RnjGq3j4UX5gDOe/2me0ew== 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=1784739950; 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=5+x2MUhNpGDeurnXkObYhy6pAhRDM6x4bVsueUlBswU=; b=Usun+2zzeaLhiR77Kh+TzcuxOi4U7s/cYUB/O1X4oRmDYsnU7JXVxpoETM2AJusECwHih1 Imz0CPQyPwnoqnFfIa+4FTu/3YY+PpZJjnWO13iu9Dtrtj8EKB0ClZ+dbrArzC2NMJwesx GrJTGaV+SWbI1rjsfAxwdPnvTmJtnMfRLQa4YlRoxmlu4HJ4y39sOmRkUoYezTm/iqhICh PQyeIgQ6GvEPnzd6lAEoAC2FyVHmT7lugpOzqt6x7WT5spy5I7TG9np+b9kev+C+ZrNYiB LppYRfFFFkJmF5kiizkjF2CHLwq19e7sj7Cmx8sAJvh4oIhgWuzP/DFaqkziDg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h50y60QG1zC1y for ; Wed, 22 Jul 2026 17:05:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3edaa by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 17:05:50 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Pouria Mousavizadeh Tehrani Subject: git: 91f84e661c23 - main - if_geneve: Ensure there is no mbuf leak if EAFNOSUPPORT List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pouria X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 91f84e661c2377d2265a04c05aabdf51a98cd5c0 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 17:05:50 +0000 Message-Id: <6a60f86e.3edaa.57d117f7@gitrepo.freebsd.org> The branch main has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=91f84e661c2377d2265a04c05aabdf51a98cd5c0 commit 91f84e661c2377d2265a04c05aabdf51a98cd5c0 Author: Pouria Mousavizadeh Tehrani AuthorDate: 2026-07-22 17:00:17 +0000 Commit: Pouria Mousavizadeh Tehrani CommitDate: 2026-07-22 17:02:48 +0000 if_geneve: Ensure there is no mbuf leak if EAFNOSUPPORT In practice, this is not possible, but we are adding it just to be safe. Reported by: markj --- sys/net/if_geneve.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/net/if_geneve.c b/sys/net/if_geneve.c index 04873f0b7964..a8947bf4bd52 100644 --- a/sys/net/if_geneve.c +++ b/sys/net/if_geneve.c @@ -2841,6 +2841,7 @@ geneve_transmit(struct ifnet *ifp, struct mbuf *m) break; #endif default: + m_freem(m); error = EAFNOSUPPORT; } From nobody Wed Jul 22 19:33:53 2026 X-Original-To: dev-commits-src-main@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 4h54Dx5zgCz6lYpY for ; Wed, 22 Jul 2026 19:33:53 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h54Dx5PnCz4JKy for ; Wed, 22 Jul 2026 19:33:53 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784748833; 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=3nGEIN4Ktm20IHgJaFdz8lZecFmpTglqRFHdI06q5E0=; b=nhRjTODFBpWeAY6gptMfgHSgUMqpwlt2PQ6+xU8NE94D57QCjjTVVAy2QOoWJjty0vEwgg rkacjsqEhzVXI1505rozrE3IhrTp9wRZvZB9JNpUJmO17JjEyOz36/cVXAS20pTBYJHzsO fAhLahxbfec1/lQ7MnW4rg3IpiBc4Gn7058XGS2iYWG2SHEv0w8Op0MxrNdA93K2p7wyA2 7yc0GeR3vnXaXGlXRKommwZyxuUKLh6aNRTL5+HNSlBhWhz8Pyvb25sDBjCYl7vshJiOY3 PfrU1rGrzBTFFaVTt2TiSGPxy4DvjRKlJo83DAsVdW1Tm99Oj3L+PsuiHKXaQA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784748833; a=rsa-sha256; cv=none; b=VWM8h9kvS4fYlYpqj+kCh1PYUzb+hjWIH2t7RllP1A7pDLEb6iCAd/oDaeGcOsyNyW/4VA EGYjUfvxpRztN8ZYBpe3CJPKTN8V/VP6uuEqoPh+/EFbktssZHmOI1iAHQSercFV9z/SkS jxMlXAGNq0b0hMb8VKESN/xNL6omnZB5s5HR9YH5Heq0yTGvzsO9UQ5xoz7CtsKMBgZAHy Wv3G8nZqkBb/MIZViVM2lXGYO8WB6eH6tcfdrFgQ8El5Lan0yr4e311E80ppGd49UL19jB fdVm5LXaOAL9MU18R6OhmrpMPO00T8OVfZBFqowQaRKQYcEHfdAVDfc7J1whyQ== 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=1784748833; 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=3nGEIN4Ktm20IHgJaFdz8lZecFmpTglqRFHdI06q5E0=; b=KXpEomrGL8NqxkIu14sreNwi3j9BahV+RX5P9gk+RsNiNN7/eL8Soqvv2cLArk56Q1xAMU yRB5gligqYG7VrM6drOtplcJCwIZjccYjAostdh7gHKmoEC0tcJLc/1wGPzHB52bq3OtQe 7zl/lvQltE+s5v7JKuIWhNoSBD/fX5TURgu05PC2v+as2trW0U12eYdl2S4w8gau9m2nxJ lfEYZdXMhRUCFuoqV7qpLo41o28f//MpeBXXoz6MR/MJ8o0jqnbiTCQAkoGjNOucKS8ZyK I2QQ2QWcTtuNVbxJNq83jdxipxszctIY2qnPdxqGIU0la9PL+0r5SLetYH5oBw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h54Dx4CSzzYgj for ; Wed, 22 Jul 2026 19:33:53 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1f0c2 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Jul 2026 19:33:53 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Enji Cooper Subject: git: 4db3872aabc3 - main - Only build secure/libexec/ssh-sk-helper if MK_USB == no List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: ngie X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4db3872aabc33088cf180599c5eaa23b6f58e6d1 Auto-Submitted: auto-generated Date: Wed, 22 Jul 2026 19:33:53 +0000 Message-Id: <6a611b21.1f0c2.2c3b5692@gitrepo.freebsd.org> The branch main has been updated by ngie: URL: https://cgit.FreeBSD.org/src/commit/?id=4db3872aabc33088cf180599c5eaa23b6f58e6d1 commit 4db3872aabc33088cf180599c5eaa23b6f58e6d1 Author: Enji Cooper AuthorDate: 2026-07-22 19:33:44 +0000 Commit: Enji Cooper CommitDate: 2026-07-22 19:33:44 +0000 Only build secure/libexec/ssh-sk-helper if MK_USB == no The ssh-sk-helper utility only functions if/when MK_USB == yes. Installing it on systems where MK_USB == no doesn't make sense. Differential Revision: https://reviews.freebsd.org/D58246 --- secure/libexec/Makefile | 4 +++- secure/libexec/ssh-sk-helper/Makefile | 5 +---- tools/build/mk/OptionalObsoleteFiles.inc | 2 ++ 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/secure/libexec/Makefile b/secure/libexec/Makefile index 7f239ccc7fee..6f74d3699912 100644 --- a/secure/libexec/Makefile +++ b/secure/libexec/Makefile @@ -2,8 +2,10 @@ SUBDIR= .if ${MK_OPENSSH} != "no" -SUBDIR+=sftp-server ssh-keysign ssh-pkcs11-helper ssh-sk-helper sshd-session +SUBDIR+=sftp-server ssh-keysign ssh-pkcs11-helper sshd-session SUBDIR+=sshd-auth + +SUBDIR.${MK_USB}+= ssh-sk-helper .endif SUBDIR.${MK_TESTS}+= tests diff --git a/secure/libexec/ssh-sk-helper/Makefile b/secure/libexec/ssh-sk-helper/Makefile index 837599df80b0..4b708e898dd3 100644 --- a/secure/libexec/ssh-sk-helper/Makefile +++ b/secure/libexec/ssh-sk-helper/Makefile @@ -6,10 +6,7 @@ SRCS= ssh-sk-helper.c ssh-sk.c sk-usbhid.c ssherr-nolibcrypto.c MAN= ssh-sk-helper.8 CFLAGS+=-I${SRCTOP}/contrib/libfido2/src -LIBADD= ssh crypto z -.if ${MK_USB} != "no" -LIBADD+= fido2 cbor -.endif +LIBADD= ssh crypto z fido2 cbor .include diff --git a/tools/build/mk/OptionalObsoleteFiles.inc b/tools/build/mk/OptionalObsoleteFiles.inc index 842ecec362a6..b595e863e5f5 100644 --- a/tools/build/mk/OptionalObsoleteFiles.inc +++ b/tools/build/mk/OptionalObsoleteFiles.inc @@ -8858,6 +8858,7 @@ OLD_LIBS+=usr/lib/libusbhid.so.4 OLD_FILES+=usr/libdata/pkgconfig/libusb-0.1.pc OLD_FILES+=usr/libdata/pkgconfig/libusb-1.0.pc OLD_FILES+=usr/libdata/pkgconfig/libusb-2.0.pc +OLD_FILES+=usr/libexec/ssh-sk-helper OLD_FILES+=usr/sbin/uathload OLD_FILES+=usr/sbin/uhsoctl OLD_FILES+=usr/sbin/usbconfig @@ -9132,6 +9133,7 @@ OLD_FILES+=usr/share/man/man4/uslcom.4.gz OLD_FILES+=usr/share/man/man4/uvisor.4.gz OLD_FILES+=usr/share/man/man4/uvscom.4.gz OLD_FILES+=usr/share/man/man4/zyd.4.gz +OLD_FILES+=usr/share/man/man8/ssh-sk-helper.8.gz OLD_FILES+=usr/share/man/man8/uathload.8.gz OLD_FILES+=usr/share/man/man8/usbconfig.8.gz OLD_FILES+=usr/share/man/man8/usbdump.8.gz From nobody Thu Jul 23 02:23:25 2026 X-Original-To: dev-commits-src-main@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 4h5FKm4zkWz6m68f for ; Thu, 23 Jul 2026 02:23:40 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "WR4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h5FKm0Pvmz3nsR for ; Thu, 23 Jul 2026 02:23:40 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-38759bcd877so105192a91.2 for ; Wed, 22 Jul 2026 19:23:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784773417; x=1785378217; darn=freebsd.org; h=to:references:message-id:cc:date:in-reply-to:from:subject :mime-version:content-type:from:to:cc:subject:date:message-id :reply-to:content-type; bh=VeX/bXeAiNh+mQ+Ati9VP291eDiIO7hSxqFnlwVEppI=; b=YLqJioK4eH/Fu6sPpaw5o8/vFFT/eEQU3w3+iUIzhREcF6sL/bpMuJfKSbXaLtKa29 dGagU7W0ueqzoYW0x/EPNCYD081B6l/cb1jh+OyepS6UHMyalGvU5JxRBbP2vhOzVacl kiVaLDoueAzB9wd5e6QcJ5jaTipJLcogeEGBDLm28QJDcJkrNBtePDYoHAxMnfPmPB09 wRlb4nQYTfu23Unk64/b5z0MZU3Y4OgVI4huv3MAmdawkoN8R+Kbqb4EMAfAp2NQG8Hq 1M8mzwbjVgDkPTPed0f8SC0ZRulZRpoCNWqLdf5KDHJd/Dp/OTJrDXkoioowylVpxIdU 6eRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784773417; x=1785378217; h=to:references:message-id:cc:date:in-reply-to:from:subject :mime-version:content-type:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=VeX/bXeAiNh+mQ+Ati9VP291eDiIO7hSxqFnlwVEppI=; b=FLpSawvItgarnXPjtJgUYz+rWGeuCPgQp//7Frc+fb/pGeth1JPcd3hmzPCcytQwDA VeuI52RIlWnyZ5UXczNt9T79dXAvfTRPZsMFoU7kEdm8EBZCOht+vrteEB6pxiBM98Tk gPzF8M0tL2VVdFhTOQ0PZLW7wm+spwEfIfxhjXTKLkhL849fhN71yx6nVeqLGBzepiO8 c5Ho0EuOcWot8Q7x+ZWlLAvW98Q4k972WF6I4t3mVZt3YYxQ8H+Lys4+Vdl6jMnJalbI hkg1Gb6DaDC8J42NVSvevohoWpALaEGwALAXbMVoyUYIsc0NruuM3C4KnumB+FZab8hc drlA== X-Forwarded-Encrypted: i=1; AHgh+Rr7PGctwKwH/0w6t1LbeH28/zKEND0FpwfJS8fyVW3frasbJJMN3Gey6rEler8RJYQkh0ql5Q95FImy2VG22UkM/ymX8Q==@freebsd.org X-Gm-Message-State: AOJu0Yzz4DWNR8Ucvulbsq3WULM0/Qkmm6QkVoj2VjLvyAh5+9YpsBcA 8D0LJSaN3ZKfeB9SONIoC9vyHwuaMLWB1x431Qs1bUrsoXtoUXo1Smlq X-Gm-Gg: AR+sD11HF+xuipi9/OwZMcfTL5hwARgYhnc4mDyLZAwOz4+zxIiLvPXOmUuxDXGX3F9 cG3PSBtidGL7fxsKjf9LzNEy3Pq3hn2tuIqW3MEgpvppu0Wdxdis6FsDdGvVGxM0Dk2niSiP72l wqyoPYp1PI840vMXR4OKy0YOm0vVZsraZ+FTf8pRrZy5ubRuv7gJZmEkVHbAIKbyi9lALX/2kcI ebuuXwPo3iuKzFwz/Kwovl3k0WxXHw9D8RQwFa3BehoKplK/+W479cHOzXfNFauvbxODHDKxBvy xZEUmv3HUpN1QwMZ8/G7yw1e9zpkGHK1CHEgEiowaalZvn+c2meGUh0/U6+yCKlDwv8v0JLtNMB 0M2oGbWaldNSGIAcX3NrJ5ViBEHReRCdI8GL6wkyf3fICex0xSOlWKL55e0sozW1Tzv/0+kuHHs d0qbfo6AvZnpcojEloedeh0cHQ9g== X-Received: by 2002:a17:90b:28c5:b0:387:e0bb:57ff with SMTP id 98e67ed59e1d1-38ec6aae630mr1036549a91.38.1784773417138; Wed, 22 Jul 2026 19:23:37 -0700 (PDT) Received: from smtpclient.apple ([94.156.149.122]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38eca8ec1fdsm100417a91.4.2026.07.22.19.23.35 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 Jul 2026 19:23:36 -0700 (PDT) Content-Type: multipart/signed; boundary="Apple-Mail=_D03D1601-366E-4D7D-B855-9A2D7E77B782"; protocol="application/pgp-signature"; micalg=pgp-sha256 List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3864.600.51.1.1\)) Subject: Re: git: 4db3872aabc3 - main - Only build secure/libexec/ssh-sk-helper if MK_USB == no From: "Enji Cooper (yaneurabeya)" In-Reply-To: <6a611b21.1f0c2.2c3b5692@gitrepo.freebsd.org> Date: Wed, 22 Jul 2026 19:23:25 -0700 Cc: "src-committers@freebsd.org" , "dev-commits-src-all@freebsd.org" , "dev-commits-src-main@freebsd.org" Message-Id: <7C07696C-0E56-44A5-8AE4-9270891CC973@gmail.com> References: <6a611b21.1f0c2.2c3b5692@gitrepo.freebsd.org> To: Enji Cooper X-Mailer: Apple Mail (2.3864.600.51.1.1) X-Rspamd-Queue-Id: 4h5FKm0Pvmz3nsR X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US] X-Spamd-Bar: ---- --Apple-Mail=_D03D1601-366E-4D7D-B855-9A2D7E77B782 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Jul 22, 2026, at 12:33=E2=80=AFPM, Enji Cooper = wrote: >=20 > The branch main has been updated by ngie: >=20 > URL: = https://cgit.FreeBSD.org/src/commit/?id=3D4db3872aabc33088cf180599c5eaa23b= 6f58e6d1 >=20 > commit 4db3872aabc33088cf180599c5eaa23b6f58e6d1 > Author: Enji Cooper > AuthorDate: 2026-07-22 19:33:44 +0000 > Commit: Enji Cooper > CommitDate: 2026-07-22 19:33:44 +0000 >=20 > Only build secure/libexec/ssh-sk-helper if MK_USB =3D=3D no >=20 > The ssh-sk-helper utility only functions if/when MK_USB =3D=3D yes. > Installing it on systems where MK_USB =3D=3D no doesn't make sense. >=20 > Differential Revision: https://reviews.freebsd.org/D58246 Like kevans correctly noted over IRC, the title line for the = commit is backwards: I should have said `if MK_USB !=3D no`, not `if = MK_USB =3D=3D no`. Thanks, -Enji --Apple-Mail=_D03D1601-366E-4D7D-B855-9A2D7E77B782 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEkHfexGRJ3gYRdA2gGpE5DjPsNJgFAmphex0ACgkQGpE5DjPs NJiz7hAAk+uzUT2TMLEYhSKdpw08P5gvMxagCBRxTNM0MSAOkiV/qd3jKONmv8Ff XDm6aRqY9DPpKpvpOof8N37QBTCWIGc/kwMYp6kN2uY/uBvTepAjzLnRU5tVwIEy ZXBhtZlgj3hIUPvxz/N1gJgHien/Sx/ouC9yxWESRZaI11GLkwmFMb08JSDza4Gd atIg8rt0cRO6plgYU1EDgu0hCNjtdYcLYqqmWhqi6rw1x20gPDOUkUYcDGe1EE5B 9nWwpQlpD7RzqKzDD4RdegI/p/3PxRJ3snuuNR8yJ9dXj0GBNTS3fYUxQOWqUq+r LtOR3Mx5x7VbUPQt7kaY++NwlMzWCxyZbrOt+0ytAhqnggTFjtq95W1kOhxb7eHj CX24KhtkOIbgFP7gVlHyMxtl3PAZyQ6BrVxpGeCGDDoxw3rOT2secNcb+50jUsRo 7HY1oxdEs55ol/GvNoolYTrReOz4B9tSvL4XIQP++Ypa/+an/3Vs+tiF3stqMxAq ZlZFqkp6JiiAD6AqM4NMMD3p+SlZcJvbeLrED4s6BUzlyjbZudR8tXmlDAAz5IjY uDVkWWauyOz72EpI3fqjnfjqMSVt1/hCCWxMiRrDDR92YqCnZwtR+e/A8/HlpEzy DmFF3lMjKVsYrVQsouA9MnrI8UN8XrWTyhgFTubCtmAo6eZvH+w= =gOtP -----END PGP SIGNATURE----- --Apple-Mail=_D03D1601-366E-4D7D-B855-9A2D7E77B782-- From nobody Thu Jul 23 06:06:40 2026 X-Original-To: dev-commits-src-main@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 4h5LH43KDzz6mQK1 for ; Thu, 23 Jul 2026 06:06:40 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h5LH42pGFz485w for ; Thu, 23 Jul 2026 06:06:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784786800; 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=E9IzCtIQlD7IQstgfhWUYoZ3lASVuL0H3iXDM0vG5VM=; b=xPX8y+vAQDe9api/pfuOvkVPLQPG41n69fcvzhvpC+TN35x6yLl2almmQDWd/+BGsytIKa sXPrHUyu6pf+pQm+Bai5zLKHEwAKniZwe3ce0prTvgUigNORYbKz/47wXYQsr0+nB1WftW 3DCYzlxA/o/N/8pwsLEZAUrHF4G9Z9sgwgMSCJtPjWa14sOC3ZBzuRSIVXepEK8VSUWgSp ijiFPqudLiXLaxdYrh7xeUFoHQyb2v3ndR+uHHaeL1zrtm+SMAU6u61AXBtxVYA/iZp4qO 3sF5300FKE9O7qTahPUF0cy9Ikj4krlv73Ahbx+URTTWKlL5xQZv+BsEKEtIFw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784786800; a=rsa-sha256; cv=none; b=mqG9dVnwludaau7asKfO/WzBPTErhcYeL5VD7vBrGBivpDFu5+iI0U2Z1zsvMXq6Bjw/It jL9YRzGPGY3m2VQRW4sERb9EYdTI1yVDbikqQRQoLBncEkcleVJXrIOW4lQ50KZhR7mcRk OfwW1eIEgUGOtDy+4DbVNtWeuRZVBxCs96hgXRPN+wQi6BCG2TYmUhG9CPc+d/TsyfRzmS 5V9C15Qdz+qCO8DQ955ur3XYIlaAfy3yvyWWYtWM0/CaNUyTDnuyDOb6ThiSHpnixSk3ON 73avIEkS5FxiXdRKHZRcYwL8EUSOf6EQb7vD1ITw8YqRmFlYQZmQZ+roo47CPA== 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=1784786800; 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=E9IzCtIQlD7IQstgfhWUYoZ3lASVuL0H3iXDM0vG5VM=; b=STr4egpEbTPoUm86ujJru0HnatMQYX7xSL2rcoh9EzR6xqX3CI2glme66Znke43jp3UU23 EPlwzCKSXv1PfY9szxnYTFJL4V5dH+VzBm86PzB9xvirPzaH0ILE2nMOZ3YeUkrVJY7LTL 1NNmElQXiLwICUTdLF9BmMmte1fdOlldw1lUyuLdiU2DdTBpRS+U6lgGMUiuilEA5Y3xsU pDjFMYejvkV8F0ccyAimtmnfQffldj4OWrTj53XoteZLHEQ+2zdMtDTAXImyh1+tZlWPeq hHF8ZdDY9d3tHM3LBuJGag+wHyvYPPTHeq86seAp9NDr9Zvb/hxeP04I8oR0ug== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h5LH41JmQzsd4 for ; Thu, 23 Jul 2026 06:06:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1a258 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 23 Jul 2026 06:06:40 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 4627fe9e5afc - main - kqueue: Fix delivery of unwanted events List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4627fe9e5afc0dce4469f5964f5d4b0e49a24274 Auto-Submitted: auto-generated Date: Thu, 23 Jul 2026 06:06:40 +0000 Message-Id: <6a61af70.1a258.5795e3a2@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=4627fe9e5afc0dce4469f5964f5d4b0e49a24274 commit 4627fe9e5afc0dce4469f5964f5d4b0e49a24274 Author: Dag-Erling Smørgrav AuthorDate: 2026-07-23 06:06:32 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-07-23 06:06:32 +0000 kqueue: Fix delivery of unwanted events In both procdesc_kqops_event() and filt_proc(), the event variable can have more than one bit set. This means that: * We cannot compare it directly with NOTE_EXIT; we must binary-and them instead. * We cannot binary-or it with the report mask; we must binary-and it with the request mask first. MFC after: 1 week Fixes: 2a5e58c59694 ("procdesc: add NOTE_PDSIGCHLD") Fixes: b328975b9d7c ("procdesc: report NOTE_PDSIGCHLD for traced and stopped process") Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D58395 --- sys/kern/kern_event.c | 6 +++--- sys/kern/sys_procdesc.c | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c index fa7f8bf7cdb7..e19415c8d443 100644 --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -529,11 +529,11 @@ filt_proc(struct knote *kn, long hint) event = (u_int)hint & NOTE_PCTRLMASK; /* If the user is interested in this event, record it. */ - if (kn->kn_sfflags & event) - kn->kn_fflags |= event; + if ((kn->kn_sfflags & event) != 0) + kn->kn_fflags |= kn->kn_sfflags & event; /* Process is gone, so flag the event as finished. */ - if (event == NOTE_EXIT) { + if ((event & NOTE_EXIT) != 0) { kn->kn_flags |= EV_EOF | EV_ONESHOT; kn->kn_ptr.p_proc = NULL; if (kn->kn_fflags & NOTE_EXIT) diff --git a/sys/kern/sys_procdesc.c b/sys/kern/sys_procdesc.c index 94c2df4b1e69..7fc63256bc05 100644 --- a/sys/kern/sys_procdesc.c +++ b/sys/kern/sys_procdesc.c @@ -518,8 +518,8 @@ procdesc_kqops_event(struct knote *kn, long hint) } /* If the user is interested in this event, record it. */ - if (kn->kn_sfflags & event) - kn->kn_fflags |= event; + if ((kn->kn_sfflags & event) != 0) + kn->kn_fflags |= kn->kn_sfflags & event; /* Process is gone, so flag the event as finished. */ if ((event & NOTE_EXIT) != 0) { From nobody Thu Jul 23 06:21:18 2026 X-Original-To: dev-commits-src-main@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 4h5Lbz0ZmGz6mR29 for ; Thu, 23 Jul 2026 06:21:19 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h5Lby7430z49dm for ; Thu, 23 Jul 2026 06:21:18 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784787679; 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=O+zKTouj9vpJ8ZaNCgGxeLDFfI2N5CPcCzkb1L4UErs=; b=Hm6AL7a0w5v/hkCfzNlRegICLExgJcIrwW7/g9wr7HWbxQlP/j0QKsZQYP+F55gA9jLaAu rSu3bbZp+ZBTINJsNwRW0/+AJHAYJoVXt/bW1W21OG9GToAj7toQiAw7CK3H0WVt492tdi 2P/wsS+TTek+gNIKl9uuD/Zi50YiAcCSl5b+FWup0az7ehk20NIFInmkxzlJUojv8XmHRF wU6M/ZVWLBzsT4DsuRtDJ9O8gLwStfT6W9SsPrHvzBMR1Of8jFUJI2fnEfTt2VsvcoER6c k+4GXG92uFWP7tVps77K4R/UuRQeSEQXniDh8Cy/XXsYCXk7/9AMDZc8mn1wOA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784787679; a=rsa-sha256; cv=none; b=vv7GCbGEp7KjUjWYb98utOrjqa0F79pPeoeNVz+ouuID/T9r5Aq6XguxwAEx66q2Ko+EEm JIjJshR6EKzjItY49D2wZ5pUhUdujvSNP0TVBB0m1Fh8bUK5YM0PRv6Jfeq3qKKWrKhZHX GKRYI7dQLZ0S39DLtAvCOxYWq1WjaYGm64O8W10aAIgsA8xjTVLvcCQEc82NvyG8Bl5peT tvml5rk9cPytXChi05s+QO3z+KF+TGM5+2Wk5X8kIzZ9m8K534pPeoE9cF9pjaLwgc3Vdy cV3Of4/Vo3sfFn3bXCRWu3SWWLUOC0If8E3iD8IlTibdVoX34lcqiTzvRaSfKQ== 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=1784787679; 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=O+zKTouj9vpJ8ZaNCgGxeLDFfI2N5CPcCzkb1L4UErs=; b=hGup38SXLgUyJaFkO42u6D6vDriDYI1fQTnAoiu6UYvhWCLPyzdcrv9kueDMX1tBuQbxjF ibCQ1Yv7Qx4uBuwBzdvzucEYRTfw138Iic/YiFz30y/DcwyV1Cq98XIpZxf5JiWfEe01KV tp191qfzWXsY21WHnymYnizJ0V8FHxH3tx2Yq+godnB3+ktNoxLO9fAf8hWxr/6DcUKZ2E LdSAZ4ryd8XnE2a9paC7+rtqtcYPKdbXHlHbwoiNpaZZM33ExlogDcrziag1Lxo0QgYWDf Ls14o7BC3hr6Q27bT4muKphjjk7cu25HpOSnZrCoZiNQkp9KUZXz5FEKXounFg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h5Lby5lsLzsvs for ; Thu, 23 Jul 2026 06:21:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1d614 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 23 Jul 2026 06:21:18 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 5dc400ff452b - main - cp: Correct description of SIGINFO List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5dc400ff452b0259f0c50474255ebe6e5e02edb9 Auto-Submitted: auto-generated Date: Thu, 23 Jul 2026 06:21:18 +0000 Message-Id: <6a61b2de.1d614.6b497549@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=5dc400ff452b0259f0c50474255ebe6e5e02edb9 commit 5dc400ff452b0259f0c50474255ebe6e5e02edb9 Author: Dag-Erling Smørgrav AuthorDate: 2026-07-23 06:21:08 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-07-23 06:21:08 +0000 cp: Correct description of SIGINFO The manual page claimed that SIGINFO caused information to be printed to stdout, when in fact it is printed to stderr, as one would expect. This has been true ever since the feature was first added in 2003. MFC after: 1 week Fixes: 00d321a2b395 ("Add a SIGINFO handler.") Reviewed by: jilles Differential Revision: https://reviews.freebsd.org/D58392 --- bin/cp/cp.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/cp/cp.1 b/bin/cp/cp.1 index e31eb07ecd92..cb3728113c91 100644 --- a/bin/cp/cp.1 +++ b/bin/cp/cp.1 @@ -29,7 +29,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd June 9, 2026 +.Dd July 22, 2026 .Dt CP 1 .Os .Sh NAME @@ -269,7 +269,7 @@ receives a argument for .Xr stty 1 ) signal, the current input and output file and the percentage complete -will be written to the standard output. +will be written to the standard error output. .Sh EXIT STATUS .Ex -std .Sh EXAMPLES From nobody Thu Jul 23 12:41:13 2026 X-Original-To: dev-commits-src-main@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 4h5W2K34T1z6lkx5 for ; Thu, 23 Jul 2026 12:41:13 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h5W2K22Wbz43bH for ; Thu, 23 Jul 2026 12:41:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784810473; 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=fPV78FA+TDjajHpc/skAD1Ox3HXLIAHfkEWNpYLMvW8=; b=BNNRrMBvade8eSMjNVDlwVEEId5IptgBqhetUJR1/aXmWKqRyYjBd9pu+Ldvb78djdSxTQ RC6fWmwm15+sBJIQMqXFzU5jFCKqWrmF6X8FqODzpgc3INGPDd8ZAh0lTtL4McK+Q3w2ib pj8WAT1u6k64ygb10ktICPS09SXO8Ci7gQThEo/Kc5Nflh3nK2L/VaW+snID/rjHS2p4O3 jMIIIWXchhrqbWnOTixq8tcCR/K88Abm87K5OqS6Ofqc4WXyze6D8H7RsrCgFQsK0zKS8B TFYB6lzur7/pHKW9eIzVezW43JR0u2IR8GcwkpgjJ+LCGYsMqZat8jN0gvBr6g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784810473; a=rsa-sha256; cv=none; b=WAfgrIHLoMcCue413qvFooAM0b+ZNUfuON8bWC89PtwBS6T8DNc01IlGW1/cvSivySnGHF LiBkporX/gtH8fElpdkfkg18Do18xDYjXe+ARHSGKl4GKupt3LSOnXS/CoeO0LShqDENck CaJL7bQYuakWlMKt4tiGJglzXEQqa6WLomz9XeNDL7hJ7Nc35r4sa6WJuyNW7uzjKYBalG +/UTDDOtjAJOxhx32NU4v+e7mpQ4jhfX8DDVHKPzQPoAET55m6Rd+xw95Hlwh0pB730dub rAeoRSUmVZEYQmzXPwMwQZKQcJEK6o9r91z3PhF6l2UcssTbFVaMqTIVP/Zi2g== 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=1784810473; 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=fPV78FA+TDjajHpc/skAD1Ox3HXLIAHfkEWNpYLMvW8=; b=qZ122Em1Jx62/E/Z7ZLpQSyAJlKnjbHuxnPDY7DVTNdMWWvpIpc4qCwi2DWcQJCvms34tP LKcizXC2RFoFkQa5zPM3s/Ba7VIF451SHGGHtw9KN0DfbT099wlIi1vZbL8Ggy6b57Jcx5 wYhlohXNVdn1u8fGmFzIr/7mzeGb9LdBShP+t6+FcdN5o+xqn8fsQMH8ww3YLtoujc6kED +KGU94XRppSXv3Eyugz1GrihZR6QQ/o93AdlnxFU2z//j0k6/rG84rgSvpqFb6pgwJZ1rz Ke6h125pU2xcRuIhZ4n0Lw5L4ubKloTxhO1jrwn+kh0mBCUz5DJNH4GlWyaSQQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h5W2K0wzLz14yL for ; Thu, 23 Jul 2026 12:41:13 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1e608 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 23 Jul 2026 12:41:13 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kristof Provost Subject: git: 850041b02548 - main - pf: include direction in fragment key List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 850041b025486614243fb2d481b3adb0382b02e7 Auto-Submitted: auto-generated Date: Thu, 23 Jul 2026 12:41:13 +0000 Message-Id: <6a620be9.1e608.63f7d9a6@gitrepo.freebsd.org> The branch main has been updated by kp: URL: https://cgit.FreeBSD.org/src/commit/?id=850041b025486614243fb2d481b3adb0382b02e7 commit 850041b025486614243fb2d481b3adb0382b02e7 Author: Kristof Provost AuthorDate: 2026-07-22 15:13:51 +0000 Commit: Kristof Provost CommitDate: 2026-07-23 11:27:30 +0000 pf: include direction in fragment key pf(4) currently ignores fragment direction (in vs. out) in pf_frnode_compare() function. Issue noticed and reported by Frank Denis OK @bluhm Obtained from: OpenBSD, sashan , eaa2c80721 Sponsored by: Rubicon Communications, LLC ("Netgate") --- sys/netpfil/pf/pf_norm.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/sys/netpfil/pf/pf_norm.c b/sys/netpfil/pf/pf_norm.c index 348c1cafbd49..45463fc7b6d8 100644 --- a/sys/netpfil/pf/pf_norm.c +++ b/sys/netpfil/pf/pf_norm.c @@ -82,6 +82,7 @@ struct pf_frnode { struct pf_addr fn_dst; /* ip destination address */ sa_family_t fn_af; /* address family */ u_int8_t fn_proto; /* protocol for fragments in fn_tree */ + u_int8_t fn_direction; /* pf packet direction */ u_int32_t fn_fragments; /* number of entries in fn_tree */ RB_ENTRY(pf_frnode) fn_entry; @@ -155,22 +156,23 @@ static struct pf_fragment *pf_fillup_fragment(struct pf_frnode *, u_int32_t, struct pf_frent *, u_short *); static struct mbuf *pf_join_fragment(struct pf_fragment *); #ifdef INET -static int pf_reassemble(struct mbuf **, u_short *); +static int pf_reassemble(struct mbuf **, uint8_t, u_short *); #endif /* INET */ #ifdef INET6 static int pf_reassemble6(struct mbuf **, - struct ip6_frag *, uint16_t, uint16_t, u_short *); + struct ip6_frag *, uint16_t, uint16_t, uint8_t, u_short *); #endif /* INET6 */ #ifdef INET static void -pf_ip2key(struct ip *ip, struct pf_frnode *key) +pf_ip2key(struct ip *ip, struct pf_frnode *key, uint8_t dir) { key->fn_src.v4 = ip->ip_src; key->fn_dst.v4 = ip->ip_dst; key->fn_af = AF_INET; key->fn_proto = ip->ip_p; + key->fn_direction = dir; } #endif /* INET */ @@ -226,6 +228,8 @@ pf_frnode_compare(struct pf_frnode *a, struct pf_frnode *b) return (diff); if ((diff = a->fn_af - b->fn_af) != 0) return (diff); + if ((diff = a->fn_direction - b->fn_direction) != 0) + return (diff); if ((diff = pf_addr_cmp(&a->fn_src, &b->fn_src, a->fn_af)) != 0) return (diff); if ((diff = pf_addr_cmp(&a->fn_dst, &b->fn_dst, a->fn_af)) != 0) @@ -807,7 +811,7 @@ pf_join_fragment(struct pf_fragment *frag) #ifdef INET static int -pf_reassemble(struct mbuf **m0, u_short *reason) +pf_reassemble(struct mbuf **m0, uint8_t dir, u_short *reason) { struct mbuf *m = *m0; struct ip *ip = mtod(m, struct ip *); @@ -831,7 +835,7 @@ pf_reassemble(struct mbuf **m0, u_short *reason) frent->fe_off = (ntohs(ip->ip_off) & IP_OFFMASK) << 3; frent->fe_mff = ntohs(ip->ip_off) & IP_MF; - pf_ip2key(ip, &key); + pf_ip2key(ip, &key, dir); if ((frag = pf_fillup_fragment(&key, ip->ip_id, frent, reason)) == NULL) return (PF_DROP); @@ -902,7 +906,7 @@ pf_reassemble(struct mbuf **m0, u_short *reason) #ifdef INET6 static int pf_reassemble6(struct mbuf **m0, struct ip6_frag *fraghdr, - uint16_t hdrlen, uint16_t extoff, u_short *reason) + uint16_t hdrlen, uint16_t extoff, uint8_t dir, u_short *reason) { struct mbuf *m = *m0; struct ip6_hdr *ip6 = mtod(m, struct ip6_hdr *); @@ -936,6 +940,7 @@ pf_reassemble6(struct mbuf **m0, struct ip6_frag *fraghdr, key.fn_af = AF_INET6; /* Only the first fragment's protocol is relevant. */ key.fn_proto = 0; + key.fn_direction = dir; if ((frag = pf_fillup_fragment(&key, fraghdr->ip6f_ident, frent, reason)) == NULL) { PF_FRAG_UNLOCK(); @@ -1274,7 +1279,7 @@ pf_normalize_ip(u_short *reason, struct pf_pdesc *pd) PF_FRAG_LOCK(); DPFPRINTF(PF_DEBUG_MISC, "reass frag %d @ %d-%d", h->ip_id, fragoff, max); - verdict = pf_reassemble(&pd->m, reason); + verdict = pf_reassemble(&pd->m, pd->dir, reason); PF_FRAG_UNLOCK(); if (verdict != PF_PASS) @@ -1375,7 +1380,8 @@ pf_normalize_ip6(int off, u_short *reason, if (pd->virtual_proto == PF_VPROTO_FRAGMENT) { /* Returns PF_DROP or *m0 is NULL or completely reassembled * mbuf. */ - if (pf_reassemble6(&pd->m, &frag, off, pd->extoff, reason) != PF_PASS) + if (pf_reassemble6(&pd->m, &frag, off, pd->extoff, pd->dir, reason) + != PF_PASS) return (PF_DROP); if (pd->m == NULL) return (PF_DROP); From nobody Thu Jul 23 12:41:14 2026 X-Original-To: dev-commits-src-main@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 4h5W2L6TkKz6ll6q for ; Thu, 23 Jul 2026 12:41:14 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h5W2L3wLrz443b for ; Thu, 23 Jul 2026 12:41:14 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784810474; 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=iQ27Y8pTXzQ7VbSFX3NGDUQPHgYQyeG2Iz9B9w5dcU8=; b=wQ74kZKZzWk+ahiGgC/+dth2Xp0YEKt9L1p+zzE7Buiqk9oJJHT11BsZ6CH3SEr0gJPNDm E/ERtPnvgUVD2JRzVF+waE4YhocSDviDp43LFD/YbfMNbJOhbOF6X0ARYaU08/SwVy03He TyvqqFWNM+dMONmAQi62LzWYIlyNfAgfWNHBoAWFOG/uGAcrnezerMBEsLAW+yC5Q3F6// hEv4o6y3YO9FF19i1yMbTv4cxaMx5uJNAsErM3Nv8iAkzyx6nHmRYakr6q3/YTBqkacKMC oXucYjFS+GAxJ9nDTsOesVRyxRMpg1mf3++9z75VfOE2g3dnqo9k3ThoVg7QVg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784810474; a=rsa-sha256; cv=none; b=neoPn2/fG/6Sf/9GTbtq0XV5it3E9ovMIWtyS1Wlj4K96nHa7gVDgwG3dD/Q8WWo3JgGQr liDKtAdfzhpRq0IQZa+HqELzn2KNUPX+HyvDoKueNCni+FeMNF71P5ZKKBkWGRZEHVB5dc 8dNT6X2TM3GAf8YohmbjOOAJc8S+rEpw1wrM2p76VcxR4V+nKEU9GGWXnrql9Qn6QeFC0M jNOj1C2zgyiV+hj2lVA0FK4W1YldtDzx38PvvGmPbysewXOuQtMZS5zY0wHUngF8w8G0bn DfksuRKRBz9gyhM6OFrVf1snmnd1qVvRDr61UZpNwsLyLzbQXqbdymlkXtGuhQ== 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=1784810474; 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=iQ27Y8pTXzQ7VbSFX3NGDUQPHgYQyeG2Iz9B9w5dcU8=; b=q3sijTR66O/Ecd6gApSe90MgjECK3T+EXF0ufqizegqsNw5Oi8NYzSQP+1Iz3vgG7/TpcQ toa9OnG4f2pkkScX0ATElGc38ALctJUgzI8sV0m4EAJkiNahM0ypzGwzG2MSS1Ll19qqJV APbKu0qudxr7tK94ruGY6+9+CJ7bC2Pgdcv7bWKlSPtGZeOnbYIToNmORi0qh5cv3SCZ5W KKANQb6Q6JUbNoy4Yhd8u9zN/6kOhqVHvOdZFdTaJ89gtgb27veemgqKiF+uIf4OnOR2ST KwlUrdU/CYqcgjKidDHqsF28fuqftxPPXnsRJkuSmd8f5rEf3WAndCLYL4QJGQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h5W2L1qWXz14lw for ; Thu, 23 Jul 2026 12:41:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1be5d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 23 Jul 2026 12:41:14 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kristof Provost Subject: git: 145541d4ed79 - main - pf(4) fix NULL pointer dereference in outbound packet path. List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 145541d4ed7923dc87e7e1a2e6864d123f81f4d2 Auto-Submitted: auto-generated Date: Thu, 23 Jul 2026 12:41:14 +0000 Message-Id: <6a620bea.1be5d.2b439300@gitrepo.freebsd.org> The branch main has been updated by kp: URL: https://cgit.FreeBSD.org/src/commit/?id=145541d4ed7923dc87e7e1a2e6864d123f81f4d2 commit 145541d4ed7923dc87e7e1a2e6864d123f81f4d2 Author: Kristof Provost AuthorDate: 2026-07-23 09:06:01 +0000 Commit: Kristof Provost CommitDate: 2026-07-23 11:27:36 +0000 pf(4) fix NULL pointer dereference in outbound packet path. Outbound packet which matches rule with source limiter attached, for example: source limiter "crash" id 1 entries 10000 limit 1000 pass out from any to any source limiter "crash" keep state triggers a NULL pointer dereference. The issue was kindly reported and initial version of fix submitted by SecBuddyF, Tencent KeenLab. The submitted diff fixed the issue for failing look up by destination address in outbound packet. dlg@ also pointed out the change should be further improved so NULL pointer dereference is avoided when rule uses nat-to/rdr-to option. OK dlg@ Obtained from: OpenBSD, sashan , f0f215c11e Sponsored by: Rubicon Communications, LLC ("Netgate") --- sys/netpfil/pf/pf.c | 13 ++++++++++-- tests/sys/netpfil/pf/limiters.sh | 46 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c index 10e73ce1e7b9..7dc9d59e8300 100644 --- a/sys/netpfil/pf/pf.c +++ b/sys/netpfil/pf/pf.c @@ -3134,14 +3134,23 @@ pf_remove_state(struct pf_kstate *s) case PF_STATE_LINK_TYPE_SOURCELIM: { struct pf_sourcelim *srlim; struct pf_source key, *sr; + int sidx, kidx; + + if (s->direction == PF_IN) { + sidx = 0; + kidx = PF_SK_WIRE; + } else { + sidx = 1; + kidx = PF_SK_STACK; + } srlim = pf_sourcelim_find(s->sourcelim); KASSERT(srlim != NULL, ("pf_state %p pfl %p cannot find sourcelim %u", s, pfl, s->sourcelim)); - pf_source_key(srlim, &key, s->key[PF_SK_WIRE]->af, - &s->key[PF_SK_WIRE]->addr[0 /* XXX or 1? */]); + pf_source_key(srlim, &key, s->key[kidx]->af, + &s->key[kidx]->addr[sidx]); sr = pf_source_find(srlim, &key); KASSERT(sr != NULL, diff --git a/tests/sys/netpfil/pf/limiters.sh b/tests/sys/netpfil/pf/limiters.sh index f576955e5640..c8ecc517e26c 100644 --- a/tests/sys/netpfil/pf/limiters.sh +++ b/tests/sys/netpfil/pf/limiters.sh @@ -306,6 +306,51 @@ source_basic_cleanup() pft_cleanup } +atf_test_case "out" "cleanup" +out_head() +{ + atf_set descr 'Test limiters on outbound rules' + atf_set require.user root +} + +out_body() +{ + pft_init + + epair=$(vnet_mkepair) + + ifconfig ${epair}a 192.0.2.2/24 up + ifconfig ${epair}a inet alias 192.0.2.3/24 up + + vnet_mkjail alcatraz ${epair}b + jexec alcatraz ifconfig ${epair}b 192.0.2.1/24 up + + # Sanity check + atf_check -s exit:0 -o ignore \ + ping -S 192.0.2.2 -c 1 192.0.2.1 + atf_check -s exit:0 -o ignore \ + ping -S 192.0.2.3 -c 1 192.0.2.1 + + jexec alcatraz pfctl -e + + # Allow up to one source for ICMP. + pft_set_rules alcatraz \ + "set timeout icmp.error 120" \ + "source limiter \"crash\" id 1 entries 10000 limit 1000" \ + "block out proto icmp" \ + "pass out from any to any source limiter \"crash\" keep state" + + atf_check -s exit:0 -o ignore \ + ping -S 192.0.2.2 -c 2 192.0.2.1 + + jexec alcatraz pfctl -Fs +} + +out_cleanup() +{ + pft_cleanup +} + atf_init_test_cases() { atf_add_test_case "state_basic" @@ -313,4 +358,5 @@ atf_init_test_cases() atf_add_test_case "state_block" atf_add_test_case "state_multiple" atf_add_test_case "source_basic" + atf_add_test_case "out" } From nobody Thu Jul 23 16:07:26 2026 X-Original-To: dev-commits-src-main@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 4h5bcM21PKz6m3hJ for ; Thu, 23 Jul 2026 16:07:31 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h5bcM1S2zz3T3t for ; Thu, 23 Jul 2026 16:07:31 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784822851; 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=1BWmrJSFh2gCVHURqwaLbS5C9q9n6bIkgm5F6nsyXEU=; b=tRCOWeiKNGEtdht+6+VVSYbLuzRLBdTOYqwHD1+BXmX46fbZoj8Tb6McEmw4Jc8RelSc6a kTk5YDByUGGshjkKpTATQkdi1ydPuKG9R+tGQvYX4M0fbVMD7wBf5sDyQcWZfCAyn/W61z lHxylIOW0fruP9QDRRzscGoDouNl8jV/EcPZ1QL0+CGoDuWFgWENWuC4/ouUcGRveg/EDx bs/S5GusECpyCcqMHdf4Kvv/TqgyB58E4xAJ9L2OF5g6zj/ZbW/ixsgOEaXjhsuI2XMKzo pIJuYmKTviHh9OR8uab1WfKIhaZU+Tsh2MgheFsbQR5ASyIRsl04Qts+BWJXyA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784822851; a=rsa-sha256; cv=none; b=H4bXyq0suZoyGHErYVN+CgpDOAH7P+JmTi8EbwUuO87eisgNKCrWMlmw0dVx16ZQUa+wXy Ges4/Lj2Y4LdYf8aIIPSNsUWHFpgXcKwFH1z2ipVveARRegUfmHpOQ72xGE/Ir5a7Innj6 sBT+DOZPivqIGuaRWfuJd2lxfOmVR8RS8+PLZjKnJmt6W0ynow4PfOZxlXux6sjdT9cuJh 8ejDMtiu52vvYAVKSJIrS9d2xFsY7rJ+T7f9UK9OAhiol5z6iSLuqTKdFc3HD8Crg+C6HT +8NjCj2kydPrKzNvWNapkK7O9qQaHkZGubygne0RrOsqwL26AOSxmJWq4RX/8A== 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=1784822851; 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=1BWmrJSFh2gCVHURqwaLbS5C9q9n6bIkgm5F6nsyXEU=; b=sygiPuBoF7Bximgcd24M8O6xJORn4bRVv/BENfL8JcdAZdDpD6xMgKei1bdcU/6FwN0mxc B6B2oyhMmwEv8UHt3N7Up3p1aixUPSkeVveYOo5+aaEB1d37mGIFNHg0cukl1xF32CFvPf Wec/ft+oUiWxHcMYV0ftDM2TJi/fffuNRtCtpNKT9SJkX3g0ihArW4Ak20aX3G5QP04znB 8VVrSRHweX8/lie47EOWAM6hmY/y5tBjxvh6qhOpz+dfzPjyydHDlcnUPrMej+lqpNVaU5 Y96Xqtng4rFtqArTlQxeBrcMm3NuSSe40EnvHCHURWDYOzCZjJX8IEDrn/pDBw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h5bcM0Lzlz1BSJ for ; Thu, 23 Jul 2026 16:07:31 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 39fbe by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 23 Jul 2026 16:07:26 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Michael Tuexen Subject: git: fa2ad70a4511 - main - tcp: make ghost ACK handling more conformant List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: tuexen X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: fa2ad70a4511e7b379e81de82c9e51b2e0994295 Auto-Submitted: auto-generated Date: Thu, 23 Jul 2026 16:07:26 +0000 Message-Id: <6a623c3e.39fbe.511f46ed@gitrepo.freebsd.org> The branch main has been updated by tuexen: URL: https://cgit.FreeBSD.org/src/commit/?id=fa2ad70a4511e7b379e81de82c9e51b2e0994295 commit fa2ad70a4511e7b379e81de82c9e51b2e0994295 Author: Michael Tuexen AuthorDate: 2026-07-23 16:03:39 +0000 Commit: Michael Tuexen CommitDate: 2026-07-23 16:03:39 +0000 tcp: make ghost ACK handling more conformant The latest version of draft-ietf-tcpm-tcp-ghost-acks changed a condition. This should make no substantial difference, but makei it compliant to the latest version of the specification. Reviewed by: rscheff, Peter Lei MFC after: 3 days Sponsored by: Netflix, Inc. Differential Revision: https://reviews.freebsd.org/D58411 --- sys/netinet/tcp_input.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 2a778687faf2..37706343d621 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -2386,7 +2386,7 @@ tcp_do_segment(struct tcpcb *tp, struct mbuf *m, struct tcphdr *th, /* * Ack processing. */ - if (SEQ_GEQ(tp->snd_una, tp->iss + (TCP_MAXWIN << tp->snd_scale))) { + if (SEQ_GT(tp->snd_una, tp->iss + (TCP_MAXWIN << tp->snd_scale))) { /* Checking SEG.ACK against ISS is definitely redundant. */ tp->t_flags2 |= TF2_NO_ISS_CHECK; } From nobody Thu Jul 23 17:43:29 2026 X-Original-To: dev-commits-src-main@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 4h5dl61Q18z6mBcS for ; Thu, 23 Jul 2026 17:43:30 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h5dl60r0Mz3c1j for ; Thu, 23 Jul 2026 17:43:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784828610; 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=Bsb3Esn68TuBm7pZ5pmiF5VdfgXVLJeRbmGlUHRf/wc=; b=WNuLfEMHftNHWUjEfV/wi4fpyzszaQD0h1KF7hiXNV08q4mxigY7Hd+ARLvazYiSeVHwr4 ffyCfPcXekyJQas40XYaDZkEq3MwyN26bLWoo9UiMqmAkDuK49pY3+46biuWiNJnZyegWA 7P9CmMvjIolpqcJnuXYt4I/lsbQ5wVpyiXPJj1Q6zHtgF21wiS+ayLTcWeYJV5/im5WJL9 0LzYYCQezu6jMx5XZyQ5CddqXcuBhfft1FYNwkYPulCDTczqRzWEpLPc3AbgolxZ+9q8gT 3838iY7PtZ5xQdb5YmK7aFAtGYK0JVNovn/LDIxlnjfMz/cVasjpBWCQMVERvQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784828610; a=rsa-sha256; cv=none; b=SNdgqhwtTYSVAQbJ8bQERsX8RZ7kUDpgzuo/hdtWsfxUR4uFs1lmE82IX1cjtjuZKH70sL Ej4DPEb92BKvbC9WeYZSOUpOeSMiyqP4OdEV4MSgDcSZe5G5iK9YTptVSQCGneyTpJpZdf A16AFUHFU4h78WRtP0NzMA5z8zrhByQY4K1rdV7NcT1Q/QEb3P6qUKk5CbnCPLmRNCJbeP JgpW57DOeZWSFAHxEhDu7weTkFFbS6fz4d+8GpPoDb0lLImMck8Ex/lc7G+5qnXqhFFG7W 888DQ4taZEtb+GYPgEGl7GpDDuM5zhhHDQwbQ2ec2m8MByztAbL3v6C7QTbA1w== 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=1784828610; 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=Bsb3Esn68TuBm7pZ5pmiF5VdfgXVLJeRbmGlUHRf/wc=; b=D8QYFd4E/SLrgdhgsSuzh7W4OfgyQ0jOIGb9AzowEEWhwC4L1LwPO2ccxhPQXn7bMsgCtR KPYGc93qckoxamHVaQifKxbrJV2GC5/1SrB8ABBAkWZCSffJ42UwdMit/vZ9RmpP68Qyno aKA+aJwMMvf+qSyVbwEVVi+Um6/eWD4YDlrGStUhFWkwu/KcAJwbvEyhHoW68065a3tCnK +Pt4ua7QoMgWjYFqf/LSXqdCGt65ZG0zHP8kBu+rLhp0fu+PRaaXXaNeGJkyi7hT0Rh61J P0Nho3qXcxFYNAhWehgiQxr1h3iM1xoJJOfKYjHsR+ZTJzXSz3E4h/BsrYcqAA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h5dl56WmKz128 for ; Thu, 23 Jul 2026 17:43:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 4530b by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 23 Jul 2026 17:43:29 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Ryan Libby Subject: git: 3f521425afcb - main - hwpstate_intel(4): use CPU_FOREACH instead of an IPI List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: rlibby X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 3f521425afcb79a623753c171bf6f3296cd556ec Auto-Submitted: auto-generated Date: Thu, 23 Jul 2026 17:43:29 +0000 Message-Id: <6a6252c1.4530b.6df885f8@gitrepo.freebsd.org> The branch main has been updated by rlibby: URL: https://cgit.FreeBSD.org/src/commit/?id=3f521425afcb79a623753c171bf6f3296cd556ec commit 3f521425afcb79a623753c171bf6f3296cd556ec Author: Ryan Libby AuthorDate: 2026-07-23 17:40:18 +0000 Commit: Ryan Libby CommitDate: 2026-07-23 17:40:18 +0000 hwpstate_intel(4): use CPU_FOREACH instead of an IPI Reviewed by: aokblast, kib, olce Differential Revision: https://reviews.freebsd.org/D58336 --- sys/x86/cpufreq/hwpstate_intel.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/sys/x86/cpufreq/hwpstate_intel.c b/sys/x86/cpufreq/hwpstate_intel.c index 4cb80e4b2d44..fbc1d03079ac 100644 --- a/sys/x86/cpufreq/hwpstate_intel.c +++ b/sys/x86/cpufreq/hwpstate_intel.c @@ -347,22 +347,10 @@ out: return (ret); } -static void -intel_hwpstate_hybrid_cb(void *ctx) -{ - uint32_t *small_cores = ctx; - -#ifdef __i386__ - (void)small_cores; -#else - atomic_add_32(small_cores, PCPU_GET(small_core)); -#endif -} - void intel_hwpstate_identify(driver_t *driver, device_t parent) { - uint32_t small_cores = 0; + int i; if (device_find_child(parent, "hwpstate_intel", DEVICE_UNIT_ANY) != NULL) return; @@ -389,10 +377,12 @@ intel_hwpstate_identify(driver_t *driver, device_t parent) * the resulting package frequency depends on the last core that * sets the frequency. */ - smp_rendezvous_cpus(all_cpus, smp_no_rendezvous_barrier, - intel_hwpstate_hybrid_cb, smp_no_rendezvous_barrier, &small_cores); - if (small_cores > 0 && small_cores < mp_ncores) - hwpstate_pkg_ctrl_enable = false; + CPU_FOREACH(i) { + if (pcpu_find(i)->pc_small_core) { + hwpstate_pkg_ctrl_enable = false; + break; + } + } if (BUS_ADD_CHILD(parent, 10, "hwpstate_intel", device_get_unit(parent)) == NULL) From nobody Thu Jul 23 20:10:39 2026 X-Original-To: dev-commits-src-main@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 4h5j0w00dzz6mN9n for ; Thu, 23 Jul 2026 20:10:39 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h5j0v5ljNz3sZl for ; Thu, 23 Jul 2026 20:10:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784837439; 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=JRG58dUagy3/4iQBo8hdRoVDUFbO3nvAQdl0jud2Ynk=; b=YaC44Kxbk5N4EwMyhJK03aBdHE9wbN7dI1BEC1QTQOjKw+8xsYE+i9cg6lMPN8JrZYHwQ5 l1J6lGrCMCt3qNZOeL60DDixEs6dY7iS3p/f+kvRIS2K5aYFUUe4OOq0pUNI/qelvgF4Id sGpnl9J/DytWU3BfW6R340um6gDm9jM8/F4YgxjwZQ2KAFFQ63kCm8PNHjczI1l40N2wxC HOPsVMYk5aQTb5vrdjhMPuT3YqcLKuRPRIUIQ99qtbdGxlMmWJAxRdJAbrIDlRxhgSzQ6m DCzMUPLzZ/5cA4cjvhcPCadkNU3aDogkcidJ+CVXrAJ2X3ahb/vJmS+3BwTySg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784837439; a=rsa-sha256; cv=none; b=E95zoH5ZNUcgG0swMLKnfF08FUtooyWRbBKGpBWEVdJhnXTphbrAvUDFErzglvLknxow50 XCMa05/SHCie8Mvs0qMCX6mAqMuarCgllmBSOmNh/q5V8DJNLo6+htIe76OIMyJwFilNgB bO/i8CDvKOIACzYCP/dgfapcjNXcG0pC1YmaW5eEowuyAmtqOZB0lcFXZSHLfxnaXWRbrw YuLdfP5z3taG4MBSAUmUB6QNMV3GEfqj5WOF31ThE4twQpzgBAAMQc5iq8abA7euw9uq0C PBAsOfmWCViR4kB9dA+WxGUSjQvg97sK01/amUp1eHdBBAXVnbloHcSrQRrrTg== 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=1784837439; 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=JRG58dUagy3/4iQBo8hdRoVDUFbO3nvAQdl0jud2Ynk=; b=D+/bZSgx33YYQRowrNq3g3WqcR43/4fmDppVTeDIfg38dcm4/UjrjJ+P+USXc8sGMQQ0PX a86juagwnwBnmVcXFupB6jSuAVuTFGUDdczRjkmz68wz0Gj2U2mPmY1QKSLgiG1ZlBBYwT kmdr1vwQdhKqaFu+t92LcT2nEiy4nd9ou61EBL3kvTIGvAQra0RV5cJ9POC7HMqbCnrS6k aPNjnTXk6Lj0dpoFFg8CcaWWrJGRd4P+61J6EoElATs4OSSG/AVpd/nduRKqS6kEknZtvo +u5V+H+BDZGFh9b1NPwZf/9gvLIcAHFtk4/pWJJvNqUo7X2C7spd+rtp2/SUjw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h5j0v4XNdz4gN for ; Thu, 23 Jul 2026 20:10:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 247bc by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 23 Jul 2026 20:10:39 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Enji Cooper Subject: git: a18e773d2776 - main - tests/sys/pmc: only build if MK_PMC != no List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: ngie X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a18e773d2776a65c1a2a0418cbec9cf5ef526b53 Auto-Submitted: auto-generated Date: Thu, 23 Jul 2026 20:10:39 +0000 Message-Id: <6a62753f.247bc.35064cdd@gitrepo.freebsd.org> The branch main has been updated by ngie: URL: https://cgit.FreeBSD.org/src/commit/?id=a18e773d2776a65c1a2a0418cbec9cf5ef526b53 commit a18e773d2776a65c1a2a0418cbec9cf5ef526b53 Author: Enji Cooper AuthorDate: 2026-07-22 19:53:31 +0000 Commit: Enji Cooper CommitDate: 2026-07-23 20:10:32 +0000 tests/sys/pmc: only build if MK_PMC != no This unbreaks the build when pmc support is explicitly disabled via the aforementioned build knob. MFC after: 10 days Fixes: 2cfd82f74 ("hwpmc: add regression tests for ...") Differential Revision: https://reviews.freebsd.org/D58401 --- tests/sys/Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/sys/Makefile b/tests/sys/Makefile index 7e7f35ded73f..f92ef36b2d40 100644 --- a/tests/sys/Makefile +++ b/tests/sys/Makefile @@ -30,7 +30,7 @@ TESTS_SUBDIRS+= netlink TESTS_SUBDIRS+= netmap TESTS_SUBDIRS+= netpfil TESTS_SUBDIRS+= opencrypto -TESTS_SUBDIRS+= pmc +TESTS_SUBDIRS+= ${_pmc} TESTS_SUBDIRS+= posixshm TESTS_SUBDIRS+= ses TESTS_SUBDIRS+= sound @@ -51,6 +51,10 @@ _cddl= cddl _netgraph= netgraph .endif +.if ${MK_PMC} != "no" +_pmc= pmc +.endif + # Items not integrated into kyua runs by default SUBDIR+= pjdfstest From nobody Thu Jul 23 21:00:13 2026 X-Original-To: dev-commits-src-main@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 4h5k6560Nhz6mRVb for ; Thu, 23 Jul 2026 21:00:13 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h5k6557N2z3x5D for ; Thu, 23 Jul 2026 21:00:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784840413; 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=pcEV3wCLxmSxaYgrRRHy/dZ03VsSCZoLRwekB/E9rnM=; b=oZY0ltSyIk1iPbO4H2vXTp+G5gl9zhki0qAlDQA9545nn6+FEu9J9XRKqb5rbnw1fIjhY1 vH/VY2naR+pWntrhpT8ABnlY1NJHhkndNbFWiBG3G5hOzHw3xwrOfz+nsqb58LUSr86ixE Rv5fM4Je/CI5Oj50E2nvVVB3Cf5PwWV9FFQ4LnKRBE2EAOBBoOs1/Bo+lWCBW1doS+16nP I7OK9nAacKld0cO2uNOzC4OS4a9YDf7fduP3Pg61tpQrFnWe7i6Q6LY9yz9jQ79HkCvpmL c4WcnS79KCYJ681ZbnS52s28ufmvDP+woFFMyK7lDdHlAZmCnWrbusQz/QWK5g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784840413; a=rsa-sha256; cv=none; b=l5PeVaCDGWAScAUKamSNUJoaCvkX9eFVpavIyNF5lzUkj9gaDB80FMAhRhVbpS21koUtst j/2YV/s0fex9Jo+inJ6rvreneNtUMrNikrpSFpBozoQloxtQXa5TZBLKVqVLkvziIAJCi2 mmj187NF/AkR48rBeU2BKiVtHocTP8J37ciZAruKtiQbOByxR6L8YayDikLr4z3xwkfJnf 3lA2fMvvjxiCeNjQYHRmqaUwscHjcuSqpydyODkyN3SMxMaHlaFzRwDFKr+Xx9ojdwuOh7 sBVdjb1u2jWoHc0duYxUeoKeFnJYGcqjom3cMvX3LYlerQJ1AD8ZtFtQZD6pew== 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=1784840413; 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=pcEV3wCLxmSxaYgrRRHy/dZ03VsSCZoLRwekB/E9rnM=; b=ZFn+85b+I+LRnbfDelg04nuIq0GCT4yQJXgmBBo9jZ4jcPUZm4+K7wqJ08zJNyqCaR0F97 dLPgnvL8HJUwT+vgB3heFeY+TLTG6rYvcwCDlzQKKMGXmzjGIQAAeCn8fB86HxgCIPxt86 SA/oM8u/+FOyyRDCs0bCtSHOvguNTWhZo9pGhDUbeV+QfCjSlkGDktBtJe+cyKwMzfwlvr 0kBYXtrCDHX57bZSFRPDMdvUe66x530Tol+qM5Q33PjJ72cOW36WVx3pEbLGixKFH2DWrl Ce6FtbQKA7fnD9RkFgJ9j8WcUeqYCz2Ne+XZ0CjcycgVrM//OALxf9KKhpJbjQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h5k6548Zfz5mg for ; Thu, 23 Jul 2026 21:00:13 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 30747 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 23 Jul 2026 21:00:13 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Alexander Motin Subject: git: 86182d890201 - main - Fix namespace listing for old NVMe devices List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mav X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 86182d89020159697391375cf475893d4cd859c0 Auto-Submitted: auto-generated Date: Thu, 23 Jul 2026 21:00:13 +0000 Message-Id: <6a6280dd.30747.71b81461@gitrepo.freebsd.org> The branch main has been updated by mav: URL: https://cgit.FreeBSD.org/src/commit/?id=86182d89020159697391375cf475893d4cd859c0 commit 86182d89020159697391375cf475893d4cd859c0 Author: Alexander Motin AuthorDate: 2026-07-23 20:57:07 +0000 Commit: Alexander Motin CommitDate: 2026-07-23 20:57:07 +0000 Fix namespace listing for old NVMe devices Commit 9e1db51d4b5fc made nvmecontrol devlist get list of active namespaces from the device instead of iterating through all possible IDs. The problem is that this request is not supported before NVMe 1.1, and in particular by Intel Optane 905P drives. This change reintroduces iteration for devices before NVMe 1.2. Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D58010 --- sbin/nvmecontrol/devlist.c | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/sbin/nvmecontrol/devlist.c b/sbin/nvmecontrol/devlist.c index 7bf6bc6f097c..ff492591197c 100644 --- a/sbin/nvmecontrol/devlist.c +++ b/sbin/nvmecontrol/devlist.c @@ -117,7 +117,8 @@ scan_namespace(int fd, int ctrlr, uint32_t nsid) } static bool -print_controller_info(const char *name, int fd) +print_controller_info(const char *name, int fd, + struct nvme_controller_data *cdatap) { static struct timespec now; struct nvme_controller_data cdata; @@ -150,6 +151,7 @@ print_controller_info(const char *name, int fd) } } + *cdatap = cdata; nvme_strvis(mn, cdata.mn, sizeof(mn), NVME_MODEL_NUMBER_LENGTH); printf("%6s: %s", name, mn); if (connected) { @@ -187,6 +189,7 @@ print_controller_info(const char *name, int fd) static bool scan_controller(int ctrlr) { + struct nvme_controller_data cdata; struct nvme_ns_list nslist; char name[64]; uint32_t nsid; @@ -202,25 +205,34 @@ scan_controller(int ctrlr) } else if (ret != 0) return (false); - if (!print_controller_info(name, fd)) { + if (!print_controller_info(name, fd, &cdata)) { close(fd); return (true); } - nsid = 0; - for (;;) { - if (read_active_namespaces(fd, nsid, &nslist) != 0) - break; - for (u_int i = 0; i < nitems(nslist.ns); i++) { - nsid = nslist.ns[i]; - if (nsid == 0) { + /* + * Active Namespace ID List (CNS=2) was introduced in NVMe 1.1. + * The cdata.ver field was added in NVMe 1.2; for older devices it + * is reported as 0. Use CNS=2 only when we know the device is at + * least NVMe 1.1, and fall back to iterating cdata.nn otherwise. + */ + if (cdata.ver == 0) { + for (nsid = 1; nsid <= cdata.nn; nsid++) + scan_namespace(fd, ctrlr, nsid); + } else { + nsid = 0; + for (;;) { + if (read_active_namespaces(fd, nsid, &nslist) != 0) break; + for (u_int i = 0; i < nitems(nslist.ns); i++) { + nsid = nslist.ns[i]; + if (nsid == 0) + break; + scan_namespace(fd, ctrlr, nsid); } - - scan_namespace(fd, ctrlr, nsid); + if (nsid == 0 || nsid >= NVME_GLOBAL_NAMESPACE_TAG - 1) + break; } - if (nsid == 0 || nsid >= NVME_GLOBAL_NAMESPACE_TAG - 1) - break; } close(fd); From nobody Thu Jul 23 23:51:12 2026 X-Original-To: dev-commits-src-main@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 4h5nvN3pkNz6lRqm for ; Thu, 23 Jul 2026 23:51:12 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h5nvN2cd2z3DQL for ; Thu, 23 Jul 2026 23:51:12 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784850672; 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=/386qLRbHpuIBACcPBLRBc7QLDpNvjwg2nRnImxC0rA=; b=sUbqYgtOMhEHr6A/NzqzExBg58tuUkEkxynddzg1IpIoIx9zfNqirdLAy3FbNyayNU5AJ1 ZfaQMRfAwmxeeB16g3y8nBooh7NK6Hi7nHWqsC6/KRCX6uaRyNUE2O8tuhz5b4azv23YfY T4nH4xOVt6e5+g+W2uwPghsAp57XbWfSnCPEP7AHSd4BKFuY/dlHZXzqf1FIOXCCJRLVUQ SosIRrSmQ9HgSP98/+AZRiTcFaNOG3IsE1DcURgyMERYN1+WDMvMMvoIfVBMeWEaHGHfyg e5pzhw3EDlwsjTrxNhk2iwdwAjKeqSrgcW0TEJVVGEOzW89WA7UzOBJ7GzEwgQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784850672; a=rsa-sha256; cv=none; b=f+KnwldJXoTin6USj7JSOireGUOBEFO4xm2zMDpgljVSUUAdbK+tx9qs+9K9DjfImRv4ds xlDO/AmbRc5u4i6cOjev4OB/9M6fS39LkMQYJFr9RuctaFVE4NDqBttyXiIw6h5CxpoWh9 8Ns3QKTYJhPkZ5+NRX9TyzRZLPdIbkv8V0YccPYYS9JtDhZoz6XcN4JJjc5v/YpH7nualu iRM6417cME19dn9x78zKA2De57E6L/4j3CcNTkVsePdt0QffbeA2LrbhMihC+0B/1/PVY4 F80Y+Rxq7ly1DKjwDForOVSdJBU6kzuiG6DOztog+hYu6tYnflE1QH1GnMZvuQ== 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=1784850672; 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=/386qLRbHpuIBACcPBLRBc7QLDpNvjwg2nRnImxC0rA=; b=cBZ4ewDnV/+ZNS/nwbS2CfqIeDDqvHIqXzFeB2sPQa3TS6Wws7UlCMU4kzw2x2w/9FMvWS vyxRY7gZkLRLzDxlgNBfKdvOu93ygjH9eMX+daY3U4TJUFfZHYRdoNw92Nz4e1VgziECfQ WKA/tnnjZJfS4+IR6WcjSZ0XeFVKIXwkZcG0sJueyrQtguoinLQuktjelaVMZa9rJpCCiP 5nvJGgp3R0MbM9JzqDqPHjwdlWWcRUi9LNmIDkiuNEvQhV0EnDaOCqw/pCXWjmRfwSVu9W Pjgv96k6lv8XHAdSHPUKTSU9/vYgNfTpQTdiJtodGij4EDaxOxCq8YL+rxXm1A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h5nvN1SfzzB5d for ; Thu, 23 Jul 2026 23:51:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 43549 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 23 Jul 2026 23:51:12 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 8f320c2bc473 - main - getpgrp(2), getsid(2): allow to call on zombies List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8f320c2bc473a775ea9a55d17fa61f729e593867 Auto-Submitted: auto-generated Date: Thu, 23 Jul 2026 23:51:12 +0000 Message-Id: <6a62a8f0.43549.5b8839c3@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=8f320c2bc473a775ea9a55d17fa61f729e593867 commit 8f320c2bc473a775ea9a55d17fa61f729e593867 Author: Konstantin Belousov AuthorDate: 2026-07-22 09:36:17 +0000 Commit: Konstantin Belousov CommitDate: 2026-07-23 23:50:13 +0000 getpgrp(2), getsid(2): allow to call on zombies Also be more protective in getsid(). Reported by: arrowd Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differrential revision: https://reviews.freebsd.org/D58393 --- sys/kern/kern_prot.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/sys/kern/kern_prot.c b/sys/kern/kern_prot.c index a223a7720844..5aa7fcf7c653 100644 --- a/sys/kern/kern_prot.c +++ b/sys/kern/kern_prot.c @@ -196,7 +196,7 @@ sys_getpgid(struct thread *td, struct getpgid_args *uap) p = td->td_proc; PROC_LOCK(p); } else { - p = pfind(uap->pid); + p = pfind_any(uap->pid); if (p == NULL) return (ESRCH); error = p_cansee(td, p); @@ -231,11 +231,12 @@ kern_getsid(struct thread *td, pid_t pid) struct proc *p; int error; + error = 0; if (pid == 0) { p = td->td_proc; PROC_LOCK(p); } else { - p = pfind(pid); + p = pfind_any(pid); if (p == NULL) return (ESRCH); error = p_cansee(td, p); @@ -244,9 +245,12 @@ kern_getsid(struct thread *td, pid_t pid) return (error); } } - td->td_retval[0] = p->p_session->s_sid; + if (p->p_session != NULL) + td->td_retval[0] = p->p_session->s_sid; + else + error = EINVAL; PROC_UNLOCK(p); - return (0); + return (error); } #ifndef _SYS_SYSPROTO_H_ From nobody Fri Jul 24 11:12:34 2026 X-Original-To: dev-commits-src-main@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 4h651Z5HRRz6lhH3 for ; Fri, 24 Jul 2026 11:12:34 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h651Z4k4Tz4Ncq for ; Fri, 24 Jul 2026 11:12:34 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784891554; 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=yTCmIE1jbR0/5rQMOnr/QhXhdrj0jxegr9g6fbpmJxE=; b=hhNwGWpcPax7WdtFU/uOevscidpZ5Fv7bMkssYVuEn/dNMIajtln2ztO3XeeUgue8nOrAO be57lwIZ1gQ39hLgO8ygRwSOv+dNnNMlL5JxZ61coWyzYhvc3pxlj8Iea1/SLcfjZMVkkH tIOUCr4uFWb5Cq138Zdi58pnrFzawk+FiqKZAmbpLSDsvUdcbADsoHToPxfVcrZ6gE/7SZ skr3XaTYE2vtUquBHc3DHmQvf+yuM+gMd2rgqE7xMHokEtZx7ByajG8GPdt7yD9Lc2I3Kh 4LX6fDZBGV8ixmYIX0ORGZTkM6KYUxe6fxioSAJgk+zjA7v479/czn3XLbkhUA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784891554; a=rsa-sha256; cv=none; b=ux0txIWUABq3n271PBfqv/pNdvkGM0VfCBeyq9B9ZJ9j1yZuiHjXCuGsKcz2hZm7Brvvv6 O8J7/84+G39lK7aYdLDgc3t9Ju9oo7+/Of93FoLsagTfrQmoMTB4sH8RXEeP4lYTMxNo61 ohhkhihjZLpvO5igc4suFSNUVtswHg17FG+3dZE1gUAl7DM1k81BGXVSZobDDVMCGoymuj OwF6mdWn1VLVcUrlpEam/ELTVpsl5muiIwImnqi/Lef7ehdwdw6Hp/lKd6uSDW75WhiEpt WgKhGfvVJ78IZxgcCnxD5i8lcPVzUdjFpcInQHRIMZAyEPpYplO482HqXBwY9g== 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=1784891554; 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=yTCmIE1jbR0/5rQMOnr/QhXhdrj0jxegr9g6fbpmJxE=; b=GiuplTyGRco+Js0+PGeQCbXqlALHcy+D8L1DIbV0U37Up1P99SJMPRN/hSoUzfUKesu+9e 4756N1dZoYOnGnnLW/XSlD239kYLvHLwP6uJrz7EX2NJWeJxoEO5U1JM8EYXqgFi8vcpS2 vBZf/7AkzoXOjZqLO5Lup2maFTMasbhXaWsBQBuQ43on++c5SYOK938H5NQ0B2F3PYRzjy DF+NF43SUEzB3yaipU/VjyfigGhb0XWNy+XJMqcxu3h5AT8pXsRnhbD/VHnXH4N82K9UvL iEdiYwL5XR6+hCjYkNBXn+Q5U6NB+2+JJSXCnIZ+pksADZIvM1FbBYT7aZv2Sg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h651Z3crXzpmx for ; Fri, 24 Jul 2026 11:12:34 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 451b1 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 11:12:34 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Pouria Mousavizadeh Tehrani Subject: git: daf57eb11505 - main - icmp: Verify redirect gateway with fib-aware ifa selection List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pouria X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: daf57eb115053613d01e338b9022db16c045f033 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 11:12:34 +0000 Message-Id: <6a6348a2.451b1.11c16ef1@gitrepo.freebsd.org> The branch main has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=daf57eb115053613d01e338b9022db16c045f033 commit daf57eb115053613d01e338b9022db16c045f033 Author: Pouria Mousavizadeh Tehrani AuthorDate: 2026-07-23 09:10:32 +0000 Commit: Pouria Mousavizadeh Tehrani CommitDate: 2026-07-24 08:04:27 +0000 icmp: Verify redirect gateway with fib-aware ifa selection During call to `icmp_verify_redirect_gateway()` ensure using fib-aware source address selection function. Reviewed by: glebius Differential Revision: https://reviews.freebsd.org/D58409 --- sys/netinet/ip_icmp.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sys/netinet/ip_icmp.c b/sys/netinet/ip_icmp.c index adf69c47aed5..fd1a3cd24c8f 100644 --- a/sys/netinet/ip_icmp.c +++ b/sys/netinet/ip_icmp.c @@ -965,8 +965,7 @@ icmp_verify_redirect_gateway(struct sockaddr_in *src, struct sockaddr_in *dst, if ((ifa = ifa_ifwithnet((struct sockaddr *)gateway, 0, fibnum))==NULL) return (ENETUNREACH); - /* TODO: fib-aware. */ - if (ifa_ifwithaddr_check((struct sockaddr *)gateway)) + if (ifa_ifwithaddr_fib_check((struct sockaddr *)gateway, fibnum)) return (EHOSTUNREACH); nh = fib4_lookup(fibnum, dst->sin_addr, 0, NHR_NONE, 0); From nobody Fri Jul 24 11:20:41 2026 X-Original-To: dev-commits-src-main@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 4h65By1W7gz6ljCD for ; Fri, 24 Jul 2026 11:20:42 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h65By0Nvvz4P7C for ; Fri, 24 Jul 2026 11:20:42 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784892042; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=A4NTRJp7gtiPI7HxLjx4pI2+/+8/LXGzKqEQDJyTZdQ=; b=gN+GpgCcmnY7Cz2XFydSf+6Nk5n0/gKKzq1ms/wfDr/ALUx//3HCRDYECa3ZrdcvGeMkGw isbOcaC/pLP1tXOjZft5jEXIqbaKAhRP5hYRpG8dIv1CUt0//0e22cOMcaPvg3kBGOsAD+ XKPbGm6DCIRSe3qCYxXBVkq+bTXIOQQKAG9i3un8WD6pA8xe0KrQh8UaeaQFPc0fJcf0G1 q8IRAZR7KK/tCsG/NGgZV5XSiEvIqv8EJacNdlGFVPhn6aG78MTJOLoS9XyipeV9Mlg6h6 J8BrJ0eeRcVBwLT2V7m+y1MqB6yZcEIC3/cVqMFV0ZijAXy3NDbWyB+gx0edgQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784892042; a=rsa-sha256; cv=none; b=LKs0JtVCM0846oQleWGEiYqH3EXqxVrFw+a2LmxifS2mkfkZ4II1S3djsfXaO7AgW2HI/h Xm9wqjLSRH3ejW7dm/uPad+q1aP2kRQgFE7EKszU9wqnwNOGZMFMox7esprqe46DHbp+T3 2wKAHp9XosZmC/w3HkxBj4Y0jdceBUPWiL+36kSClfW6vxnoAWbWJWFPjnZ+ix56gMttKl JF2cC8d+3RY/7T02lpHgcBRw+V6PTDwVJZB1+ejDsi6b3rMlegI5Viq5Hqsion57zwF9LV TCwhaWPHngSzDjgEMQeF6qk6xGrcn4JRJSkEkqOEoN/pV+Fj5I7wEszdxpCY+w== 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=1784892042; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=A4NTRJp7gtiPI7HxLjx4pI2+/+8/LXGzKqEQDJyTZdQ=; b=uGP0PUNkXI0+1siUo68OGkFSbO1C49hF71/wrTQzAv9ksbp1xi6rHVwqaQUBpew8PQ7QsP berfoRR6XGM2cn+DS8ZyMuvwenB4sIxBdmnVHZfd45I8T6cXWbk7tOqrvaskRTKz9e77Bz kR4NkDjem30qEC8XSZj1cCz1FhbzQjXEJoAuCPm/0AltN0A2793PJ0HYqguykkma3piqc+ gIwksGnqzWJqtF0tzq2zHiN4iQYX5YusBTGDGnnN/o93ZrS728Q1vvqUjpgeYLpeZRYCAb VMh/tq1K2dZKab2zRc9EO6ZnfAt9Fm2x2ubPlby5/X7/eeIs9VHq01lTJZt0UQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h65Bx64Hbzp3G for ; Fri, 24 Jul 2026 11:20:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 45cd4 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 11:20:41 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: giacomo From: Christos Margiolis Subject: git: d83e42234f76 - main - cuse: Fix server reference leak in cuse_client_open() List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: christos X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d83e42234f76504a1ff7f4309ad629b6644bfb16 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 11:20:41 +0000 Message-Id: <6a634a89.45cd4.76dcfac@gitrepo.freebsd.org> The branch main has been updated by christos: URL: https://cgit.FreeBSD.org/src/commit/?id=d83e42234f76504a1ff7f4309ad629b6644bfb16 commit d83e42234f76504a1ff7f4309ad629b6644bfb16 Author: giacomo AuthorDate: 2026-07-15 12:10:54 +0000 Commit: Christos Margiolis CommitDate: 2026-07-24 11:20:09 +0000 cuse: Fix server reference leak in cuse_client_open() If the server is closing (or the device node is going away), or if devfs_set_cdevpriv() fails, cuse_client_open() returns with the server reference taken at the top of the function still held and the newly allocated client still linked on pcs->hcli. Since cuse_client_free() has not been registered as the cdevpriv destructor at that point, nothing ever undoes this work: every open() that races the is_closing window permanently leaks one server reference and one cuse_client. A leaked reference is fatal on server exit: cuse_server_free() busy-waits in an uninterruptible pause("W", hz) loop until pcs->refs drops to 1, which now never happens, so the exiting server process (e.g. virtual_oss(8)) is left wedged in state "D", immune to SIGKILL, cuse.ko is pinned (kldunload hangs too), and only a reboot recovers. Before 634e578ac7b0 the is_closing error path dropped the reference by calling devfs_clear_cdevpriv(), which ran the cuse_client_free() destructor. That commit moved devfs_set_cdevpriv() after the is_closing check to fix the panic paths, but left both error returns without any cleanup. Fix by calling cuse_client_free() directly on both error paths. The client is fully constructed and linked on pcs->hcli at these points, which is exactly the state cuse_client_free() expects. PR: 296291 Fixes: 634e578ac7b0 ("cuse: Fix cdevpriv bugs in cuse_client_open()") Assisted-By: Claude Opus 4.8 (claude-opus-4-8) Signed-off-by: giacomo MFC after: 2 weeks Reviewed by: christos Pull-Request: https://github.com/freebsd/freebsd-src/pull/2324 --- sys/fs/cuse/cuse.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sys/fs/cuse/cuse.c b/sys/fs/cuse/cuse.c index 8f67c4b5572b..ef786d125c15 100644 --- a/sys/fs/cuse/cuse.c +++ b/sys/fs/cuse/cuse.c @@ -1546,11 +1546,19 @@ cuse_client_open(struct cdev *dev, int fflags, int devtype, struct thread *td) } cuse_server_unlock(pcs); - if (error != 0) + /* + * On error, free the client and unref the server, so that the + * exiting server process does not become unkillable. + */ + if (error != 0) { + cuse_client_free(pcc); return (error); + } - if ((error = devfs_set_cdevpriv(pcc, &cuse_client_free)) != 0) + if ((error = devfs_set_cdevpriv(pcc, &cuse_client_free)) != 0) { + cuse_client_free(pcc); return (error); + } pccmd = &pcc->cmds[CUSE_CMD_OPEN]; From nobody Fri Jul 24 11:20:40 2026 X-Original-To: dev-commits-src-main@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 4h65C25bh4z6lj91 for ; Fri, 24 Jul 2026 11:20:46 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h65C22Dn2z4PNf for ; Fri, 24 Jul 2026 11:20:46 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784892046; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=m7ztGspuS/rCBk5VI8lb4DDo4uhPKL3SkqMhDW2/x28=; b=S4L86TGODNLx8dZx1dyYKynfTdlQPupM/Lk5hmhhVzDhzS5c7reuNUCSpznJo5IYybTnsf +ZA85Gz10tRdXMZ1ykSzFo/ZxCbzY5LHwNuLIeaF91vst4qZf/unNdymUOL6+EPd2pWdW4 OA4AJIkEc5FPVBPZOgmAWNa1714VEdHXZ3u/lJkJ/3lfHRlSs7eU8hiIuMSp0D45yUE3zU zvn79E7XMCkhYF5Mf2Bv5ZP394Bwm0Z3uIIExpUSIBMKI72TMMgEtw90V+eVlcAykIhyzx YH2f8/ytpnR9GSplT80AEktS6CMPminHngdx90p/psB+RN/vC1gbnu3qCn/l7g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784892046; a=rsa-sha256; cv=none; b=R9P1FQnypWfyIUr45nCTmaq0A+F8FVWCOEIxwrok2lwbEhVZF15fuQXud9qycNedV6sX8g ezZpangowD5ErL30NNW2O0RuGwnmkpA0V6no44Jx+vtczzlrThxkmB+sCcl/ICEIHN5vEY CbInm6KA9DwRc1/T95LcfX96f2J7gl+PrmETiSspS1VDUUYvYe8BJmRrh31/2hmJJvqiM/ 0djjcOYneLboZ69xRE5f5pwEwHxmKZHhx7Ww8li/uZxonUEoaxNkqG1JMF5FZFzcckE4O6 +yPAfA4GLL95lidgEcF1E7Xrtxr8tVSIIAv9w0jwFr1LQFFhVGSlM7gFT/PT3Q== 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=1784892046; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=m7ztGspuS/rCBk5VI8lb4DDo4uhPKL3SkqMhDW2/x28=; b=crdUj+6JTsb7xEWZzLhu3WlLyoplVrIx+JiUhSVk1GN1q31DojMbh8lFqspFUexaMhJzyt FCl4cA8vRl0zE764QYtDQu5YxiMEmjfWYfD05tiIstEEgiY+X0yCnUlf1MqcQoAn0zo30n bAHU7znaGeWoJH1PMEqTHRRHO9Tb4jeEu53cBqr+MUX+TwX+1bf9YjBdffZZj3+98KOTyQ 8CmE6UaBbXilgs4932I7T7VK/9lelCITArCkFk9ZF8uHL+W1KF5sMqs+ArR5Xzdm9YSP17 JRk5B84HrLJcow4wRovFNK5UKOLB+fWYGqLCdtQKt8XSfT6nM1Q87byrzhmijg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h65C20T4JzprB for ; Fri, 24 Jul 2026 11:20:46 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 45716 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 11:20:40 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: giacomo From: Christos Margiolis Subject: git: 755685dd665e - main - snd_uaudio: Don't let an idle stream reprogram a shared UAC2 clock List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: christos X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 755685dd665ef209912c59da6a7d0e7f2c9f464b Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 11:20:40 +0000 Message-Id: <6a634a88.45716.3ab0676@gitrepo.freebsd.org> The branch main has been updated by christos: URL: https://cgit.FreeBSD.org/src/commit/?id=755685dd665ef209912c59da6a7d0e7f2c9f464b commit 755685dd665ef209912c59da6a7d0e7f2c9f464b Author: giacomo AuthorDate: 2026-07-15 11:34:34 +0000 Commit: Christos Margiolis CommitDate: 2026-07-24 11:20:08 +0000 snd_uaudio: Don't let an idle stream reprogram a shared UAC2 clock Some UAC2 devices expose a single Clock Source entity that is shared between their playback and capture interfaces (it appears in both the output and input clock bitmaps). On such a device uaudio(4) programs the sample rate for both directions when a stream starts. If playback runs at a 44.1 kHz-family rate while the idle capture channel is left at its 48 kHz-family default, the capture SET_CUR(UA20_CS_SAM_FREQ_CONTROL) is issued after the playback one and overwrites the rate on the shared clock. The device then runs at ~48 kHz while the playback stream carries 44.1 kHz data. Consuming samples faster than they arrive, the device repeatedly runs out of data, loses sync with the playback stream, and re-locks onto it (audible dropouts, front-panel play/idle flicker). The 48 kHz family is unaffected because both directions then agree on the rate. Fix it in three parts: - Add a shared-clock guard: before issuing SET_CUR to a clock id, if that clock is shared between playback and capture and the other direction is already streaming at a different rate, skip it. The first active stream owns the clock; a later one follows it. - When the recording channel is auto-started only as a source of jitter information for asynchronous playback, align its nominal rate to the playback rate before starting it, so it neither reprograms the shared clock to a conflicting rate nor produces mismatched frame sizes. - Always submit the explicit-feedback SYNC transfer so dev.pcm.%d.feedback_rate stays live as a diagnostic even when a capture stream is present. Reproduced on an OKTO RESEARCH DAC8 STEREO (0x152a:0x88c5), whose vestigial capture interface never streams; the same device plays the 44.1 kHz family correctly under Linux's snd-usb-audio. As a side effect, this patch also fixes the sample rate bug mentioned in the BUGS section of sound(4)'s man page, where a device needs to have the same sample rate set for both playback and recording in order to work properly. PR: 295933 Assisted-By: Claude Opus 4.8 (claude-opus-4-8) Signed-off-by: giacomo MFC after: 2 weeks Reviewed by: christos Pull-Request: https://github.com/freebsd/freebsd-src/pull/2323 --- sys/dev/sound/usb/uaudio.c | 103 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 95 insertions(+), 8 deletions(-) diff --git a/sys/dev/sound/usb/uaudio.c b/sys/dev/sound/usb/uaudio.c index 4cdd20315258..c2de07abf0a5 100644 --- a/sys/dev/sound/usb/uaudio.c +++ b/sys/dev/sound/usb/uaudio.c @@ -1358,6 +1358,46 @@ uaudio_max_buffer_size(struct uaudio_chan *ch, uint8_t alt) return (buf_size); } +static bool +uaudio20_clock_is_shared(struct uaudio_softc *sc, unsigned int x) +{ + /* + * A clock entity that feeds both an OUTPUT (playback) and an + * INPUT (capture) terminal shows up in both bitmaps: it is a + * sample clock shared between the two directions. + */ + return ((sc->sc_mixer_clocks.bit_output[x / 8] & (1 << (x % 8))) != 0 && + (sc->sc_mixer_clocks.bit_input[x / 8] & (1 << (x % 8))) != 0); +} + +static uint32_t +uaudio_dir_running_rate(struct uaudio_chan *chans) +{ + unsigned int i; + + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + struct uaudio_chan *ch = &chans[i]; + + if (ch->running != 0 && ch->cur_alt < ch->num_alt) + return (ch->usb_alt[ch->cur_alt].sample_rate); + } + return (0); /* nothing streaming in this direction */ +} + +static bool +uaudio_chan_match_rate(struct uaudio_chan *ch, uint32_t rate, uint8_t *p_alt) +{ + uint8_t x; + + for (x = 0; x != ch->num_alt; x++) { + if (ch->usb_alt[x].sample_rate == rate) { + *p_alt = x; + return (true); + } + } + return (false); +} + static void uaudio_configure_msg_sub(struct uaudio_softc *sc, struct uaudio_chan *chan, int dir) @@ -1455,6 +1495,35 @@ uaudio_configure_msg_sub(struct uaudio_softc *sc, } } + /* + * Shared-clock guard. If this clock entity is + * shared between the playback and capture paths, + * and the OTHER direction is already streaming at + * a different rate, do not reprogram the clock -- + * the rate that is already locked wins. This + * stops an idle or secondary stream from yanking + * the shared clock out from under an active + * stream and dropping USB stream lock. The first + * active stream owns the clock; a later one + * follows it (see uaudio_chan_start(), which + * re-aligns the jitter-info record stream to the + * playback rate before it is started). + */ + if (uaudio20_clock_is_shared(sc, x)) { + uint32_t other = (dir == PCMDIR_PLAY) ? + uaudio_dir_running_rate(sc->sc_rec_chan) : + uaudio_dir_running_rate(sc->sc_play_chan); + + if (other != 0 && + other != chan_alt->sample_rate) { + DPRINTF("shared clock ID=%u busy at " + "%u Hz; not reprogramming to " + "%u Hz\n", x, other, + chan_alt->sample_rate); + continue; + } + } + if (uaudio20_set_speed(sc->sc_udev, sc->sc_mixer_iface_no, x, chan_alt->sample_rate)) { /* @@ -2334,13 +2403,10 @@ uaudio_chan_play_sync_callback(struct usb_xfer *xfer, usb_error_t error) case USB_ST_SETUP: /* - * Check if the recording stream can be used as a - * source of jitter information to save some - * isochronous bandwidth: + * Submit the transfer even when the recording stream + * provides the jitter information, so that the feedback + * rate keeps being sampled for diagnostic purposes. */ - if (ch->priv_sc->sc_rec_chan[i].num_alt != 0 && - uaudio_debug == 0) - break; usbd_xfer_set_frames(xfer, 1); usbd_xfer_set_frame_len(xfer, 0, usbd_xfer_max_framelen(xfer)); usbd_transfer_submit(xfer); @@ -2884,12 +2950,33 @@ uaudio_chan_start(struct uaudio_chan *ch) if (uaudio_chan_need_both( &sc->sc_play_chan[i], &sc->sc_rec_chan[i])) { + struct uaudio_chan *ch_play = &sc->sc_play_chan[i]; + struct uaudio_chan *ch_rec = &sc->sc_rec_chan[i]; + uint8_t rec_alt; + + /* + * The recording channel is only being started as a + * source of jitter information for the playback + * stream. Align its nominal rate with the + * playback rate so that (a) it does not reprogram + * a sample clock shared with the playback path to + * a conflicting rate, and (b) its expected frame + * sizes match what the device actually produces, + * keeping the derived jitter information valid. + * The USB explore lock is held here, which also + * serializes against uaudio_chan_set_param_speed(). + */ + if (uaudio_chan_match_rate(ch_rec, + ch_play->usb_alt[ch_play->set_alt].sample_rate, + &rec_alt)) + ch_rec->set_alt = rec_alt; + /* * Start both endpoints because of need for * jitter information: */ - uaudio_chan_reconfigure(&sc->sc_rec_chan[i], CHAN_OP_START); - uaudio_chan_reconfigure(&sc->sc_play_chan[i], CHAN_OP_START); + uaudio_chan_reconfigure(ch_rec, CHAN_OP_START); + uaudio_chan_reconfigure(ch_play, CHAN_OP_START); } else { uaudio_chan_reconfigure(ch, CHAN_OP_START); } From nobody Fri Jul 24 13:59:13 2026 X-Original-To: dev-commits-src-main@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 4h68jy50Jzz6mBGq for ; Fri, 24 Jul 2026 13:59:18 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h68jy4QYnz3MCV for ; Fri, 24 Jul 2026 13:59:18 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784901558; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=oiNCe/YI5QT/d/5rjqyQHoMZDdHyDxIiIWflyQk1RJE=; b=i0SNfnbQce6Y0cGaI9EwXrAGpT4dyQxaSKe9yT7kcyU/e4U/M30PoV+aAZfGgWtTTR0OOP ux393fsxu+Jsy2eq1ulm1drpopsQbYB8I1jatEK5JpvCn4J8G81y8hXUmto+f+qSKgim4z NpVBg2oWox0T+lf6KglN8SAmfxIgCZ0wVgKMBmyQTYxZhJXE6+OrS1G+SJnSTdJYJPHeep 4SlYXctxM4bYZ8uhdbow9XAi7xM94leK2mTuRjOg9+0yI7wTUw+fSP5LphJYwv4k6ZQPby cgnkduaL+yCpOjvw7t8QEi0WBw45X35wsBY3SinN6isDej8uzz0/avGng0jmdg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784901558; a=rsa-sha256; cv=none; b=xbjvV4hisEqhV40GR0JW6vjMgb+wIyMphn7yUvhw6dRW9FNZbxVjjaSqbnZuwphbkHAH+L SWijHoNeRL+dJUW+r5JrimjYuV5WmlR6BKajwYoZLr0h6bYcA+3U7Y9nKXLfARdYhyekIC HjHivIkw9OjDR1qfrz4KsoMu2TERbwEQGsCkmIEDjTn1q3TfffD2K1bqnxZwtqRo+Qz5Hj tWLGA5RL4W6cAxJk+ZICVs8cgZksidFqEqX4mywaQsBzkE8Vwk9c+qxUdsuqGC9FSyRlvs hIJ8Hd7HEf5SvsRI8XaTbnjnGsACAU/bWvssuP1a8nzhOrBnFlPg7++Bhf8uuQ== 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=1784901558; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=oiNCe/YI5QT/d/5rjqyQHoMZDdHyDxIiIWflyQk1RJE=; b=sPhHzYyCDYxkBc90w8s36bSwcFMEDdThw2asQBmjZttvOIiAMu3S3H/Tqpo58Qvxa4cHU8 inWth9s8RWXqVmV6eextVLwxIKRCJ4zKGI62bZcU+AE+WAmm8d7udtPfLPH2/2s+WOdfQC CJdXRavg3R9ec0AAut8fxrdeqseVUSlyVgNZB5bJZfPDzY3bbaj6V/P2u0ratkyh18qhoa lQfdPaboS7hYGZeMY+OT6yz5u3Sd1J2xyTnTbqSU/9glY9UT782pzMsG5Z3f9q3zaG4XyX JuX4SFtd4vdcdwcGLN5wB1l6ayLvMHlAB0sfJghsUWEe9sbsxBrFFU1vtx4/aA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h68jy36y6zt82 for ; Fri, 24 Jul 2026 13:59:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 26412 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 13:59:13 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Kevin Bowling From: Christos Margiolis Subject: git: 967e86d1ef2a - main - sound: Scale PCM secondary buffers by byte rate List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: christos X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 967e86d1ef2ac8711c0ae7be353a9c08186f4e6f Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 13:59:13 +0000 Message-Id: <6a636fb1.26412.26a07c1d@gitrepo.freebsd.org> The branch main has been updated by christos: URL: https://cgit.FreeBSD.org/src/commit/?id=967e86d1ef2ac8711c0ae7be353a9c08186f4e6f commit 967e86d1ef2ac8711c0ae7be353a9c08186f4e6f Author: Kevin Bowling AuthorDate: 2026-07-24 13:57:27 +0000 Commit: Christos Margiolis CommitDate: 2026-07-24 13:58:14 +0000 sound: Scale PCM secondary buffers by byte rate The fixed 128 KiB secondary buffer cap dates from stereo-sized streams. High channel-count or high sample-width OSS streams can consume most of that budget in one graph quantum, leaving too little room for capture catch-up or playback headroom. Keep 128 KiB as the low-rate floor, but derive the effective soft-ring cap from the channel byte rate, clamped to 4 MiB. Use that per-channel cap when resizing the soft buffer and when clamping SNDCTL_DSP_SETFRAGMENT requests. Also clamp SNDCTL_DSP_LOW_WATER to the current soft-buffer size so an impossible readiness threshold cannot make poll/select wait forever. MFC after: 3 weeks Reviewed by: christos Differential Revision: https://reviews.freebsd.org/D58064 --- sys/dev/sound/pcm/channel.c | 62 +++++++++++++++++++++++++++++++++------------ sys/dev/sound/pcm/channel.h | 30 +++++++++++++++++----- sys/dev/sound/pcm/dsp.c | 38 +++++++++++++++++++-------- 3 files changed, 96 insertions(+), 34 deletions(-) diff --git a/sys/dev/sound/pcm/channel.c b/sys/dev/sound/pcm/channel.c index ff7620c772c3..21c223c61205 100644 --- a/sys/dev/sound/pcm/channel.c +++ b/sys/dev/sound/pcm/channel.c @@ -1657,15 +1657,30 @@ round_pow2(u_int32_t v) return ret; } +u_int32_t +chn_2ndbufmaxsize(struct pcm_channel *c) +{ + struct snd_dbuf *bs; + uint64_t maxsize; + + CHN_LOCKASSERT(c); + + bs = c->bufsoft; + maxsize = (uint64_t)bs->align * bs->spd * CHN_2NDBUFTIME_MS / 1000; + RANGE(maxsize, CHN_2NDBUFSIZE_MIN, CHN_2NDBUFSIZE_MAX); + + return ((u_int32_t)maxsize); +} + static u_int32_t -round_blksz(u_int32_t v, int round) +round_blksz(u_int32_t v, int round, u_int32_t maxsize) { u_int32_t ret, tmp; if (round < 1) round = 1; - ret = min(round_pow2(v), CHN_2NDBUFMAXSIZE >> 1); + ret = min(round_pow2(v), maxsize >> 1); if (ret > v && (ret >> 1) > 0 && (ret >> 1) >= ((v * 3) >> 2)) ret >>= 1; @@ -1780,14 +1795,16 @@ chn_calclatency(int dir, int latency, int bps, u_int32_t datarate, if (latency < CHN_LATENCY_MIN || latency > CHN_LATENCY_MAX || bps < 1 || datarate < 1 || !(dir == PCMDIR_PLAY || dir == PCMDIR_REC)) { + if (max < CHN_2NDBUFSIZE_MIN) + max = CHN_2NDBUFSIZE_MIN; if (rblksz != NULL) - *rblksz = CHN_2NDBUFMAXSIZE >> 1; + *rblksz = max >> 1; if (rblkcnt != NULL) *rblkcnt = 2; printf("%s(): FAILED dir=%d latency=%d bps=%d " "datarate=%u max=%u\n", __func__, dir, latency, bps, datarate, max); - return CHN_2NDBUFMAXSIZE; + return max; } lprofile = chn_latency_profile; @@ -1804,7 +1821,7 @@ chn_calclatency(int dir, int latency, int bps, u_int32_t datarate, datarate)); if (bufsz > max) bufsz = max; - blksz = round_blksz(bufsz >> blkcnt, bps); + blksz = round_blksz(bufsz >> blkcnt, bps, max); if (rblksz != NULL) *rblksz = blksz; @@ -1821,6 +1838,7 @@ chn_resizebuf(struct pcm_channel *c, int latency, struct snd_dbuf *b, *bs, *pb; int sblksz, sblkcnt, hblksz, hblkcnt, limit = 0, nsblksz, nsblkcnt; int ret; + u_int32_t maxsize; CHN_LOCKASSERT(c); @@ -1843,14 +1861,15 @@ chn_resizebuf(struct pcm_channel *c, int latency, bs = c->bufsoft; b = c->bufhard; + maxsize = chn_2ndbufmaxsize(c); if (!(blksz == 0 || blkcnt == -1) && (blksz < 16 || blksz < bs->align || blkcnt < 2 || - (blksz * blkcnt) > CHN_2NDBUFMAXSIZE)) + (uint64_t)blksz * blkcnt > maxsize)) return EINVAL; chn_calclatency(c->direction, latency, bs->align, - bs->align * bs->spd, CHN_2NDBUFMAXSIZE, + bs->align * bs->spd, maxsize, &sblksz, &sblkcnt); if (blksz == 0 || blkcnt == -1) { @@ -1871,7 +1890,7 @@ chn_resizebuf(struct pcm_channel *c, int latency, * defeat the purpose of having custom control. The least * we can do is round it to the nearest ^2 and align it. */ - sblksz = round_blksz(blksz, bs->align); + sblksz = round_blksz(blksz, bs->align, maxsize); sblkcnt = round_pow2(blkcnt); } @@ -1890,18 +1909,28 @@ chn_resizebuf(struct pcm_channel *c, int latency, sndbuf_xbytes(pb->blksz, pb, bs) * 2 : 0; } } else { + /* + * The byte-rate-scaled cap applies to the secondary buffer + * only. It exists to absorb userland scheduling latency, + * which the secondary buffer alone must cover; hardware + * buffer geometry keeps the historical cap, since enlarging + * it would change fragment sizes and interrupt cadence + * visible to drivers, and remains bounded by b->maxsize + * below. + */ hblkcnt = 2; if (c->flags & CHN_F_HAS_SIZE) { hblksz = round_blksz(sndbuf_xbytes(sblksz, bs, b), - b->align); + b->align, CHN_2NDBUFSIZE_MIN); hblkcnt = round_pow2(bs->blkcnt); } else chn_calclatency(c->direction, latency, b->align, b->align * b->spd, - CHN_2NDBUFMAXSIZE, &hblksz, &hblkcnt); + CHN_2NDBUFSIZE_MIN, &hblksz, &hblkcnt); if ((hblksz << 1) > b->maxsize) - hblksz = round_blksz(b->maxsize >> 1, b->align); + hblksz = round_blksz(b->maxsize >> 1, b->align, + CHN_2NDBUFSIZE_MIN); while ((hblksz * hblkcnt) > b->maxsize) { if (hblkcnt < 4) @@ -1922,7 +1951,8 @@ chn_resizebuf(struct pcm_channel *c, int latency, if (!CHN_EMPTY(c, children)) { nsblksz = round_blksz( - sndbuf_xbytes(b->blksz, b, bs), bs->align); + sndbuf_xbytes(b->blksz, b, bs), bs->align, + maxsize); nsblkcnt = b->blkcnt; if (c->direction == PCMDIR_PLAY) { do { @@ -1938,13 +1968,13 @@ chn_resizebuf(struct pcm_channel *c, int latency, limit = sndbuf_xbytes(b->blksz, b, bs) * 2; } - if (limit > CHN_2NDBUFMAXSIZE) - limit = CHN_2NDBUFMAXSIZE; + if ((u_int32_t)limit > maxsize) + limit = maxsize; - while ((sblksz * sblkcnt) < limit) + while ((uint64_t)sblksz * sblkcnt < (uint64_t)limit) sblkcnt <<= 1; - while ((sblksz * sblkcnt) > CHN_2NDBUFMAXSIZE) { + while ((uint64_t)sblksz * sblkcnt > maxsize) { if (sblkcnt < 4) sblksz >>= 1; else diff --git a/sys/dev/sound/pcm/channel.h b/sys/dev/sound/pcm/channel.h index c7f5bf93b8e5..c78c25dac13b 100644 --- a/sys/dev/sound/pcm/channel.h +++ b/sys/dev/sound/pcm/channel.h @@ -430,15 +430,31 @@ enum { #define CHN_TIMEOUT_MIN 1 #define CHN_TIMEOUT_MAX 10 -/* - * This should be large enough to hold all pcm data between - * tsleeps in chn_{read,write} at the highest sample rate. - * (which is usually 48kHz * 16bit * stereo = 192000 bytes/sec) - */ +/* Default block size for the secondary buffer. */ #define CHN_2NDBUFBLKSIZE (2 * 1024) /* The total number of blocks per secondary bufhard. */ #define CHN_2NDBUFBLKNUM (32) -/* The size of a whole secondary bufhard. */ -#define CHN_2NDBUFMAXSIZE (131072) +/* + * The secondary buffer cap scales with the channel byte rate, targeting + * CHN_2NDBUFTIME_MS of stream so that all pcm data between tsleeps in + * chn_{read,write} fits, clamped to [CHN_2NDBUFSIZE_MIN, + * CHN_2NDBUFSIZE_MAX]. + * + * The floor is the historical secondary buffer size and preserves memory + * use for low byte-rate streams; it holds ~680 ms at the once-typical + * 48kHz * 16bit * stereo rate (192000 bytes/sec), well above the target + * (~38 KiB there). + * + * The ceiling bounds per-channel buffer memory. Buffers are allocated at + * the derived size, so only streams that actually run at high byte rates + * approach it. It holds the full target through MADI-class streams + * (64ch * 32-bit * 48kHz, ~12.3 MB/s); beyond that, coverage shrinks + * proportionally (e.g. ~85 ms at 64ch * 32-bit * 192kHz). + */ +#define CHN_2NDBUFSIZE_MIN (131072) +#define CHN_2NDBUFSIZE_MAX (4 * 1024 * 1024) +#define CHN_2NDBUFTIME_MS 200 + +u_int32_t chn_2ndbufmaxsize(struct pcm_channel *); #define CHANNEL_DECLARE(name) static DEFINE_CLASS(name, name ## _methods, sizeof(struct kobj)) diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c index 0a5063410d24..f49df6e8a8c6 100644 --- a/sys/dev/sound/pcm/dsp.c +++ b/sys/dev/sound/pcm/dsp.c @@ -109,6 +109,25 @@ static int dsp_oss_setsong(struct pcm_channel *wrch, struct pcm_channel *rdch, o static int dsp_oss_setname(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *name); #endif +static uint32_t +dsp_clamp_fragments(uint32_t maxfrags, uint32_t fragsz, uint32_t maxsize) +{ + if (maxfrags == 0) + maxfrags = maxsize / fragsz; + if (maxfrags < 2) + maxfrags = 2; + if ((uint64_t)maxfrags * fragsz > maxsize) + maxfrags = maxsize / fragsz; + return (maxfrags); +} + +static unsigned int +dsp_low_water(struct pcm_channel *ch, int lw) +{ + RANGE(lw, 1, ch->bufsoft->bufsize); + return ((unsigned int)lw); +} + int dsp_make_dev(device_t dev) { @@ -1244,18 +1263,13 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode, RANGE(fragln, 4, 16); fragsz = 1 << fragln; - if (maxfrags == 0) - maxfrags = CHN_2NDBUFMAXSIZE / fragsz; - if (maxfrags < 2) - maxfrags = 2; - if (maxfrags * fragsz > CHN_2NDBUFMAXSIZE) - maxfrags = CHN_2NDBUFMAXSIZE / fragsz; - DEB(printf("SNDCTL_DSP_SETFRAGMENT %d frags, %d sz\n", maxfrags, fragsz)); PCM_ACQUIRE_QUICK(d); if (rdch) { CHN_LOCK(rdch); - ret = chn_setblocksize(rdch, maxfrags, fragsz); + ret = chn_setblocksize(rdch, + dsp_clamp_fragments(maxfrags, fragsz, + chn_2ndbufmaxsize(rdch)), fragsz); r_maxfrags = rdch->bufsoft->blkcnt; r_fragsz = rdch->bufsoft->blksz; CHN_UNLOCK(rdch); @@ -1265,7 +1279,9 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode, } if (wrch && ret == 0) { CHN_LOCK(wrch); - ret = chn_setblocksize(wrch, maxfrags, fragsz); + ret = chn_setblocksize(wrch, + dsp_clamp_fragments(maxfrags, fragsz, + chn_2ndbufmaxsize(wrch)), fragsz); maxfrags = wrch->bufsoft->blkcnt; fragsz = wrch->bufsoft->blksz; CHN_UNLOCK(wrch); @@ -1653,12 +1669,12 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode, */ if (wrch != NULL) { CHN_LOCK(wrch); - wrch->lw = (*arg_i > 1) ? *arg_i : 1; + wrch->lw = dsp_low_water(wrch, *arg_i); CHN_UNLOCK(wrch); } if (rdch != NULL) { CHN_LOCK(rdch); - rdch->lw = (*arg_i > 1) ? *arg_i : 1; + rdch->lw = dsp_low_water(rdch, *arg_i); CHN_UNLOCK(rdch); } break; From nobody Fri Jul 24 14:39:58 2026 X-Original-To: dev-commits-src-main@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 4h69d34CGQz6mDxs; Fri, 24 Jul 2026 14:40:07 +0000 (UTC) (envelope-from ronald-lists@klop.ws) Received: from smtp-relay-int.realworks.nl (smtp-relay-int.realworks.nl [31.134.205.98]) (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 did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4h69d20LSSz3Qkt; Fri, 24 Jul 2026 14:40:05 +0000 (UTC) (envelope-from ronald-lists@klop.ws) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=klop.ws header.s=rw2 header.b=K2CHO9ny; spf=pass (mx1.freebsd.org: domain of ronald-lists@klop.ws designates 31.134.205.98 as permitted sender) smtp.mailfrom=ronald-lists@klop.ws; dmarc=pass (policy=quarantine) header.from=klop.ws Date: Fri, 24 Jul 2026 16:39:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=klop.ws; s=rw2; t=1784903998; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=+q6RD0/WZkt4Nuh7FvyGCnld0F6bXXz2U9FfDI0ZClU=; b=K2CHO9nySfFGy0wbX+TjshZFdgGNseWkrAeE8HR4kAeNT2dicSFwdv2hiu6MEjsDJg9jjG zpGpUqIU20yakEept85IliGQqBG9BK2d0OUTc0Nyq7YA3bFk704h4tWVBIFUDFeykzg6uo Zwxn3tWA4pdRZWvA/PsVBb4bLH8WPbUkjYAVq2Hv8Wj1Cd4SF1Znz0wXwIcIV5DA5wzu48 xGf4JhRYGvM/XTHvCu7EaX//YAJmzOUYt1pL5sQDNujFCWirOwwsCA19iEAwY1BCm0aunf 1pxfsY2ZuuxYOIbNickvYUf+LpvoQdEWuZgB6T2gIaNnumA/ePrt2uP5veEK7g== From: Ronald Klop To: Richard Scheffenegger Cc: dev-commits-src-all@FreeBSD.org, src-committers@FreeBSD.org, dev-commits-src-main@FreeBSD.org Message-ID: <1164685882.1011.1784903998087@localhost> In-Reply-To: <6a5f8e76.23f2e.57e0367f@gitrepo.freebsd.org> References: <6a5f8e76.23f2e.57e0367f@gitrepo.freebsd.org> Subject: Re: git: f22b08443f6a - main - tcp_hostcache: explicitly typecast atomic_load_int to (int) for comparison List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_1010_2101127071.1784903998053" X-Mailer: Realworks (805.141) Importance: Normal X-Priority: 3 (Normal) X-Spamd-Result: default: False [-3.39 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.99)[-0.990]; DMARC_POLICY_ALLOW(-0.50)[klop.ws,quarantine]; MID_RHS_NOT_FQDN(0.50)[]; R_DKIM_ALLOW(-0.20)[klop.ws:s=rw2]; R_SPF_ALLOW(-0.20)[+ip4:31.134.205.64/26]; ONCE_RECEIVED(0.10)[]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:~]; TO_DN_SOME(0.00)[]; ASN(0.00)[asn:51088, ipnet:31.134.200.0/21, country:NL]; RCVD_COUNT_ZERO(0.00)[0]; MLMMJ_DEST(0.00)[dev-commits-src-all@FreeBSD.org,dev-commits-src-main@FreeBSD.org]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; FROM_EQ_ENVFROM(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; HAS_X_PRIO_THREE(0.00)[3]; DKIM_TRACE(0.00)[klop.ws:+] X-Rspamd-Queue-Id: 4h69d20LSSz3Qkt X-Spamd-Bar: --- ------=_Part_1010_2101127071.1784903998053 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, This commit message is telling *what* the diff changes. And is a bit redundant in that sense. I was surprised that the linked review has a very nice explanation of *why* this change was needed. I think it will be very valuable to future commit readers to include the *why* in the commit message. The *why* in the message, the *what* is already in the diff. Regards, Ronald. Van: Richard Scheffenegger Datum: dinsdag, 21 juli 2026 17:21 Aan: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Onderwerp: git: f22b08443f6a - main - tcp_hostcache: explicitly typecast atomic_load_int to (int) for comparison > > The branch main has been updated by rscheff: > > URL: https://cgit.FreeBSD.org/src/commit/?id=f22b08443f6ae3620dd14ade4e2376b8531fd6f3 > > commit f22b08443f6ae3620dd14ade4e2376b8531fd6f3 > Author: Richard Scheffenegger > AuthorDate: 2026-07-21 14:51:02 +0000 > Commit: Richard Scheffenegger > CommitDate: 2026-07-21 15:20:32 +0000 > > tcp_hostcache: explicitly typecast atomic_load_int to (int) for comparison > > Sponsored by: NetApp, Inc. > MFC after: 1 week > Reviewed By: tuexen, #transport, markj > Differential Revision: https://reviews.freebsd.org/D58360 > --- > sys/netinet/tcp_hostcache.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/sys/netinet/tcp_hostcache.c b/sys/netinet/tcp_hostcache.c > index e5c20b6f2475..fbf81b1f2303 100644 > --- a/sys/netinet/tcp_hostcache.c > +++ b/sys/netinet/tcp_hostcache.c > @@ -768,7 +768,7 @@ tcp_hc_purge_internal(int all) > "bucket length out of range at %u: %u", i, > head->hch_length)); > if (all || > - atomic_load_int(&hc_entry->hc_expire) <= 0) { > + (int)atomic_load_int(&hc_entry->hc_expire) <= 0) { > if (hc_prev != NULL) { > KASSERT(hc_entry == > CK_SLIST_NEXT(hc_prev, hc_q), > > > > ------=_Part_1010_2101127071.1784903998053 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: 7bit Hi,

This commit message is telling *what* the diff changes. And is a bit redundant in that sense.

I was surprised that the linked review has a very nice explanation of *why* this change was needed.

I think it will be very valuable to future commit readers to include the *why* in the commit message. The *why* in the message, the *what* is already in the diff.

Regards,
Ronald.

 

Van: Richard Scheffenegger <rscheff@FreeBSD.org>
Datum: dinsdag, 21 juli 2026 17:21
Aan: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Onderwerp: git: f22b08443f6a - main - tcp_hostcache: explicitly typecast atomic_load_int to (int) for comparison

The branch main has been updated by rscheff:

URL: https://cgit.FreeBSD.org/src/commit/?id=f22b08443f6ae3620dd14ade4e2376b8531fd6f3

commit f22b08443f6ae3620dd14ade4e2376b8531fd6f3
Author:     Richard Scheffenegger <rscheff@FreeBSD.org>
AuthorDate: 2026-07-21 14:51:02 +0000
Commit:     Richard Scheffenegger <rscheff@FreeBSD.org>
CommitDate: 2026-07-21 15:20:32 +0000

    tcp_hostcache: explicitly typecast atomic_load_int to (int) for comparison
    
    Sponsored by:   NetApp, Inc.
    MFC after:      1 week
    Reviewed By:    tuexen, #transport, markj
    Differential Revision: https://reviews.freebsd.org/D58360
---
 sys/netinet/tcp_hostcache.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys/netinet/tcp_hostcache.c b/sys/netinet/tcp_hostcache.c
index e5c20b6f2475..fbf81b1f2303 100644
--- a/sys/netinet/tcp_hostcache.c
+++ b/sys/netinet/tcp_hostcache.c
@@ -768,7 +768,7 @@ tcp_hc_purge_internal(int all)
                "bucket length out of range at %u: %u", i,
                head->hch_length));
            if (all ||
-               atomic_load_int(&hc_entry->hc_expire) <= 0) {
+               (int)atomic_load_int(&hc_entry->hc_expire) <= 0) {
                if (hc_prev != NULL) {
                    KASSERT(hc_entry ==
                        CK_SLIST_NEXT(hc_prev, hc_q),
 


  ------=_Part_1010_2101127071.1784903998053-- From nobody Fri Jul 24 14:46:23 2026 X-Original-To: dev-commits-src-main@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 4h69mR64hzz6mFFn; Fri, 24 Jul 2026 14:46:31 +0000 (UTC) (envelope-from ronald-lists@klop.ws) Received: from smtp-relay-int-backup.realworks.nl (smtp-relay-int-backup.realworks.nl [87.255.56.188]) (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 did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4h69mR2t2bz3RCK; Fri, 24 Jul 2026 14:46:31 +0000 (UTC) (envelope-from ronald-lists@klop.ws) Authentication-Results: mx1.freebsd.org; none Received: from smtp-relay-int.realworks.nl (rwvirtual373.colo.realworks.nl [10.0.10.73]) by mailrelayint1.colo2.realworks.nl (Postfix) with ESMTP id 4h69mJ0Tqzz5g; Fri, 24 Jul 2026 16:46:23 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=klop.ws; s=rw2; t=1784904384; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=w/ZYVvMbPx3/pFKCa3v2izmbkvmRjwncdv02LgdYpoQ=; b=BlW2Mc406gxs/UOeTQGJQNs2SZV/z0p/jmyxyWpYo+tR1W11JzquDI8t6cUAmFN97xXYzg ywPaCpurN36e/XRFAfg4V/qyD2nYXNK3F++LR8/sg8OZ1x84e1g7PmsiO/+UokPotioPAI dvszNphlQc0dyP60dbotGJ0f8TO2Rth5bbJuoRqNXFfDe5ARXwI+/XDDjgNp6e6swBcwK5 xGB6s9mjBpVAkNFs5iQ4hLC5EjdVy2oy/O5cFsjHLOzPSNjIDEPDZG262EMkMxAJK5WAlO 8xwkpNLr65eAAHIxWIM1hgOmdnD2At5MpzhxadXRX5QqOeltpOGjaZICkDgL0w== Received: from rwvirtual373.colo.realworks.nl (localhost [127.0.0.1]) by rwvirtual373.colo.realworks.nl (Postfix) with ESMTP id CE5B9140C0D; Fri, 24 Jul 2026 16:46:23 +0200 (CEST) Date: Fri, 24 Jul 2026 16:46:23 +0200 (CEST) From: Ronald Klop To: Christos Margiolis Cc: dev-commits-src-all@FreeBSD.org, src-committers@FreeBSD.org, Kevin Bowling , dev-commits-src-main@FreeBSD.org Message-ID: <20302724.1251.1784904383819@localhost> In-Reply-To: <6a636fb1.26412.26a07c1d@gitrepo.freebsd.org> References: <6a636fb1.26412.26a07c1d@gitrepo.freebsd.org> Subject: Re: git: 967e86d1ef2a - main - sound: Scale PCM secondary buffers by byte rate List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_1250_1540401911.1784904383741" X-Mailer: Realworks (805.141) X-Originating-Host: from (83-81-213-118.cable.dynamic.v4.ziggo.nl [83.81.213.118]) by rwvirtual373 [10.0.10.73] with HTTP; Fri, 24 Jul 2026 16:46:23 +0200 Importance: Normal X-Priority: 3 (Normal) X-Originating-User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:153.0) Gecko/20100101 Firefox/153.0 X-Rspamd-Queue-Id: 4h69mR2t2bz3RCK X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:38930, ipnet:87.255.32.0/19, country:NL] X-Spamd-Bar: ---- ------=_Part_1250_1540401911.1784904383741 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Is this a good candidate for Relnotes: yes in the commit message? Regards, Ronald. Van: Christos Margiolis Datum: vrijdag, 24 juli 2026 15:59 Aan: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org CC: Kevin Bowling Onderwerp: git: 967e86d1ef2a - main - sound: Scale PCM secondary buffers by byte rate > > The branch main has been updated by christos: > > URL: https://cgit.FreeBSD.org/src/commit/?id=967e86d1ef2ac8711c0ae7be353a9c08186f4e6f > > commit 967e86d1ef2ac8711c0ae7be353a9c08186f4e6f > Author: Kevin Bowling > AuthorDate: 2026-07-24 13:57:27 +0000 > Commit: Christos Margiolis > CommitDate: 2026-07-24 13:58:14 +0000 > > sound: Scale PCM secondary buffers by byte rate > > The fixed 128 KiB secondary buffer cap dates from stereo-sized streams. > High channel-count or high sample-width OSS streams can consume most of > that budget in one graph quantum, leaving too little room for capture > catch-up or playback headroom. > > Keep 128 KiB as the low-rate floor, but derive the effective soft-ring > cap from the channel byte rate, clamped to 4 MiB. Use that per-channel > cap when resizing the soft buffer and when clamping > SNDCTL_DSP_SETFRAGMENT requests. > > Also clamp SNDCTL_DSP_LOW_WATER to the current soft-buffer size so an > impossible readiness threshold cannot make poll/select wait forever. > > MFC after: 3 weeks > Reviewed by: christos > Differential Revision: https://reviews.freebsd.org/D58064 > --- > sys/dev/sound/pcm/channel.c | 62 +++++++++++++++++++++++++++++++++------------ > sys/dev/sound/pcm/channel.h | 30 +++++++++++++++++----- > sys/dev/sound/pcm/dsp.c | 38 +++++++++++++++++++-------- > 3 files changed, 96 insertions(+), 34 deletions(-) > > diff --git a/sys/dev/sound/pcm/channel.c b/sys/dev/sound/pcm/channel.c > index ff7620c772c3..21c223c61205 100644 > --- a/sys/dev/sound/pcm/channel.c > +++ b/sys/dev/sound/pcm/channel.c > @@ -1657,15 +1657,30 @@ round_pow2(u_int32_t v) > return ret; > } > > +u_int32_t > +chn_2ndbufmaxsize(struct pcm_channel *c) > +{ > + struct snd_dbuf *bs; > + uint64_t maxsize; > + > + CHN_LOCKASSERT(c); > + > + bs = c->bufsoft; > + maxsize = (uint64_t)bs->align * bs->spd * CHN_2NDBUFTIME_MS / 1000; > + RANGE(maxsize, CHN_2NDBUFSIZE_MIN, CHN_2NDBUFSIZE_MAX); > + > + return ((u_int32_t)maxsize); > +} > + > static u_int32_t > -round_blksz(u_int32_t v, int round) > +round_blksz(u_int32_t v, int round, u_int32_t maxsize) > { > u_int32_t ret, tmp; > > if (round < 1) > round = 1; > > - ret = min(round_pow2(v), CHN_2NDBUFMAXSIZE >> 1); > + ret = min(round_pow2(v), maxsize >> 1); > > if (ret > v && (ret >> 1) > 0 && (ret >> 1) >= ((v * 3) >> 2)) > ret >>= 1; > @@ -1780,14 +1795,16 @@ chn_calclatency(int dir, int latency, int bps, u_int32_t datarate, > if (latency < CHN_LATENCY_MIN || latency > CHN_LATENCY_MAX || > bps < 1 || datarate < 1 || > !(dir == PCMDIR_PLAY || dir == PCMDIR_REC)) { > + if (max < CHN_2NDBUFSIZE_MIN) > + max = CHN_2NDBUFSIZE_MIN; > if (rblksz != NULL) > - *rblksz = CHN_2NDBUFMAXSIZE >> 1; > + *rblksz = max >> 1; > if (rblkcnt != NULL) > *rblkcnt = 2; > printf("%s(): FAILED dir=%d latency=%d bps=%d " > "datarate=%u max=%u\n", > __func__, dir, latency, bps, datarate, max); > - return CHN_2NDBUFMAXSIZE; > + return max; > } > > lprofile = chn_latency_profile; > @@ -1804,7 +1821,7 @@ chn_calclatency(int dir, int latency, int bps, u_int32_t datarate, > datarate)); > if (bufsz > max) > bufsz = max; > - blksz = round_blksz(bufsz >> blkcnt, bps); > + blksz = round_blksz(bufsz >> blkcnt, bps, max); > > if (rblksz != NULL) > *rblksz = blksz; > @@ -1821,6 +1838,7 @@ chn_resizebuf(struct pcm_channel *c, int latency, > struct snd_dbuf *b, *bs, *pb; > int sblksz, sblkcnt, hblksz, hblkcnt, limit = 0, nsblksz, nsblkcnt; > int ret; > + u_int32_t maxsize; > > CHN_LOCKASSERT(c); > > @@ -1843,14 +1861,15 @@ chn_resizebuf(struct pcm_channel *c, int latency, > > bs = c->bufsoft; > b = c->bufhard; > + maxsize = chn_2ndbufmaxsize(c); > > if (!(blksz == 0 || blkcnt == -1) && > (blksz < 16 || blksz < bs->align || blkcnt < 2 || > - (blksz * blkcnt) > CHN_2NDBUFMAXSIZE)) > + (uint64_t)blksz * blkcnt > maxsize)) > return EINVAL; > > chn_calclatency(c->direction, latency, bs->align, > - bs->align * bs->spd, CHN_2NDBUFMAXSIZE, > + bs->align * bs->spd, maxsize, > &sblksz, &sblkcnt); > > if (blksz == 0 || blkcnt == -1) { > @@ -1871,7 +1890,7 @@ chn_resizebuf(struct pcm_channel *c, int latency, > * defeat the purpose of having custom control. The least > * we can do is round it to the nearest ^2 and align it. > */ > - sblksz = round_blksz(blksz, bs->align); > + sblksz = round_blksz(blksz, bs->align, maxsize); > sblkcnt = round_pow2(blkcnt); > } > > @@ -1890,18 +1909,28 @@ chn_resizebuf(struct pcm_channel *c, int latency, > sndbuf_xbytes(pb->blksz, pb, bs) * 2 : 0; > } > } else { > + /* > + * The byte-rate-scaled cap applies to the secondary buffer > + * only. It exists to absorb userland scheduling latency, > + * which the secondary buffer alone must cover; hardware > + * buffer geometry keeps the historical cap, since enlarging > + * it would change fragment sizes and interrupt cadence > + * visible to drivers, and remains bounded by b->maxsize > + * below. > + */ > hblkcnt = 2; > if (c->flags & CHN_F_HAS_SIZE) { > hblksz = round_blksz(sndbuf_xbytes(sblksz, bs, b), > - b->align); > + b->align, CHN_2NDBUFSIZE_MIN); > hblkcnt = round_pow2(bs->blkcnt); > } else > chn_calclatency(c->direction, latency, > b->align, b->align * b->spd, > - CHN_2NDBUFMAXSIZE, &hblksz, &hblkcnt); > + CHN_2NDBUFSIZE_MIN, &hblksz, &hblkcnt); > > if ((hblksz << 1) > b->maxsize) > - hblksz = round_blksz(b->maxsize >> 1, b->align); > + hblksz = round_blksz(b->maxsize >> 1, b->align, > + CHN_2NDBUFSIZE_MIN); > > while ((hblksz * hblkcnt) > b->maxsize) { > if (hblkcnt < 4) > @@ -1922,7 +1951,8 @@ chn_resizebuf(struct pcm_channel *c, int latency, > > if (!CHN_EMPTY(c, children)) { > nsblksz = round_blksz( > - sndbuf_xbytes(b->blksz, b, bs), bs->align); > + sndbuf_xbytes(b->blksz, b, bs), bs->align, > + maxsize); > nsblkcnt = b->blkcnt; > if (c->direction == PCMDIR_PLAY) { > do { > @@ -1938,13 +1968,13 @@ chn_resizebuf(struct pcm_channel *c, int latency, > limit = sndbuf_xbytes(b->blksz, b, bs) * 2; > } > > - if (limit > CHN_2NDBUFMAXSIZE) > - limit = CHN_2NDBUFMAXSIZE; > + if ((u_int32_t)limit > maxsize) > + limit = maxsize; > > - while ((sblksz * sblkcnt) < limit) > + while ((uint64_t)sblksz * sblkcnt < (uint64_t)limit) > sblkcnt <<= 1; > > - while ((sblksz * sblkcnt) > CHN_2NDBUFMAXSIZE) { > + while ((uint64_t)sblksz * sblkcnt > maxsize) { > if (sblkcnt < 4) > sblksz >>= 1; > else > diff --git a/sys/dev/sound/pcm/channel.h b/sys/dev/sound/pcm/channel.h > index c7f5bf93b8e5..c78c25dac13b 100644 > --- a/sys/dev/sound/pcm/channel.h > +++ b/sys/dev/sound/pcm/channel.h > @@ -430,15 +430,31 @@ enum { > #define CHN_TIMEOUT_MIN 1 > #define CHN_TIMEOUT_MAX 10 > > -/* > - * This should be large enough to hold all pcm data between > - * tsleeps in chn_{read,write} at the highest sample rate. > - * (which is usually 48kHz * 16bit * stereo = 192000 bytes/sec) > - */ > +/* Default block size for the secondary buffer. */ > #define CHN_2NDBUFBLKSIZE (2 * 1024) > /* The total number of blocks per secondary bufhard. */ > #define CHN_2NDBUFBLKNUM (32) > -/* The size of a whole secondary bufhard. */ > -#define CHN_2NDBUFMAXSIZE (131072) > +/* > + * The secondary buffer cap scales with the channel byte rate, targeting > + * CHN_2NDBUFTIME_MS of stream so that all pcm data between tsleeps in > + * chn_{read,write} fits, clamped to [CHN_2NDBUFSIZE_MIN, > + * CHN_2NDBUFSIZE_MAX]. > + * > + * The floor is the historical secondary buffer size and preserves memory > + * use for low byte-rate streams; it holds ~680 ms at the once-typical > + * 48kHz * 16bit * stereo rate (192000 bytes/sec), well above the target > + * (~38 KiB there). > + * > + * The ceiling bounds per-channel buffer memory. Buffers are allocated at > + * the derived size, so only streams that actually run at high byte rates > + * approach it. It holds the full target through MADI-class streams > + * (64ch * 32-bit * 48kHz, ~12.3 MB/s); beyond that, coverage shrinks > + * proportionally (e.g. ~85 ms at 64ch * 32-bit * 192kHz). > + */ > +#define CHN_2NDBUFSIZE_MIN (131072) > +#define CHN_2NDBUFSIZE_MAX (4 * 1024 * 1024) > +#define CHN_2NDBUFTIME_MS 200 > + > +u_int32_t chn_2ndbufmaxsize(struct pcm_channel *); > > #define CHANNEL_DECLARE(name) static DEFINE_CLASS(name, name ## _methods, sizeof(struct kobj)) > diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c > index 0a5063410d24..f49df6e8a8c6 100644 > --- a/sys/dev/sound/pcm/dsp.c > +++ b/sys/dev/sound/pcm/dsp.c > @@ -109,6 +109,25 @@ static int dsp_oss_setsong(struct pcm_channel *wrch, struct pcm_channel *rdch, o > static int dsp_oss_setname(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *name); > #endif > > +static uint32_t > +dsp_clamp_fragments(uint32_t maxfrags, uint32_t fragsz, uint32_t maxsize) > +{ > + if (maxfrags == 0) > + maxfrags = maxsize / fragsz; > + if (maxfrags < 2) > + maxfrags = 2; > + if ((uint64_t)maxfrags * fragsz > maxsize) > + maxfrags = maxsize / fragsz; > + return (maxfrags); > +} > + > +static unsigned int > +dsp_low_water(struct pcm_channel *ch, int lw) > +{ > + RANGE(lw, 1, ch->bufsoft->bufsize); > + return ((unsigned int)lw); > +} > + > int > dsp_make_dev(device_t dev) > { > @@ -1244,18 +1263,13 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode, > RANGE(fragln, 4, 16); > fragsz = 1 << fragln; > > - if (maxfrags == 0) > - maxfrags = CHN_2NDBUFMAXSIZE / fragsz; > - if (maxfrags < 2) > - maxfrags = 2; > - if (maxfrags * fragsz > CHN_2NDBUFMAXSIZE) > - maxfrags = CHN_2NDBUFMAXSIZE / fragsz; > - > DEB(printf("SNDCTL_DSP_SETFRAGMENT %d frags, %d sz\n", maxfrags, fragsz)); > PCM_ACQUIRE_QUICK(d); > if (rdch) { > CHN_LOCK(rdch); > - ret = chn_setblocksize(rdch, maxfrags, fragsz); > + ret = chn_setblocksize(rdch, > + dsp_clamp_fragments(maxfrags, fragsz, > + chn_2ndbufmaxsize(rdch)), fragsz); > r_maxfrags = rdch->bufsoft->blkcnt; > r_fragsz = rdch->bufsoft->blksz; > CHN_UNLOCK(rdch); > @@ -1265,7 +1279,9 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode, > } > if (wrch && ret == 0) { > CHN_LOCK(wrch); > - ret = chn_setblocksize(wrch, maxfrags, fragsz); > + ret = chn_setblocksize(wrch, > + dsp_clamp_fragments(maxfrags, fragsz, > + chn_2ndbufmaxsize(wrch)), fragsz); > maxfrags = wrch->bufsoft->blkcnt; > fragsz = wrch->bufsoft->blksz; > CHN_UNLOCK(wrch); > @@ -1653,12 +1669,12 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode, > */ > if (wrch != NULL) { > CHN_LOCK(wrch); > - wrch->lw = (*arg_i > 1) ? *arg_i : 1; > + wrch->lw = dsp_low_water(wrch, *arg_i); > CHN_UNLOCK(wrch); > } > if (rdch != NULL) { > CHN_LOCK(rdch); > - rdch->lw = (*arg_i > 1) ? *arg_i : 1; > + rdch->lw = dsp_low_water(rdch, *arg_i); > CHN_UNLOCK(rdch); > } > break; > > > > ------=_Part_1250_1540401911.1784904383741 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: 7bit Is this a good candidate for
Relnotes: yes
in the commit message?

Regards,
Ronald.


 

Van: Christos Margiolis <christos@FreeBSD.org>
Datum: vrijdag, 24 juli 2026 15:59
Aan: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
CC: Kevin Bowling <kbowling@FreeBSD.org>
Onderwerp: git: 967e86d1ef2a - main - sound: Scale PCM secondary buffers by byte rate

The branch main has been updated by christos:

URL: https://cgit.FreeBSD.org/src/commit/?id=967e86d1ef2ac8711c0ae7be353a9c08186f4e6f

commit 967e86d1ef2ac8711c0ae7be353a9c08186f4e6f
Author:     Kevin Bowling <kbowling@FreeBSD.org>
AuthorDate: 2026-07-24 13:57:27 +0000
Commit:     Christos Margiolis <christos@FreeBSD.org>
CommitDate: 2026-07-24 13:58:14 +0000

    sound: Scale PCM secondary buffers by byte rate
    
    The fixed 128 KiB secondary buffer cap dates from stereo-sized streams.
    High channel-count or high sample-width OSS streams can consume most of
    that budget in one graph quantum, leaving too little room for capture
    catch-up or playback headroom.
    
    Keep 128 KiB as the low-rate floor, but derive the effective soft-ring
    cap from the channel byte rate, clamped to 4 MiB. Use that per-channel
    cap when resizing the soft buffer and when clamping
    SNDCTL_DSP_SETFRAGMENT requests.
    
    Also clamp SNDCTL_DSP_LOW_WATER to the current soft-buffer size so an
    impossible readiness threshold cannot make poll/select wait forever.
    
    MFC after:      3 weeks
    Reviewed by:    christos
    Differential Revision:  https://reviews.freebsd.org/D58064
---
 sys/dev/sound/pcm/channel.c | 62 +++++++++++++++++++++++++++++++++------------
 sys/dev/sound/pcm/channel.h | 30 +++++++++++++++++-----
 sys/dev/sound/pcm/dsp.c     | 38 +++++++++++++++++++--------
 3 files changed, 96 insertions(+), 34 deletions(-)

diff --git a/sys/dev/sound/pcm/channel.c b/sys/dev/sound/pcm/channel.c
index ff7620c772c3..21c223c61205 100644
--- a/sys/dev/sound/pcm/channel.c
+++ b/sys/dev/sound/pcm/channel.c
@@ -1657,15 +1657,30 @@ round_pow2(u_int32_t v)
    return ret;
 }
 
+u_int32_t
+chn_2ndbufmaxsize(struct pcm_channel *c)
+{
+   struct snd_dbuf *bs;
+   uint64_t maxsize;
+
+   CHN_LOCKASSERT(c);
+
+   bs = c->bufsoft;
+   maxsize = (uint64_t)bs->align * bs->spd * CHN_2NDBUFTIME_MS / 1000;
+   RANGE(maxsize, CHN_2NDBUFSIZE_MIN, CHN_2NDBUFSIZE_MAX);
+
+   return ((u_int32_t)maxsize);
+}
+
 static u_int32_t
-round_blksz(u_int32_t v, int round)
+round_blksz(u_int32_t v, int round, u_int32_t maxsize)
 {
    u_int32_t ret, tmp;
 
    if (round < 1)
        round = 1;
 
-   ret = min(round_pow2(v), CHN_2NDBUFMAXSIZE >> 1);
+   ret = min(round_pow2(v), maxsize >> 1);
 
    if (ret > v && (ret >> 1) > 0 && (ret >> 1) >= ((v * 3) >> 2))
        ret >>= 1;
@@ -1780,14 +1795,16 @@ chn_calclatency(int dir, int latency, int bps, u_int32_t datarate,
    if (latency < CHN_LATENCY_MIN || latency > CHN_LATENCY_MAX ||
        bps < 1 || datarate < 1 ||
        !(dir == PCMDIR_PLAY || dir == PCMDIR_REC)) {
+       if (max < CHN_2NDBUFSIZE_MIN)
+           max = CHN_2NDBUFSIZE_MIN;
        if (rblksz != NULL)
-           *rblksz = CHN_2NDBUFMAXSIZE >> 1;
+           *rblksz = max >> 1;
        if (rblkcnt != NULL)
            *rblkcnt = 2;
        printf("%s(): FAILED dir=%d latency=%d bps=%d "
            "datarate=%u max=%u\n",
            __func__, dir, latency, bps, datarate, max);
-       return CHN_2NDBUFMAXSIZE;
+       return max;
    }
 
    lprofile = chn_latency_profile;
@@ -1804,7 +1821,7 @@ chn_calclatency(int dir, int latency, int bps, u_int32_t datarate,
        datarate));
    if (bufsz > max)
        bufsz = max;
-   blksz = round_blksz(bufsz >> blkcnt, bps);
+   blksz = round_blksz(bufsz >> blkcnt, bps, max);
 
    if (rblksz != NULL)
        *rblksz = blksz;
@@ -1821,6 +1838,7 @@ chn_resizebuf(struct pcm_channel *c, int latency,
    struct snd_dbuf *b, *bs, *pb;
    int sblksz, sblkcnt, hblksz, hblkcnt, limit = 0, nsblksz, nsblkcnt;
    int ret;
+   u_int32_t maxsize;
 
    CHN_LOCKASSERT(c);
 
@@ -1843,14 +1861,15 @@ chn_resizebuf(struct pcm_channel *c, int latency,
 
    bs = c->bufsoft;
    b = c->bufhard;
+   maxsize = chn_2ndbufmaxsize(c);
 
    if (!(blksz == 0 || blkcnt == -1) &&
        (blksz < 16 || blksz < bs->align || blkcnt < 2 ||
-       (blksz * blkcnt) > CHN_2NDBUFMAXSIZE))
+       (uint64_t)blksz * blkcnt > maxsize))
        return EINVAL;
 
    chn_calclatency(c->direction, latency, bs->align,
-       bs->align * bs->spd, CHN_2NDBUFMAXSIZE,
+       bs->align * bs->spd, maxsize,
        &sblksz, &sblkcnt);
 
    if (blksz == 0 || blkcnt == -1) {
@@ -1871,7 +1890,7 @@ chn_resizebuf(struct pcm_channel *c, int latency,
         * defeat the purpose of having custom control. The least
         * we can do is round it to the nearest ^2 and align it.
         */
-       sblksz = round_blksz(blksz, bs->align);
+       sblksz = round_blksz(blksz, bs->align, maxsize);
        sblkcnt = round_pow2(blkcnt);
    }
 
@@ -1890,18 +1909,28 @@ chn_resizebuf(struct pcm_channel *c, int latency,
                sndbuf_xbytes(pb->blksz, pb, bs) * 2 : 0;
        }
    } else {
+       /*
+        * The byte-rate-scaled cap applies to the secondary buffer
+        * only.  It exists to absorb userland scheduling latency,
+        * which the secondary buffer alone must cover; hardware
+        * buffer geometry keeps the historical cap, since enlarging
+        * it would change fragment sizes and interrupt cadence
+        * visible to drivers, and remains bounded by b->maxsize
+        * below.
+        */
        hblkcnt = 2;
        if (c->flags & CHN_F_HAS_SIZE) {
            hblksz = round_blksz(sndbuf_xbytes(sblksz, bs, b),
-               b->align);
+               b->align, CHN_2NDBUFSIZE_MIN);
            hblkcnt = round_pow2(bs->blkcnt);
        } else
            chn_calclatency(c->direction, latency,
                b->align, b->align * b->spd,
-               CHN_2NDBUFMAXSIZE, &hblksz, &hblkcnt);
+               CHN_2NDBUFSIZE_MIN, &hblksz, &hblkcnt);
 
        if ((hblksz << 1) > b->maxsize)
-           hblksz = round_blksz(b->maxsize >> 1, b->align);
+           hblksz = round_blksz(b->maxsize >> 1, b->align,
+               CHN_2NDBUFSIZE_MIN);
 
        while ((hblksz * hblkcnt) > b->maxsize) {
            if (hblkcnt < 4)
@@ -1922,7 +1951,8 @@ chn_resizebuf(struct pcm_channel *c, int latency,
 
        if (!CHN_EMPTY(c, children)) {
            nsblksz = round_blksz(
-               sndbuf_xbytes(b->blksz, b, bs), bs->align);
+               sndbuf_xbytes(b->blksz, b, bs), bs->align,
+               maxsize);
            nsblkcnt = b->blkcnt;
            if (c->direction == PCMDIR_PLAY) {
                do {
@@ -1938,13 +1968,13 @@ chn_resizebuf(struct pcm_channel *c, int latency,
            limit = sndbuf_xbytes(b->blksz, b, bs) * 2;
    }
 
-   if (limit > CHN_2NDBUFMAXSIZE)
-       limit = CHN_2NDBUFMAXSIZE;
+   if ((u_int32_t)limit > maxsize)
+       limit = maxsize;
 
-   while ((sblksz * sblkcnt) < limit)
+   while ((uint64_t)sblksz * sblkcnt < (uint64_t)limit)
        sblkcnt <<= 1;
 
-   while ((sblksz * sblkcnt) > CHN_2NDBUFMAXSIZE) {
+   while ((uint64_t)sblksz * sblkcnt > maxsize) {
        if (sblkcnt < 4)
            sblksz >>= 1;
        else
diff --git a/sys/dev/sound/pcm/channel.h b/sys/dev/sound/pcm/channel.h
index c7f5bf93b8e5..c78c25dac13b 100644
--- a/sys/dev/sound/pcm/channel.h
+++ b/sys/dev/sound/pcm/channel.h
@@ -430,15 +430,31 @@ enum {
 #define CHN_TIMEOUT_MIN        1
 #define CHN_TIMEOUT_MAX        10
 
-/*
- * This should be large enough to hold all pcm data between
- * tsleeps in chn_{read,write} at the highest sample rate.
- * (which is usually 48kHz * 16bit * stereo = 192000 bytes/sec)
- */
+/* Default block size for the secondary buffer. */
 #define CHN_2NDBUFBLKSIZE  (2 * 1024)
 /* The total number of blocks per secondary bufhard. */
 #define CHN_2NDBUFBLKNUM   (32)
-/* The size of a whole secondary bufhard. */
-#define CHN_2NDBUFMAXSIZE  (131072)
+/*
+ * The secondary buffer cap scales with the channel byte rate, targeting
+ * CHN_2NDBUFTIME_MS of stream so that all pcm data between tsleeps in
+ * chn_{read,write} fits, clamped to [CHN_2NDBUFSIZE_MIN,
+ * CHN_2NDBUFSIZE_MAX].
+ *
+ * The floor is the historical secondary buffer size and preserves memory
+ * use for low byte-rate streams; it holds ~680 ms at the once-typical
+ * 48kHz * 16bit * stereo rate (192000 bytes/sec), well above the target
+ * (~38 KiB there).
+ *
+ * The ceiling bounds per-channel buffer memory.  Buffers are allocated at
+ * the derived size, so only streams that actually run at high byte rates
+ * approach it.  It holds the full target through MADI-class streams
+ * (64ch * 32-bit * 48kHz, ~12.3 MB/s); beyond that, coverage shrinks
+ * proportionally (e.g. ~85 ms at 64ch * 32-bit * 192kHz).
+ */
+#define CHN_2NDBUFSIZE_MIN (131072)
+#define CHN_2NDBUFSIZE_MAX (4 * 1024 * 1024)
+#define CHN_2NDBUFTIME_MS  200
+
+u_int32_t chn_2ndbufmaxsize(struct pcm_channel *);
 
 #define CHANNEL_DECLARE(name) static DEFINE_CLASS(name, name ## _methods, sizeof(struct kobj))
diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c
index 0a5063410d24..f49df6e8a8c6 100644
--- a/sys/dev/sound/pcm/dsp.c
+++ b/sys/dev/sound/pcm/dsp.c
@@ -109,6 +109,25 @@ static int dsp_oss_setsong(struct pcm_channel *wrch, struct pcm_channel *rdch, o
 static int dsp_oss_setname(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *name);
 #endif
 
+static uint32_t
+dsp_clamp_fragments(uint32_t maxfrags, uint32_t fragsz, uint32_t maxsize)
+{
+   if (maxfrags == 0)
+       maxfrags = maxsize / fragsz;
+   if (maxfrags < 2)
+       maxfrags = 2;
+   if ((uint64_t)maxfrags * fragsz > maxsize)
+       maxfrags = maxsize / fragsz;
+   return (maxfrags);
+}
+
+static unsigned int
+dsp_low_water(struct pcm_channel *ch, int lw)
+{
+   RANGE(lw, 1, ch->bufsoft->bufsize);
+   return ((unsigned int)lw);
+}
+
 int
 dsp_make_dev(device_t dev)
 {
@@ -1244,18 +1263,13 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode,
            RANGE(fragln, 4, 16);
            fragsz = 1 << fragln;
 
-           if (maxfrags == 0)
-               maxfrags = CHN_2NDBUFMAXSIZE / fragsz;
-           if (maxfrags < 2)
-               maxfrags = 2;
-           if (maxfrags * fragsz > CHN_2NDBUFMAXSIZE)
-               maxfrags = CHN_2NDBUFMAXSIZE / fragsz;
-
            DEB(printf("SNDCTL_DSP_SETFRAGMENT %d frags, %d sz\n", maxfrags, fragsz));
            PCM_ACQUIRE_QUICK(d);
                if (rdch) {
                CHN_LOCK(rdch);
-               ret = chn_setblocksize(rdch, maxfrags, fragsz);
+               ret = chn_setblocksize(rdch,
+                   dsp_clamp_fragments(maxfrags, fragsz,
+                   chn_2ndbufmaxsize(rdch)), fragsz);
                r_maxfrags = rdch->bufsoft->blkcnt;
                r_fragsz = rdch->bufsoft->blksz;
                CHN_UNLOCK(rdch);
@@ -1265,7 +1279,9 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode,
            }
                if (wrch && ret == 0) {
                CHN_LOCK(wrch);
-               ret = chn_setblocksize(wrch, maxfrags, fragsz);
+               ret = chn_setblocksize(wrch,
+                   dsp_clamp_fragments(maxfrags, fragsz,
+                   chn_2ndbufmaxsize(wrch)), fragsz);
                maxfrags = wrch->bufsoft->blkcnt;
                fragsz = wrch->bufsoft->blksz;
                CHN_UNLOCK(wrch);
@@ -1653,12 +1669,12 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode,
     */
        if (wrch != NULL) {
            CHN_LOCK(wrch);
-           wrch->lw = (*arg_i > 1) ? *arg_i : 1;
+           wrch->lw = dsp_low_water(wrch, *arg_i);
            CHN_UNLOCK(wrch);
        }
        if (rdch != NULL) {
            CHN_LOCK(rdch);
-           rdch->lw = (*arg_i > 1) ? *arg_i : 1;
+           rdch->lw = dsp_low_water(rdch, *arg_i);
            CHN_UNLOCK(rdch);
        }
        break;
 


  ------=_Part_1250_1540401911.1784904383741-- From nobody Fri Jul 24 15:04:08 2026 X-Original-To: dev-commits-src-main@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 4h6B8t0xqsz6mH1G for ; Fri, 24 Jul 2026 15:04:14 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6B8t0V3hz3T52 for ; Fri, 24 Jul 2026 15:04:14 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784905454; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=+P4asZS+pvNwJgN/KinI/6PCKikvJZdAfDW3A6UWLro=; b=I5iSPFk8SLdHCFaeJSL8C8ptedfr0XdUvNSnaauigIcHjmVfwsYk3xKYnDfzB0cLpZxjEM /fDUvT3idc9CAvlQEVlKXP5qxMfmnjVMgSXec4BKo8E6GHR03SR7VUB7QyQ9Lh6tUQMDZR EnvDoK22eHhFXtlLbbStV0ubVgvRC/7PC48a0ZFTrtF/IKGQeFJKCoA2NCvJlMIcRXUp1G AnueWz1wPAHMzcT4tBFwczXDT6UBkJQzZ3XhYpCR3ZDHcqKVFgKM6imgNmmIeRLCZDoiKf DiPW5FRPE+yfC6uo6ETjsgMWZlcOEiADF0jbWLGjkFzk7IZsmjtVIOFkgjStXA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784905454; a=rsa-sha256; cv=none; b=dMJscFnX2tM2ebORZ867IDi6Th+GqjW/TgXKKCOlomLbS5z4idDho3P8Xvtym6WT6ddC1C N/3zxuJHsf8wjjpLTKfAGfwbEvcv3DakqrjGzUAvXF3Vfn0EaqLaIS8mQ4WjIWkuEYP406 mjZNtmnliP3/e2WQA0WqLObeojR2PfFJ3gTkoW4rbiyP+tD1lMnljg8CqiHNgTdlZWxMYb /JkgwHfegSquSMqCfNcRIn0IfFC8iw7rKdXdBIB8fr5t5scDyiQvFcOEfTDcG2m8mcjaR3 b8K15NeQLl29d3IKG0vrfgNUf35hcha41yvzSIHIrssJ1HAuvZb0qtwzUzzseA== 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=1784905454; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=+P4asZS+pvNwJgN/KinI/6PCKikvJZdAfDW3A6UWLro=; b=rRIn8DdkYoy/EqUz9DQKWK8YUOgc7/+YSfGi11KZys/Uyp4XGjhVhE884deFtHb8JnxBOj WAmwvhsWIYY5hfyU+faxnHGI6zqEqkfZePM1gDC/+c8qKU+C3i7NdYuyZpQU63pbRFh/4W xbl5gtsBwqeYd2jsSeLPNGquUjbjxnkIT01HN6Y5NOK266plr+5wvdHhzhlFipsmj0nO6t HZ4vufybM7ZrsHwIJt8nJe0qGeMhYS4mq+4UihhkExb/OIl6eBBwpRR+Zoqwaws0KlowgV vdb/EWNPh5ncQq83321EYBgFo+bsC76soPbebAMyfTOc8s95iiZCpyl9ow8trA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6B8s6dGNzwQ3 for ; Fri, 24 Jul 2026 15:04:13 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3620a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 15:04:08 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Ishan Agrawal From: Kristof Provost Subject: git: 26bb78b77231 - main - libsysdecode: add Netlink attribute decoding infrastructure List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 26bb78b77231c4b2d80f7d89f39e9e06294151d2 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 15:04:08 +0000 Message-Id: <6a637ee8.3620a.6a13d1a8@gitrepo.freebsd.org> The branch main has been updated by kp: URL: https://cgit.FreeBSD.org/src/commit/?id=26bb78b77231c4b2d80f7d89f39e9e06294151d2 commit 26bb78b77231c4b2d80f7d89f39e9e06294151d2 Author: Ishan Agrawal AuthorDate: 2026-07-22 15:31:23 +0000 Commit: Kristof Provost CommitDate: 2026-07-24 15:02:37 +0000 libsysdecode: add Netlink attribute decoding infrastructure Introduce a generic Netlink attribute decoding framework based on attribute decoder tables. The framework supports decoding primitive attribute types as well as nested attributes and can be reused by different Generic Netlink families. Signed-off-by: Ishan Agrawal Sponsored-by: Google LLC (GSoC 2026) Reviewed-by: kp Pull-Request: https://github.com/freebsd/freebsd-src/pull/2337 --- lib/libsysdecode/netlink.c | 215 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 213 insertions(+), 2 deletions(-) diff --git a/lib/libsysdecode/netlink.c b/lib/libsysdecode/netlink.c index ce8ac0485009..bb07ad2e4bf7 100644 --- a/lib/libsysdecode/netlink.c +++ b/lib/libsysdecode/netlink.c @@ -5,9 +5,14 @@ */ #include +#include +#include +#include +#include #include #include #include +#include #include #include @@ -29,8 +34,195 @@ static struct name_table *family_table = NULL; static size_t num_family = 0; +typedef void decode_attr_f(FILE *fp, const struct nlattr *attr, + const char *attr_name, const void *args); +struct nlattr_decoder { + uint16_t type; /* Attribute type */ + const char *attr_name; /* Attribute name*/ + decode_attr_f *cb; /* decoder function to call */ + const void *args; /* nested decoder */ +}; + +struct nlattr_decoder_set { + const struct nlattr_decoder *decoders; /* PFNL CMD Decoders */ + size_t count; /*Attribute Count*/ +}; + +#define NL_DECLARE_ATTR_DECODER(_name, _np) \ +static const struct nlattr_decoder_set _name = { \ + .decoders = &((_np)[0]), \ + .count = nitems(_np), \ +} + +static void nl_decode_attrs_raw(FILE *fp, const struct nlattr *nla_head, + size_t len, const struct nlattr_decoder *ps, size_t pslen); + +static void +nlattr_decode_in6_addr(FILE *fp, const struct nlattr *attr, + const char *attr_name, const void *args) +{ + (void)args; + + struct in6_addr target; + + if (NLA_DATA_LEN(attr) < (int)sizeof(target)) + return; + + memcpy(&target, NLA_DATA_CONST(attr), sizeof(struct in6_addr)); + + fprintf(fp, "%s=", attr_name); + + char buf[INET6_ADDRSTRLEN]; + + if (inet_ntop(AF_INET6, &target, buf, sizeof(buf)) != NULL) + fprintf(fp, "%s", buf); +} + +static void +nlattr_decode_uint32(FILE *fp, const struct nlattr *attr, const char *attr_name, + const void *args) +{ + (void)args; + + uint32_t target; + + if (NLA_DATA_LEN(attr) < (int)sizeof(target)) + return; + + memcpy(&target, NLA_DATA_CONST(attr), sizeof(uint32_t)); + + fprintf(fp, "%s=%u", attr_name, target); +} + +static void +nlattr_decode_uint8(FILE *fp, const struct nlattr *attr, const char *attr_name, + const void *args) +{ + (void)args; + + uint8_t target; + + if (NLA_DATA_LEN(attr) < (int)sizeof(target)) + return; + + memcpy(&target, NLA_DATA_CONST(attr), sizeof(uint8_t)); + + fprintf(fp, "%s=%u", attr_name, target); +} + +static void +nlattr_decode_string(FILE *fp, const struct nlattr *attr, const char *attr_name, + const void *args) +{ + (void)args; + + if (NLA_DATA_LEN(attr) == 0) + return; + + const char *target = (const char *)NLA_DATA_CONST(attr); + + fprintf(fp, "%s=%s", attr_name, target); +} + +static void +nlattr_decode_nested(FILE *fp, const struct nlattr *attr, const char *attr_name, + const void *args) +{ + const struct nlattr_decoder_set *set = args; + + if (set == NULL) + return; + + fprintf(fp, "%s=", attr_name); + + nl_decode_attrs_raw(fp, NLA_DATA_CONST(attr), NLA_DATA_LEN(attr), + set->decoders, set->count); +} + +static const struct nlattr_decoder * +search_decoders(const struct nlattr_decoder *ps, size_t pslen, int key) +{ + size_t left_i = 0, right_i = pslen - 1; + + if (pslen == 0) + return (NULL); + + if (key < ps[0].type || key > ps[pslen - 1].type) + return (NULL); + + while (left_i + 1 < right_i) { + size_t mid_i = (left_i + right_i) / 2; + if (key < ps[mid_i].type) + right_i = mid_i; + else if (key > ps[mid_i].type) + left_i = mid_i + 1; + else + return (&ps[mid_i]); + } + if (ps[left_i].type == key) + return (&ps[left_i]); + else if (ps[right_i].type == key) + return (&ps[right_i]); + return (NULL); +} + static void -sysdecode_netlink_pf(FILE *fp, const struct genlmsghdr *genl) +nl_decode_attrs_raw(FILE *fp, const struct nlattr *nla_head, size_t len, + const struct nlattr_decoder *ps, size_t pslen) +{ + const struct nlattr_decoder *s; + const struct nlattr *nla; + bool first = true; + + fprintf(fp, "{"); + + NLA_FOREACH_CONST(nla, nla_head, len) { + if (!first) + fprintf(fp, ","); + + s = search_decoders(ps, pslen, nla->nla_type & NLA_TYPE_MASK); + if (s != NULL && s->cb != NULL) + s->cb(fp, nla, s->attr_name, s->args); + + first = false; + } + + fprintf(fp, "}"); +} + +static const struct nlattr_decoder nla_d_addr_wrap[] = { + { .type = PF_AT_ADDR, .attr_name = "addr", .cb = nlattr_decode_in6_addr }, + { .type = PF_AT_MASK, .attr_name = "mask", .cb = nlattr_decode_in6_addr }, + { .type = PF_AT_IFNAME, .attr_name = "ifname", .cb = nlattr_decode_string }, + { .type = PF_AT_TABLENAME, .attr_name = "tablename", .cb = nlattr_decode_string }, + { .type = PF_AT_TYPE, .attr_name = "type", .cb = nlattr_decode_uint8 }, + { .type = PF_AT_IFLAGS, .attr_name = "iflags", .cb = nlattr_decode_uint8 }, +}; +NL_DECLARE_ATTR_DECODER(addr_wrap_decoder, nla_d_addr_wrap); + +static const struct nlattr_decoder nla_d_pool_addr[] = { + { .type = PF_PA_ADDR, .attr_name = "addr", .cb = nlattr_decode_nested, .args = &addr_wrap_decoder}, + { .type = PF_PA_IFNAME, .attr_name = "ifname", .cb = nlattr_decode_string }, +}; +NL_DECLARE_ATTR_DECODER(pool_addr_decoder, nla_d_pool_addr); + +static const struct nlattr_decoder nla_d_add_addr[] = { + { .type = PF_AA_ACTION, .attr_name = "action", .cb = nlattr_decode_uint32 }, + { .type = PF_AA_TICKET, .attr_name = "ticket", .cb = nlattr_decode_uint32 }, + { .type = PF_AA_NR, .attr_name = "nr", .cb = nlattr_decode_uint32 }, + { .type = PF_AA_R_NUM, .attr_name = "r_num", .cb = nlattr_decode_uint32 }, + { .type = PF_AA_R_ACTION, .attr_name = "r_action", .cb = nlattr_decode_uint8 }, + { .type = PF_AA_R_LAST, .attr_name = "r_last", .cb = nlattr_decode_uint8 }, + { .type = PF_AA_AF, .attr_name = "af", .cb = nlattr_decode_uint8 }, + { .type = PF_AA_ANCHOR, .attr_name = "anchor", .cb = nlattr_decode_string }, + { .type = PF_AA_ADDR, .attr_name = "addr", .cb = nlattr_decode_nested , .args = &pool_addr_decoder}, + { .type = PF_AA_WHICH, .attr_name = "which", .cb = nlattr_decode_uint32 }, +}; +NL_DECLARE_ATTR_DECODER(addr_parser, nla_d_add_addr); + + +static void +sysdecode_netlink_pf(FILE *fp, const struct genlmsghdr *genl, size_t nlm_len) { uint8_t cmd = genl->cmd; const char *cmd_name = sysdecode_pfnl_cmd(cmd); @@ -39,6 +231,22 @@ sysdecode_netlink_pf(FILE *fp, const struct genlmsghdr *genl) fprintf(fp, "cmd=%s", cmd_name); else fprintf(fp, "cmd=%u", cmd); + + const struct nlattr *nla = (const struct nlattr *)(const void *) + ((const char *)genl + sizeof(struct genlmsghdr)); + + switch (cmd) { + case PFNL_CMD_GET_ADDR: + nl_decode_attrs_raw(fp, nla, nlm_len, + addr_parser.decoders, addr_parser.count); + break; + case PFNL_CMD_GET_ADDRS: + nl_decode_attrs_raw(fp, nla, nlm_len, + addr_parser.decoders, addr_parser.count); + break; + default: + break; + } } bool @@ -181,8 +389,11 @@ sysdecode_netlink(FILE *fp, const void *buf, size_t len, int protocol) (const struct genlmsghdr *)(const void *) ((const char *)nl + sizeof(struct nlmsghdr)); + const size_t nlm_len = nl->nlmsg_len - + (sizeof(struct nlmsghdr) + + sizeof(struct genlmsghdr)); - sysdecode_netlink_pf(fp, genl); + sysdecode_netlink_pf(fp, genl, nlm_len); } fprintf(fp, "}"); From nobody Fri Jul 24 15:08:01 2026 X-Original-To: dev-commits-src-main@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 4h6BFF5wxFz6mH2H for ; Fri, 24 Jul 2026 15:08:01 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6BFF323Mz3TPH for ; Fri, 24 Jul 2026 15:08:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784905681; 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=DdAekDzk02hTPu38DRfTFlAEeXLp9FQ0QjLm5AasdzY=; b=BdZuFNla7hAc+4fK8nNEzpYf49+tgQHNOc21/pEsep8An52+3efuaR6R+20u7aeX92Tveo Y0Sss673S8LUMclkA/Pgjl1XzK4QLPpsT8984weyCefuitoa/PUalZzDENdAEAEIDbksGQ VaUHaRjZhjzGHCKP+E29OEAiXamzCDSOQi0gCd4mj6cwCY7QTe2GhUXGz6LFN4UV52m/zu f54+AhARJRaRZ0a++DBia+v9720CLPbSh+MeQHhkXRkLbYmRWLa/Gsz67nu/BlaUygnBS9 Ep9muwk9ud9dmTqYzH8dR29T6AbxMgPYKtJYPx+syckQ/FFPqCdajxpBazJC3A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784905681; a=rsa-sha256; cv=none; b=CuqbbUNFYAPLmO7p8zn/zs/z3pWFfkFdAdpM8kMNyRRg7LiAaeoH72YsbwDNpSXWeRU4P0 dgqCCaRDLXXC5CvlsYfYrh51b3D6XKmrbCzZ8bR2SXwonDYmEvt1ePcMU9e38EQUd6yDBT 142geo+WVtghD1moeuvYYDPlyjlPGTgBe8EjWhRSM4NPZA/gz32dOaw4gjyeYmYsJpmqYm 3x2iLdVmYFVv5s/4LQipz0g3IS6aY/UzkLOp7m3knEh2zQm5a+d3Vfg2hKDCBcQbbgr4Cj PDOYw+pkMBPihz3MDDwrDg3yFttvXELoxziY3Wzx1uetyHN8ZUMPB7onFy0FQQ== 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=1784905681; 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=DdAekDzk02hTPu38DRfTFlAEeXLp9FQ0QjLm5AasdzY=; b=SztZHHIY8ZMemw0HlKHXmxr9YArg1QTtk6aCAjOcAcfJdZo0+EezyQyafqVvrYJh6f3bED QXxCLlkZ9MTe3gDCU65QjQujs2kwuKm8uIpBwsjbGgq14X/bYWrxq5XCEPCewuJwZvtxoA DnFOiQ1QHPnncaBfPu7DyGMkA1j1LnTX4LD+4yEUbAxai+Sw1kS5q37bQPgvg1mBME3J7J yaYbh7nck6jnf63BqJDZ9VtuWmg3fhrwk/jbITSSeAwbI2Wz22Y4QSgUtT5HBBkDoiSSTJ hkdNuSeQardWBPIbNFNX+bRhVrFv2jvsBSR/CFbFB/l+akUrvNnTAfY1PzQRfQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6BFF1zWRzwSl for ; Fri, 24 Jul 2026 15:08:01 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 36047 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 15:08:01 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: 8468152509a0 - main - uvideo: fix step=0 infinite loop and int overflow in fbuf_size List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8468152509a0dfd73e69618af2b1d7f9cbd366f7 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 15:08:01 +0000 Message-Id: <6a637fd1.36047.5626ca1a@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=8468152509a0dfd73e69618af2b1d7f9cbd366f7 commit 8468152509a0dfd73e69618af2b1d7f9cbd366f7 Author: Baptiste Daroussin AuthorDate: 2026-07-24 14:30:07 +0000 Commit: Baptiste Daroussin CommitDate: 2026-07-24 15:07:50 +0000 uvideo: fix step=0 infinite loop and int overflow in fbuf_size Prevent infinite loop in uvideo_vs_negotiation() when a USB camera reports step=0 in its continuous frame interval descriptor. Cast fbuf_size calculation to uint64_t to avoid int overflow for large width/height/bpp combinations. Reported by: emaste --- sys/dev/usb/video/uvideo.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index 7c7268454ae2..bb52232e153e 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -1744,7 +1744,7 @@ uvideo_vs_parse_desc_frame_buffer_size(struct uvideo_softc *sc, * width * height * bpp since dwMaxVideoFrameBufferSize may be wrong. */ if (desc->bDescriptorSubtype == UDESCSUB_VS_FRAME_UNCOMPRESSED) { - fbuf_size = UGETW(fd->u.uc.wWidth) * + fbuf_size = (uint64_t)UGETW(fd->u.uc.wWidth) * UGETW(fd->u.uc.wHeight) * sc->sc_fmtgrp[fmtidx].format->u.uc.bBitsPerPixel / NBBY; } else @@ -2037,6 +2037,8 @@ uvideo_vs_negotiation(struct uvideo_softc *sc, int commit) else if (frame_ival >= max) frame_ival = max; else { + if (step == 0) + step = 1; for (i = min; i + step / 2 < frame_ival; i += step) From nobody Fri Jul 24 15:44:21 2026 X-Original-To: dev-commits-src-main@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 4h6C3R38ZYz6mKqp for ; Fri, 24 Jul 2026 15:44:35 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: from mail-oi1-f176.google.com (mail-oi1-f176.google.com [209.85.167.176]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "WR4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6C3P6FkWz3Y56 for ; Fri, 24 Jul 2026 15:44:33 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=freebsd.org (policy=none); arc=pass ("google.com:s=arc-20260327:i=1"); spf=pass (mx1.freebsd.org: domain of carpeddiem@gmail.com designates 209.85.167.176 as permitted sender) smtp.mailfrom=carpeddiem@gmail.com Received: by mail-oi1-f176.google.com with SMTP id 5614622812f47-4a466f81a24so261111b6e.2 for ; Fri, 24 Jul 2026 08:44:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1784907873; cv=none; d=google.com; s=arc-20260327; b=JGAcCcCqrRuDTRAB0jymhha0TCOAtu4Awmr93g3NwJqPDOwH8b7HxRyp/Gh2V7qeLB xOGgRnd7+eLjVhiYmb+RUC1OehHemLtGh5NgIzyvZ6LvUEeJ/SCIiIpvDsffA9pxuWmI JNtXnE86XdZMY8E2qj+q2ev8h0xJqcLcikssSKWIc1aEVxpKKVsy8lal34X04m3/gLPe MzFc795VW42Qi18uIEH1H6Cvs/orIAhVxGtTT5H1lu0WJdHGuAGc+3KgSNA2pshyK40O gqgBK+jAKb452x4LKBeof68mpVJrJDn0uQVdyPON2yYctfcQomgTFvQNvrQ2AShmtY4e Xk/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version; bh=vBlDiaIVbDrzq23xru46Cdq5d2rVbhETHN7+qmiLzVE=; fh=aalhQ5vN+lFZw98Z0nB9lXMF8QSbu8hK5B+rnNztc1E=; b=Uj+4QTVgU2nwR6lNqaWHejloiwMDdI2W8ALeRNIMB9jH4jAyoBlc1HZJdy2MIDHOyd hu4T2YiQXdMAg2ybvqjy5veVPtEN+SuTU61lQ1RbmHnD9tNjKb9XhetiwOlfZl1AcVYT qzouTjRHeWx3qtGO3Ys6e04PSQoDJBpU/Te4SrxUEgnJH5NawyEbaXRqCaPiNkwTQFiT YV+sC5gxhWmH6N4ENzOl4YIeOft32F8zXFWkFUzFt/zdEs6iLFF0Q8NUwOCCv2+rfUyG 93dKS5qFlxW2yfohBPbQ79LEHA6RSeAo/AjsDJ/J82V3A2gnkmaY4PmfDWLWoHZ84LIB 2rwg==; darn=freebsd.org ARC-Authentication-Results: i=1; mx.google.com; arc=none X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784907873; x=1785512673; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=vBlDiaIVbDrzq23xru46Cdq5d2rVbhETHN7+qmiLzVE=; b=Hhx6AG+gcZNXVH/bifC8x80WEfQfGNa1vnM2i1gj3IOC53WP4kY76/M1KZoK+VbllX QNoByWySxR5gPc75yWbEISGjwiSlZ1rtdkPW+bSO7VDKjdwLXEliAgZWcLUcKTfH6VJt x30iSdDx7cZN2O3x25gqx7tHs+cN2jEZkJ+l0NL/pheKICfuxUJbfXkiRCKQj1kPRrh3 ctB49+bAZVsOzirPuGqk5oqV7aJIEDNcFWScTQuWvjA9wbGHhN0Vb4o57awGfg59K6lY J5aJR3Ru5Jc156YL0gC4ZTUbHsJFL0HYTTfLGaQO5ZDBiseGnNpyPhpNztmG6E1/uWFm s9qg== X-Forwarded-Encrypted: i=1; AHgh+RqTJWlIZQuVcDEJyRCkg8oqYRRBPII/Q2LHZOWr+/YXrbEH9D8LSJV0jb3WJ/wrfCur8hqdRPyQvHT8fqhFY/AR64lrLg==@freebsd.org X-Gm-Message-State: AOJu0YyJarerdixOstDEgstBiVKBtWgHEWjIpOEt/Vs4QJxfecsHHJtY moYBRShmD0Yx9abpG4nPRR8a8TgxmHkNgV5ljplVBunz+d5/MTCZXa97dV+sMYLrZZCe1J1c8bl Qc9x9NkZO/09Lp1RcsbAA+dNh4IHnCPo= X-Gm-Gg: AR+sD12mxH1B1aWgmel2SvNaGUEZGQdNqQ7qL5TqlSQDSlVWZ9kah5qIL/RrV2PTIzo nGJlmmKJ+1Acc2HoeeKOlS+OZ9/NQCUayQWHVg+tHaYXuHsDmppYru/UZ657Iqz6hClNjZi1SVz 2Ps28z//7Gkz3BUgmbFwlrWbpOAVPC7ACnKoV2V4qix7eWnZSS8hNNpobxwBwDOiX36vJZcr0jr wWAHq96FCULBiL3iB7+vgTjNTs/NPIBabPSRRyum6UFrofBRmuLY8r6Rlkw3wB1NlZU/68mCuVe BF0vFtOlHKYybk3Y3A== X-Received: by 2002:a05:6808:1822:b0:495:d41b:20 with SMTP id 5614622812f47-4ab35470259mr4687119b6e.38.1784907872686; Fri, 24 Jul 2026 08:44:32 -0700 (PDT) List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 References: <6a5fba36.3d93d.694b6c5c@gitrepo.freebsd.org> In-Reply-To: From: Ed Maste Date: Fri, 24 Jul 2026 11:44:21 -0400 X-Gm-Features: AUfX_mzQfCux6ODoprvOxfAp7wOe25rBnAnLsD-spcSi88l_M6JK8UtdsTK6Q1I Message-ID: Subject: Re: git: caabdb3aefdc - main - contigmalloc.9: Note that M_WAITOK may still return NULL To: Mark Johnston Cc: Ryan Libby , src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Spamd-Result: default: False [-3.50 / 15.00]; ARC_ALLOW(-1.00)[google.com:s=arc-20260327:i=1]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-0.99)[-0.990]; NEURAL_HAM_SHORT(-0.61)[-0.611]; FORGED_SENDER(0.30)[emaste@freebsd.org,carpeddiem@gmail.com]; R_SPF_ALLOW(-0.20)[+ip4:209.85.128.0/17:c]; DMARC_POLICY_SOFTFAIL(0.10)[freebsd.org : SPF not aligned (relaxed), No valid DKIM,none]; MIME_GOOD(-0.10)[text/plain]; FREEFALL_USER(0.00)[carpeddiem]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; RCVD_COUNT_ONE(0.00)[1]; FROM_HAS_DN(0.00)[]; FREEMAIL_ENVFROM(0.00)[gmail.com]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RWL_MAILSPIKE_POSSIBLE(0.00)[209.85.167.176:from]; FROM_NEQ_ENVFROM(0.00)[emaste@freebsd.org,carpeddiem@gmail.com]; RCVD_TLS_LAST(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[dev-commits-src-main@freebsd.org]; RCVD_IN_DNSWL_NONE(0.00)[209.85.167.176:from]; MLMMJ_DEST(0.00)[dev-commits-src-main@freebsd.org]; MISSING_XM_UA(0.00)[]; R_DKIM_NA(0.00)[]; RCPT_COUNT_FIVE(0.00)[5] X-Rspamd-Queue-Id: 4h6C3P6FkWz3Y56 X-Spamd-Bar: --- > That said, I think the claim in the man page is actually wrong now. > contigmalloc(M_WAITOK) certainly used to be able to return NULL, but I > think that might no longer be true now that kmem_alloc_contig() is > implemented using domainset iterators. If we try all domains, we'll end > up sleeping and retrying indefinitely, or at least it appears to be that > way. Hmm, contigmalloc does check kmem_alloc_contig's return for NULL, so if this is the case we should probably make that a KASSERT instead. From nobody Fri Jul 24 18:19:22 2026 X-Original-To: dev-commits-src-main@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 4h6GV22zhQz6mWWS for ; Fri, 24 Jul 2026 18:19:22 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6GV22Kwwz49ZF for ; Fri, 24 Jul 2026 18:19:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784917162; 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=Y1b0WOhjELN+irO761GaGo8+ItX82+ZAmd2CGD23mGk=; b=jZ8lL5BB9RUSTYrrYYFPUAXEJiMNZuRyb50I9TZU4G6+uQSaAEeA2m75CkFJsvq2S0vX/y Cq5qy05ntbvk9xbB9tFkaVOaogH+2vYe82F3EOcWcxeoLw93Moo1OjAWCR+T34hUcPkq0r Q6K3ELX4gXHbHijrLHLqjP8Mu9CmbDFT0hXimVoS6lDWXwU0a3+XqV0BpsS4lVhTG3lHRS oG43jho/SySC8RsEIbTIvabeku6tyTL59P6QE1AFPz1YmcdNzgsS56cSlVnlSM0oLLfiRK qIERJrg0ofl6k9IFSOQ2PNdcIIw1bMetVP6mqO6t6SpzzBUh4vCuT4/4pARhoA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784917162; a=rsa-sha256; cv=none; b=L5M/zVFzHG5aG9g8q29C31yDO1wXDNKc682O7+Bz+r5YId3Zpru9M+A4JIjeWns9pkwdT1 VEw1sJohYqhlz4uQxSYNDZifbc1LHPrR9kLKOqwgkWGf9/5dr7x0MbzNPNTyRw9d40tH2W b8gWzAWXIj7uaIBx58phCMURDbj6QdvmffmEjawbCFlDD55XA2KxuXux5PJYc/J4A/xgqn oe2K/mTT5U5m8WMqmPPtTXaFMRzq5a6obiIDBRBrPpSdoJDJDCCm6AMIcHPt+jbIFEXXgi yaEf+Ee7aY61DfA3cCCEvL1EdWchV+ZegAAekPPtub739YcM3n59AjYTR4FDrA== 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=1784917162; 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=Y1b0WOhjELN+irO761GaGo8+ItX82+ZAmd2CGD23mGk=; b=yGXSGbs6z5ys66kxGFH0bgzxds84/kP01DLWxJoBasA44uc/3NYibnZwIDlyYqboYf92ge MmHy6MnMmwzIBUbXNefeqyGLg7qtvDVhAjEq6lkaXmUh4LybPN0DSs6YpTr+k/nB3GkOR9 ycNmDvbusdENeeRGpXejRMUlOrUqN1zgaiJr56o0p+BdBk4itxyVaylXO7e/wlkd04ZGoC p8Jnm5n+RdiaypJ3fASUCtmz4JwMdq04KdfzSwLGcIFl09SreQQT9LQu3i60AHBuOu7V+k PmS7alGe2dmKLutSLAosq+oWFYElqp5wBQqjkLpkphNzzBXtjIetj8+OofEwPA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6GV20lsnz12xR for ; Fri, 24 Jul 2026 18:19:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1c364 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 18:19:22 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Ed Maste Subject: git: 8a7ab3ed22d9 - main - uvideo: Return actual mtx_sleep error in dqbuf List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: emaste X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8a7ab3ed22d9d6b49c5c4799c1468017d691b343 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 18:19:22 +0000 Message-Id: <6a63acaa.1c364.4ab0b2c0@gitrepo.freebsd.org> The branch main has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=8a7ab3ed22d9d6b49c5c4799c1468017d691b343 commit 8a7ab3ed22d9d6b49c5c4799c1468017d691b343 Author: Ed Maste AuthorDate: 2026-07-21 18:01:53 +0000 Commit: Ed Maste CommitDate: 2026-07-24 17:34:12 +0000 uvideo: Return actual mtx_sleep error in dqbuf Don't coerce errors to EINVAL, which isn't correct for mtx_sleep's failure cases. Sponsored by: The FreeBSD Foundation --- sys/dev/usb/video/uvideo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index bb52232e153e..6bed4b4acee3 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -3793,7 +3793,7 @@ uvideo_dqbuf(struct uvideo_softc *sc, struct v4l2_buffer *dqb) error = mtx_sleep(sc, &sc->sc_mtx, PCATCH, "uvdqbuf", hz * 10); if (error != 0) { mtx_unlock(&sc->sc_mtx); - return (EINVAL); + return (error); } if (sc->sc_dying) { mtx_unlock(&sc->sc_mtx); From nobody Fri Jul 24 19:34:59 2026 X-Original-To: dev-commits-src-main@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 4h6J9J23c8z6mcXZ for ; Fri, 24 Jul 2026 19:35:00 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6J9H5nRhz3PnC for ; Fri, 24 Jul 2026 19:34:59 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784921699; 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=lV01m5Bz4OGLC3sGBbG5YZ1ad7QEnJO+oWciIMRGQfM=; b=dc7YUPH30MpxeRLRnfz8GzSNXcvFPyOCpBOoji0Rqw9iyJgCXBTeYNG4/6vJvLgeGYr/Po zSUs9xCO3FfDvnV/kvxWsnajsluuYNx9uGMWytR1ncf6rp0iDdQySjoXtK99MbB6X7YBsu jCx3TPMSRntA6M8Eb0C5bk7evVJcRH25NAJFx1f6O/qYueTZz5/mRM0kLFWOQE6bmlJ5Vt Kn3bfvm+iqESg/l/Pi9BiuYCrTXEuQFEtmR/0QTihPMEb6/sDTvdh+AMv1cqSVCzkbcu1q oVOyGri+ToC+5hchYA/tGWbZ4AjAmV/eyFkgsa64eOPgyPVLQqzfPKWVhej3iA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784921699; a=rsa-sha256; cv=none; b=Ajp1L29vexH0rxUXjrk6HcAnJ2hB7cw/lo9J3zQpdkaGPGbH/nt+ZDYlEws3Qju46XcIvT r6BQaVzan668b42p6EfwLRxBa3hMsw46b8RZykJ3GtxmojqvQUWVAXGc0Gy3OjgFP6FXsm sonO/PbJU1ilZOpv8sNXO2+u5nUdxJyHg5yEuHLtwPZmA+dsC3xBAmfqxRWo/Ut96JaR/8 aNz4PingD0nH/yd93MBWxZ6tdKytbquGFmyykt8e6Z+7JX5TosiCZYwuCBFpUxtX6KLatf cfAG44B/5szEwA8UWwZcwVALnewnkO3ChSIQhYVqvkQFVScgTNScEu7tYN2AFw== 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=1784921699; 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=lV01m5Bz4OGLC3sGBbG5YZ1ad7QEnJO+oWciIMRGQfM=; b=iI/mU8MH7feI5KHWCUs3Xbepntgn00Sr1D/RaftoZJj8d05CCAZjFqRUNG5n92O4Jj3rr4 rN2chdNASDxRIqrBXURlKDqNd1e0fC6IXaNBXl/fi0pGvmqNZPMK7SX//2YbX/UBqN1N80 zg0QomYgNRc40RIKqY3GwhHyORkwznjcjqDtA77FGuG3esFJISAfFo71y9M/mV6EQMEdiv QI3D5R8Nx5FPlhW+OuAVSuk1AR4qSQc/s+lqTBW2IvkbFCK2qJ4tzl3Mn4SxdIM0rpJoo9 QE5cV+0soSxsPQgKt3uaI3i8JaWTfcVHbAvyJxWobMOnML0NVa847UeElMQjYQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6J9H3rZkz14XL for ; Fri, 24 Jul 2026 19:34:59 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 2649a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 19:34:59 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bjoern A. Zeeb Subject: git: 2099bf27126f - main - LinuxKPI: pci: fix dma handle type in match function List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2099bf27126f6fef10128c3cd0ea8476c88b28c5 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 19:34:59 +0000 Message-Id: <6a63be63.2649a.61558504@gitrepo.freebsd.org> The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=2099bf27126f6fef10128c3cd0ea8476c88b28c5 commit 2099bf27126f6fef10128c3cd0ea8476c88b28c5 Author: Bjoern A. Zeeb AuthorDate: 2026-05-27 01:26:02 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-07-24 19:33:55 +0000 LinuxKPI: pci: fix dma handle type in match function dma_addr_t is a vm_paddr_t which is a uint of some width. Rather than passing pointers of it around pass the value. Comparing the addresses of different storage for the same dma handle (the actual bug here) will not work when passed to the devres match function. Sponsored by: The FreeBSD Foundation Fixes: 0a575891211ef ("implement dmam_free_coherent()") MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D58285 --- sys/compat/linuxkpi/common/src/linux_pci.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sys/compat/linuxkpi/common/src/linux_pci.c b/sys/compat/linuxkpi/common/src/linux_pci.c index 1622ecb8b8ff..a49254425b5d 100644 --- a/sys/compat/linuxkpi/common/src/linux_pci.c +++ b/sys/compat/linuxkpi/common/src/linux_pci.c @@ -1916,7 +1916,7 @@ linux_dma_alloc_coherent(struct device *dev, size_t size, struct lkpi_devres_dmam_coherent { size_t size; - dma_addr_t *handle; + dma_addr_t handle; void *mem; }; @@ -1926,7 +1926,7 @@ lkpi_dmam_free_coherent(struct device *dev, void *p) struct lkpi_devres_dmam_coherent *dr; dr = p; - dma_free_coherent(dev, dr->size, dr->mem, *dr->handle); + dma_free_coherent(dev, dr->size, dr->mem, dr->handle); } static int @@ -1952,7 +1952,7 @@ linuxkpi_dmam_free_coherent(struct device *dev, size_t size, { struct lkpi_devres_dmam_coherent match = { .size = size, - .handle = &dma_handle, + .handle = dma_handle, .mem = addr }; int error; @@ -1979,7 +1979,7 @@ linuxkpi_dmam_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_ha dr->size = size; dr->mem = linux_dma_alloc_coherent(dev, size, dma_handle, flag); - dr->handle = dma_handle; + dr->handle = *dma_handle; if (dr->mem == NULL) { lkpi_devres_free(dr); return (NULL); From nobody Fri Jul 24 19:35:00 2026 X-Original-To: dev-commits-src-main@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 4h6J9K0Ql8z6mcmh for ; Fri, 24 Jul 2026 19:35:01 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6J9J565wz3PSP for ; Fri, 24 Jul 2026 19:35:00 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784921700; 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=4s2D+Qhi75Od1uGnQ7y58xSW9+TI2+ftZHu4LoEohuU=; b=n5EE1XZSEH8iot8Tls4kXDHqlqkxra0Cgk/LEno+WurdAw4vHRTGBUWEZ5E/ZToQIlkmtc w8+9hzR/fBxAQVVR3GVSIgLlcOo0pzLvIYPhU3jvzb3TPE69mdMxwy1SDp076ozg6rhdeK VoZ3/vfPK/1ilyf7NxgPTB6AASJ6lYOS13OsA80dpDbP6RDELwcTSddgmfm4eNximzcqDr f7i4Q/iKwMliRxOgbouOOz4OeFZUUjPUwuLZbm1m08Lc2ycfKcUVoM1WjHmY5+kg2emnbF YTqKa8PoW8gosHqXGKfsMJQP4hBLCwMj7ycfcezShW4cgMT9mJGce8bwGwzv1Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784921700; a=rsa-sha256; cv=none; b=Jd81Iqgz/Qxk0w6Ju0ywqRKkFLP3YvSDygqIphRJ4ftuwv1M8ul4oHYFxUXIyHO+PdbCwb /gnKWpP1vXW9plL70KVc6qXLfPjpZjcvsgQMXCcNiF1/GlXFUqU+ohV24lvMUoLXK4DNUM ErDXWB+5n9i0D+7Ujd1MiuBBBG5qQJUDPoyiuf8Ae3dYSYL3s4CoBTbQsvoeh3z5lXkSWw U9pCXLQX59JknPPPaVGSP3LIUBcLDgbLxubZ/iZpHi+nJl7B4hWxDKD9KlHbbdbM8xLHMu ppCgxeaoBQ88pguWT+am86ra7KMEj7imG01Tw0ZknMYIzw213+TqtQ5k1pttVQ== 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=1784921700; 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=4s2D+Qhi75Od1uGnQ7y58xSW9+TI2+ftZHu4LoEohuU=; b=RIAuZyAFIvmwyv9ELvDTOnV2M4NgCkEnHtaV+v+4RuLwfp8VY7IXql7tsSiISABhAA1h20 yotpxNDjA0+FmBPpzPJGB92VeDRH2ACveTPFgtC46Xm2TPWodQF7I5y0dV+8F9cKKvdjpB 2rTnAN1vQgHkS2PxhHgFADYTzwGjELHBkXfvN3HYTOBKz/7bZAGASXAUL3lgON/pn4vszO qejfECN0nmdq5UEjgFePhSohhBt72MXSxBtFIoAe4snwnjGPmRZBQW+r13KU8c6en09H3N m9vjDMaDWs2e/RFBXoZ2Xiu1+zGP5y2vEbgsgYtSTU3jze/h8PZD6G1NZ+ZXtg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6J9J3lcrz14YB for ; Fri, 24 Jul 2026 19:35:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 25e8b by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 19:35:00 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bjoern A. Zeeb Subject: git: fe1784004d6e - main - LinuxKPI: sg_page() remove superfluous () List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: fe1784004d6e43b3080ab7b7115ee0ea3ba317f2 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 19:35:00 +0000 Message-Id: <6a63be64.25e8b.2ee6cc94@gitrepo.freebsd.org> The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=fe1784004d6e43b3080ab7b7115ee0ea3ba317f2 commit fe1784004d6e43b3080ab7b7115ee0ea3ba317f2 Author: Bjoern A. Zeeb AuthorDate: 2026-07-17 12:26:13 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-07-24 19:33:56 +0000 LinuxKPI: sg_page() remove superfluous () Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D58295 --- sys/compat/linuxkpi/common/include/linux/scatterlist.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/compat/linuxkpi/common/include/linux/scatterlist.h b/sys/compat/linuxkpi/common/include/linux/scatterlist.h index 4ab3de5fb64d..dd8ea31d4872 100644 --- a/sys/compat/linuxkpi/common/include/linux/scatterlist.h +++ b/sys/compat/linuxkpi/common/include/linux/scatterlist.h @@ -135,7 +135,7 @@ sg_set_page(struct scatterlist *sg, struct page *page, unsigned int len, static inline struct page * sg_page(struct scatterlist *sg) { - return ((struct page *)((sg)->page_link & ~SG_PAGE_LINK_MASK)); + return ((struct page *)(sg->page_link & ~SG_PAGE_LINK_MASK)); } static inline void From nobody Fri Jul 24 19:35:01 2026 X-Original-To: dev-commits-src-main@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 4h6J9L1l2Pz6mcdX for ; Fri, 24 Jul 2026 19:35:02 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6J9K62lfz3PnD for ; Fri, 24 Jul 2026 19:35:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784921701; 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=8K2M9C0M4QOCgamE+GlBPzY+b5KrkSeWqPGeJrPduXI=; b=vHpYTyGEzPqdbGo/zFnstw1OWetAQjLboC0ou7Mi9g358kEMlz5DFzsGEr5dBhIAOdqTre ZThU+9XqW8LY+PahVuR153NGqLuhI7K0NpLGZfjaA1zEFwPdBVwTdQ4wU8a/ok+r5AhZw1 Xr69nQVXEJekZT/wzCPrFkqU5Tq64H2AMOIwzElH6V1kCEIzsm3x5gtKZW7qQz8xvPh/HW 1quNHAISjvyfDBHczGfl/P6EHvp0csZJDJWqm/sYvW3nrbjsNn7pSNSgvLudj5CAfiT0Ff dUkCKR9s9JSzz7JIIP77d61CgRxd4jktn3bGPP2g7M9DvHJIWiPwxxjoIP2+EA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784921701; a=rsa-sha256; cv=none; b=ozFkd3s9lQr83jadH507fnAeRGxnY5tsSA7U7Z81no6es8hHDVv0dszFVoJxJUyiwtfqsd Or5UuYzLmgVHJEEer2e6KOjLETmyg78kmdUVxDvjdwP/AOIo9q6o3/3KYH6y1k+eQLZ//3 uF8hwjkqEo4FkJdObiyrcElh8qIBidfHXut5DUKovuJwiXGfhy3pghmOW/C/8KvkVfLI+E tzz6lbEGpbOLG8VnB9v1dhMQBtEzVM3nCZCyZj8tUjAgPYeJRcBh8rfxWMd0zLpeOgPnkj G6/bvVhBE/OYOsxLyMgwPFs39f6J8Y73jVBHQMZA8Dl74xnVJnGMPc5TMgnz0w== 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=1784921701; 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=8K2M9C0M4QOCgamE+GlBPzY+b5KrkSeWqPGeJrPduXI=; b=f7SB9IWbLEnkcol9rHJnIiSa/89114B2w43r131cteDtjOiGQTizXwyfNm+XE7dhP4JnFS gDB9Teidn+708JzDPCrXSuew2O8lcXwl8awqrlz7pcDrzZs7wQrDYWaWdpCFxyk0bB0w+P SGbLKp1oQ5T76M1hlyclUQGuiE+w3uimBGNguTSypDFoTvoxfrZH7Wr8ZDICy1hGerC06L BoPLneCKuUSdpWQH5AbWKy0iBXj6QMuYr3aepK3yeWFPabINcGqCd89ZD2Uf21pZ4eLzgf ZViwet8vxivJezTY8cNWGycQLgwDvkKxotNSU6Xms4hpFDUubbusmdtuZiJRNw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6J9K4RHRz14ry for ; Fri, 24 Jul 2026 19:35:01 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 25afc by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 19:35:01 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bjoern A. Zeeb Subject: git: 0845efe88b35 - main - LinuxKPI: move clear_page() within the linux/page.h file List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0845efe88b355547b103dca90e69e46a3ebdd016 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 19:35:01 +0000 Message-Id: <6a63be65.25afc.810a496@gitrepo.freebsd.org> The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=0845efe88b355547b103dca90e69e46a3ebdd016 commit 0845efe88b355547b103dca90e69e46a3ebdd016 Author: Bjoern A. Zeeb AuthorDate: 2026-07-17 12:53:16 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-07-24 19:33:56 +0000 LinuxKPI: move clear_page() within the linux/page.h file clear_page() would normally live in asm/page.h but adding the file and fixing the dependencies would be too much for a single line. Move the function to the end of the file with a clear separator and make it clear that it does not operate on a 'struct page' but on a page address by changing the argument name and leaving a comment. The function is currently used by at least mthca(4) as the only in-tree consumer, and drm-kmod ttm_pool.c. No functional changes. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D58296 --- sys/compat/linuxkpi/common/include/linux/page.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sys/compat/linuxkpi/common/include/linux/page.h b/sys/compat/linuxkpi/common/include/linux/page.h index 6f5f37d2fd0f..a8e266af95fd 100644 --- a/sys/compat/linuxkpi/common/include/linux/page.h +++ b/sys/compat/linuxkpi/common/include/linux/page.h @@ -79,7 +79,6 @@ pgprot2cachemode(pgprot_t prot) #define nth_page(page,n) pfn_to_page(page_to_pfn(page) + (n)) #define page_to_phys(page) VM_PAGE_TO_PHYS(page) -#define clear_page(page) memset(page, 0, PAGE_SIZE) #define pgprot_noncached(prot) \ (((prot) & VM_PROT_ALL) | cachemode2protval(VM_MEMATTR_UNCACHEABLE)) #ifdef VM_MEMATTR_WRITE_COMBINING @@ -129,4 +128,11 @@ clflush_cache_range(void *addr, unsigned int size) int lkpi_set_pages_attr(struct page *page, int numpages, vm_memattr_t ma); +/* -------------------------------------------------------------------------- */ +/* + * clear_page() is called on kmem allocated page addresses, thus zeros a page + * not a 'struct page'. Really belongs into . + */ +#define clear_page(_pa) memset(_pa, 0, PAGE_SIZE) + #endif /* _LINUXKPI_LINUX_PAGE_H_ */ From nobody Fri Jul 24 19:35:02 2026 X-Original-To: dev-commits-src-main@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 4h6J9M2QQGz6mcXg for ; Fri, 24 Jul 2026 19:35:03 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6J9L6Lrrz3PSW for ; Fri, 24 Jul 2026 19:35:02 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784921702; 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=e+jp6gQyPESosSxTQ0ibbzaI6hxhj/NFeqc61h4l4sg=; b=Q1ckzeb33ZIGYDU+Of7aIix3+vEgN/Tjp1K+Z8eS4x8zmCDPCzV+U2PvIh+OeQnopwO1yI wMeHadVJIMU9kudRnUR1XJb1Nlw3lRU6sBLj9vSyRQ2g19BFppmcRhSCzqn+LKj24nl85c L2KGPbmiNU+iTsiCPi808m2v7Yjxj75J1rQM4TUBwU7KLm6C2oNgtN+TM3I+so7hew7eTD 4t7f8XjRQu2Srv/niUsPiXYcVgSRgbHNShrJYV51uzgz5ZGYaHKOaM1S0eemu82icF+C7g 4u4lEY+4YwP+95xkOIYP+jumbqeUu5Z2vNQVXDlrgoAJBXTDZ/K7FDJSRq6UMQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784921702; a=rsa-sha256; cv=none; b=o15LxElsTRfGCdLevEIJslkm1mYqEJcv/Nyo435Cec7MLIz0By1nlLPv1HWu7+01WAin9h Wa9BbquzK9Kyinatn10iuusfx6/vreidUyUzdo64VSc60X4WddYnLl9L6AjlbmJNzhP6c7 GJf2kpus9kfGdMeZ1Qntbz3bA0jQBLPzJirT0LTeWr5rt7nnmm1cA9Rfs7PA6TEYiB50Af qGDxsSAe0C7tZdT2keSwD9XylvzgAyTENdESJtpmQAdVMLgxEdE/iNi/UHF32BGpM5C3Pb 8raTuHTk1evfAKKuffVIM7thBRTBK/JAuQOvkcLIBGsMUO4GdP833AbJcckP+A== 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=1784921702; 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=e+jp6gQyPESosSxTQ0ibbzaI6hxhj/NFeqc61h4l4sg=; b=wtmCkPd2CSOLS3WSlHw3SXIUSJUs/kEFGDEfodObemwmR59jYl9Ep94Hcp3ahPkvDuo/cC NguwJizax5j0Bx0HX8bfWBk8/zKLfapWHysVuKQf3Cu0hdD7To8ocV2BaQ+bAp2ycQrsyc 8Ya344uQdDjGyuHRXKGRD6nY0B0Gn/FlFkz3FEPhfq1GRQIQTzlVOTHVhzipB3YdbVXwYI CyzCfaDtrRBoZqZUzLQNqMN+Z0jVxWylqiCg8aZRMoEgIZIb5Cy6ta0DDpb3jJybVRX3ew dzL+PT9QloCM/q72tEbX+OjBPB0IrhX3IwldZfnESHJN3LIlHtmJAYuzTI4n9Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6J9L5H9yz143L for ; Fri, 24 Jul 2026 19:35:02 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 26b93 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 19:35:02 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bjoern A. Zeeb Subject: git: ac4b43b7b9dd - main - LinuxKPI: prefer struct page [*] over struct vm_page[_t] List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ac4b43b7b9dd2dac5d7caf5d4c7aa0d670d38aec Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 19:35:02 +0000 Message-Id: <6a63be66.26b93.69d4ee6f@gitrepo.freebsd.org> The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=ac4b43b7b9dd2dac5d7caf5d4c7aa0d670d38aec commit ac4b43b7b9dd2dac5d7caf5d4c7aa0d670d38aec Author: Bjoern A. Zeeb AuthorDate: 2026-07-17 12:58:32 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-07-24 19:33:56 +0000 LinuxKPI: prefer struct page [*] over struct vm_page[_t] LinuxKPI is based on Linux 'struct page' which is currently aliased to struct vm_page. Upcoming changes may change that so start using 'struct page *' instead vm_page_t to make future changes transparent. This is a continuation of 9e9c682ff3a1 and should be a NOP. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: emaste (no objections) Differential Revision: https://reviews.freebsd.org/D58297 --- sys/compat/linuxkpi/common/src/linux_page.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/compat/linuxkpi/common/src/linux_page.c b/sys/compat/linuxkpi/common/src/linux_page.c index 62bfa07dd297..e0385bf2d40a 100644 --- a/sys/compat/linuxkpi/common/src/linux_page.c +++ b/sys/compat/linuxkpi/common/src/linux_page.c @@ -743,7 +743,7 @@ void * linuxkpi_page_frag_alloc(struct page_frag_cache *pfc, size_t fragsz, gfp_t gfp) { - vm_page_t pages; + struct page *pages; if (fragsz == 0) return (NULL); @@ -765,7 +765,7 @@ linuxkpi_page_frag_alloc(struct page_frag_cache *pfc, void linuxkpi_page_frag_free(void *addr) { - vm_page_t page; + struct page *page; page = virt_to_page(addr); linux_free_pages(page, 0); From nobody Fri Jul 24 19:35:03 2026 X-Original-To: dev-commits-src-main@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 4h6J9N25hzz6mcxy for ; Fri, 24 Jul 2026 19:35:04 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6J9N0N1pz3PWq for ; Fri, 24 Jul 2026 19:35:04 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784921704; 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=9RXAsXb/M0Yb8437Er8yEyGbN1j6z8J4X/hZkE5es3E=; b=eHFmRe2mTnns41IUXLLUYAx5FgDcZXvw+tU1Li20ysGbMl3LGObj7Z7M8Y0Ov5QiayHNO6 ioyhw6PQ0h4UDZdpKFKDq9J1b3B4PcCDb24q3+dm4thVYwMA6JNFuaUtgFS796/CQeqAWG tK3qbk7KsvkgM1ugM4qEwzi3PE1ZpPb3MN10+7JnEvHGp0UT0ZeJiSYHKurWmlbXuBtOyT LZ90ixTe4esdmIuKl7CevYE4nxEEOBusTgrVDbynS+jG+vmZekBPBIubIYQ4KdrETWFHE+ DZR+sPS85b8e/RtKVxuuC3NcSEGrf3Uqhf3HTSumtFq4LtSoFWUP+Me5VWV7lg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784921704; a=rsa-sha256; cv=none; b=Bc75nNXjTmdXyVdVai7md6SBltP7+xBjWGDtbXkD3yUh25ReEUExTxIem9sLvE3djcvXiL pi9YjcZLwD6w0DgOKEEOdNTBZzSX3WW6yM0Lv3nISrzJr+jDNpHiECcb5XgD4WfI0/9gQU cIYs0xSaozJ/9GSlAeNO/YImu6VyRr+fAvi2uaD7QTucOqx0fa5Bprq+rfmOBYbHwPY6Wm SGKmyDEn9Gdr5AsnHmG9OvoZ9+hkBTs5uOoOq2MprkGFgATP01K/BN29DzSRYWaUfxms6H 4AMT3gt/LH2En7vDl4jbULbYAhiIlOCjYEwmKjUU1kTh3BHn8G0iB7RAryzMhw== 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=1784921704; 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=9RXAsXb/M0Yb8437Er8yEyGbN1j6z8J4X/hZkE5es3E=; b=rfma4c032f9V+rTrT672e/9srXQRN5k+CZb8X5tbkH1L1LC/RcTmhXcRC96DKsnN0QtG4U PsccLCrWpnViGpocEmPG8J0mPMyhqoZZTu59y2MG3waisY/4SpBDe9Ld1K7CLTtQ/LRl8M dmH16H6Pti4Jud455vTB4uicKNryJYovZO8Skqx9KFqfpybwye1xMQJ2nr8QmGJd5urefe OB5tq/f5a4Ku+3s503kCgG5l8qahV6EzvbCLnJ7tVbfD04tDw8EINLtEhJdAGgA4c+3bpg uZqArvYQImTxkoRF9xGxXFi8nzJ1QfddODTLxmGwayYh0mXsrEgyBryDOL93/A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6J9M67l2z14v5 for ; Fri, 24 Jul 2026 19:35:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 253cb by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 19:35:03 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bjoern A. Zeeb Subject: git: f45506c6a6f4 - main - LinuxKPI: page.h: use atop() and ptoa() instead of PAGE_SHIFT List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f45506c6a6f4742cd5129d636902b61045c4754b Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 19:35:03 +0000 Message-Id: <6a63be67.253cb.5154dc76@gitrepo.freebsd.org> The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=f45506c6a6f4742cd5129d636902b61045c4754b commit f45506c6a6f4742cd5129d636902b61045c4754b Author: Bjoern A. Zeeb AuthorDate: 2026-07-17 13:09:01 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-07-24 19:33:56 +0000 LinuxKPI: page.h: use atop() and ptoa() instead of PAGE_SHIFT With upcoming changes to 'struct page' this will make the lines easier to read by using the predefined macros from param.h. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: markj, kib Differential Revision: https://reviews.freebsd.org/D58298 --- sys/compat/linuxkpi/common/include/linux/page.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/compat/linuxkpi/common/include/linux/page.h b/sys/compat/linuxkpi/common/include/linux/page.h index a8e266af95fd..eb0083f5fecc 100644 --- a/sys/compat/linuxkpi/common/include/linux/page.h +++ b/sys/compat/linuxkpi/common/include/linux/page.h @@ -74,8 +74,8 @@ pgprot2cachemode(pgprot_t prot) #define page_to_virt(page) linux_page_address(page) #define virt_to_page(x) PHYS_TO_VM_PAGE(vtophys(x)) -#define page_to_pfn(pp) (VM_PAGE_TO_PHYS(pp) >> PAGE_SHIFT) -#define pfn_to_page(pfn) (PHYS_TO_VM_PAGE((pfn) << PAGE_SHIFT)) +#define page_to_pfn(pp) atop(VM_PAGE_TO_PHYS(pp)) +#define pfn_to_page(pfn) PHYS_TO_VM_PAGE(ptoa(pfn)) #define nth_page(page,n) pfn_to_page(page_to_pfn(page) + (n)) #define page_to_phys(page) VM_PAGE_TO_PHYS(page) From nobody Fri Jul 24 19:35:04 2026 X-Original-To: dev-commits-src-main@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 4h6J9P5Gz4z6mcXl for ; Fri, 24 Jul 2026 19:35:05 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6J9P1G8Cz3Pj0 for ; Fri, 24 Jul 2026 19:35:05 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784921705; 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=n+ji45Hj0Y8GIjq1hCJWKCGtuiZSG8K/TpELBjRrdgU=; b=j6beUWx8dg9evdp6uqg6VDJHHZd9nGN1q8/foidHNE+RCyod6J5fx6Exo8FdzkPGpDUWu4 ufoZx86iMfTStoURykf9UbZeMMq9o7Mp72ekGzsBf36zJ5iG5aPRF/3ufWv9WkOYV1FJYh 2t8K7xxBm/6Ln5kXarW2Sda4MCVHXxntmKL4bDtZ5yswyxHPA04PYS30ZPii1a06MqUsO0 m0xUnKh1wct4tZw18b26+iCioKb+aKSATm3ubboCr+VPJ4Rdc7h5w2wMgUshC5/dgP+sGV LiAIyVYLW4gwT29QOaVMX7A4PEfEf7GC320E9jk6pau8FP6pJ1uptcW5tpQAcw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784921705; a=rsa-sha256; cv=none; b=vXJ3INM2u5WRwZ9TrcASol5fw4l9+90uvnKVdX7b2/d7mNOyuNU4TCzCB2gZzztK5jUilf O4spo6gchfK8+HiqRBWGzgIFI/AWDxjrxNkfoCxJKYI7AvybTlP5GErup3X2FxNm3nlILP MzB0w/Z4BbnJbVuHPtOq9jR8hX9USW26zQu+8FQf7LNq9rwWgd//V1z4x8PnCxG3KitGWR tXwM9ZG5EEoMCqHVqtcX5resPTVO+JfjtSkagzcDZkyP/7pLPZdeUtb5LTgF6INEG5BCpA wjsQ9c8hPGQBIP2fDJfLurI3OKo3JZAX8kY3Jt3HXo3TPgGb1NEkr8bY1mOp2Q== 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=1784921705; 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=n+ji45Hj0Y8GIjq1hCJWKCGtuiZSG8K/TpELBjRrdgU=; b=HQIdteNyXMfzIn+xdzkdjViJilYm7vnc1Jr/LpF0zgLWBZGWYjqZy4y0an8t86S4YZiQuW Ny7nqY0RHXo/1eykJBmIhVh8mw1dDJ9I6LwkbFPGWgMob9l2dVwHuKp4AKl5XLuWW5jqh4 jt9a5tSqSCTsxSkpvNOpW7yfBu/zZ5N+qOCg4FpO7y17B8nJMUyJMSltdRK2t02hq8Qtwi z/npb8O+jdtNVYsTCP0LnKBfaJKxuv0dOSEC43r+6tzGI+TPR1cT2ZhddeQlYuITNEHHJq 6miLpGnag9VWreSZfzYiJy3r0GkCeQUnC4dJEeaxyKk0CwlGAyExPaBEvOlWnQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6J9N6xK8z14p9 for ; Fri, 24 Jul 2026 19:35:04 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 25d1c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 19:35:04 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bjoern A. Zeeb Subject: git: 0b8d22019dcf - main - LinuxKPI: page.h: resort lines List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0b8d22019dcf708a8d047817963658783cd53c46 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 19:35:04 +0000 Message-Id: <6a63be68.25d1c.68f33d48@gitrepo.freebsd.org> The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=0b8d22019dcf708a8d047817963658783cd53c46 commit 0b8d22019dcf708a8d047817963658783cd53c46 Author: Bjoern A. Zeeb AuthorDate: 2026-07-17 13:12:56 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-07-24 19:33:57 +0000 LinuxKPI: page.h: resort lines Two of the "page macros" can be abstracted elsewhere in the upcoming struct page work, so sort them away from the four which are here to stay. No functional change. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D58299 --- sys/compat/linuxkpi/common/include/linux/page.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sys/compat/linuxkpi/common/include/linux/page.h b/sys/compat/linuxkpi/common/include/linux/page.h index eb0083f5fecc..8271d2d63021 100644 --- a/sys/compat/linuxkpi/common/include/linux/page.h +++ b/sys/compat/linuxkpi/common/include/linux/page.h @@ -72,13 +72,14 @@ pgprot2cachemode(pgprot_t prot) return (VM_MEMATTR_DEFAULT); } -#define page_to_virt(page) linux_page_address(page) #define virt_to_page(x) PHYS_TO_VM_PAGE(vtophys(x)) #define page_to_pfn(pp) atop(VM_PAGE_TO_PHYS(pp)) #define pfn_to_page(pfn) PHYS_TO_VM_PAGE(ptoa(pfn)) -#define nth_page(page,n) pfn_to_page(page_to_pfn(page) + (n)) #define page_to_phys(page) VM_PAGE_TO_PHYS(page) +#define page_to_virt(page) linux_page_address(page) +#define nth_page(page,n) pfn_to_page(page_to_pfn(page) + (n)) + #define pgprot_noncached(prot) \ (((prot) & VM_PROT_ALL) | cachemode2protval(VM_MEMATTR_UNCACHEABLE)) #ifdef VM_MEMATTR_WRITE_COMBINING From nobody Fri Jul 24 19:35:06 2026 X-Original-To: dev-commits-src-main@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 4h6J9Q5hp4z6mcmq for ; Fri, 24 Jul 2026 19:35:06 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6J9Q1mdfz3PXF for ; Fri, 24 Jul 2026 19:35:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784921706; 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=lwwZV/3XYfYLK4Rum9aUA4Aj2xNdgbrLplrOOGK5iHs=; b=d48BG3Q9l8W0g2o+EhjUZFA09W1naiqbw9AXsabyQVl7MfdbMYRCKilcOGIucimy7xnfh5 OcXklhwYXeTv+gruWivqdURLRnVNYA/wUBuB0NeBCPQ/SP0Rw7ds89bvmAk3pkzt7J3Sqm DmryITkBBPTLp2FvSFlYTzfPL9T44qNavwOJyP3G4QlpTGTJV7jdF4ZuLML5dWctIlDp1+ HexO+Qh+QILh5SNXRCp2mpJOfj1o5+QaNPZMoXDK6fvckqXdIvmW8kjTtEgResqvpxekd6 rsUHglffJGzoIQXt7V/wnuoPurOmJIxsSz9dCsfad+N9m2/OTXJHqGK5jF7Jow== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784921706; a=rsa-sha256; cv=none; b=YXmqqcDMKXIwfczhXha0OTMgjRBkY+SbLiVoHRNAsnS6lGzu0SxJb4r0ib9Ze/KDLh7g1j 898AgjqLc3bP9ZKJI+4SpUdt+xPP2/vaskQosqLGWbAR5AWW0fZ+EQXX9AQqVlGCoscxTL y77QaKQzg8Ovtu7THQUQdl8zswV8VE+kjhUnX6qq424sgMDmpHkq4NXqrXhOuwfAt5nA7f TFtbeisvm8Ki15XXfx2P80v2+TLLYr9uDm9oHUSlxBrDF4b8qLhVURba+KVIqhnpK6uaTn OInmMV+Eo5VKNG7ogWONiSsrT9DxrFDYQuW2lFFj9PloQk9qDPkVL6swy2bqwA== 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=1784921706; 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=lwwZV/3XYfYLK4Rum9aUA4Aj2xNdgbrLplrOOGK5iHs=; b=GdC9vwrNX1eHLVWnmnELTL33XqvvBtAawxdAKxxB8wsiabEj8iGQlufxETtvCCGd3zkLTt f/Hy+EOM4ObncOFtCB7Kku6a9gUHlcqWfTem/i6MFdvBF1RqkQziZULJiA9x12vikYXSze bXfEVjXAYEznMYS+zsEZ5RGmvVb2FmNVkeABoxX40TqAfQMZWT12kO0Zvm1vpDsfJ9G1hu cj3B2UkVJjMBqSrktpb5vXR3BeernmgH/I1csJAkO10hLxjAbhmzwPbqz8U0+eJKWLr5Qr trGgt1n01QHNNSkKhBUr9oUcdxhcwbz0G+vvFQlH+t32kRzTmAoolSkV2VUuhQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6J9Q0gV1z14s1 for ; Fri, 24 Jul 2026 19:35:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 26c00 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 19:35:06 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bjoern A. Zeeb Subject: git: e591a7662143 - main - LinuxKPI: page pool updates and add to the build List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e591a76621430d6d29f2580e2dec8991e450ed5e Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 19:35:06 +0000 Message-Id: <6a63be6a.26c00.20d04f@gitrepo.freebsd.org> The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=e591a76621430d6d29f2580e2dec8991e450ed5e commit e591a76621430d6d29f2580e2dec8991e450ed5e Author: Bjoern A. Zeeb AuthorDate: 2026-07-18 11:54:42 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-07-24 19:33:57 +0000 LinuxKPI: page pool updates and add to the build Split implementation out from the header files. This "page pool" is the very minimalistic version we need in order to support packets on mt76. We allocate the page pool in order to have the meta data available of which we only make limited use. This implementation does no pooling, it does no page fragments for now, it always hands out a full page and frees it upon return. It is written in a way that it can be in the tree before the 'struct page' work it depends on has landed in order to reduce friction for people who want to try mt7921 (or others later) upfront. We use the same #ifdef as in the struct page work for that reason so one knob will turn everything on or off. Once the struct page work has landed and settled we can start filling this with more complexity. In the unlikely event that in the mean time any other consumer would start showing up they will have to be aware that the current code as-is essentially is a NOP without the 'struct page' work. A WARN_ONCE() will notify them. Sponsored by: The FreeBSD Foundation MFC after: 3 days --- .../common/include/net/page_pool/helpers.h | 58 ++++---- .../linuxkpi/common/include/net/page_pool/types.h | 19 ++- .../linuxkpi/common/src/linuxkpi_page_pool.c | 156 +++++++++++++++++++++ sys/conf/files | 2 + sys/modules/linuxkpi/Makefile | 1 + 5 files changed, 207 insertions(+), 29 deletions(-) diff --git a/sys/compat/linuxkpi/common/include/net/page_pool/helpers.h b/sys/compat/linuxkpi/common/include/net/page_pool/helpers.h index 3469c39c7757..032e171fea3e 100644 --- a/sys/compat/linuxkpi/common/include/net/page_pool/helpers.h +++ b/sys/compat/linuxkpi/common/include/net/page_pool/helpers.h @@ -1,5 +1,9 @@ -/*- +/* * Copyright (c) 2023-2025 Bjoern A. Zeeb + * Copyright (c) 2025-2026 The FreeBSD Foundation + * + * Portions of this software were developed by Björn Zeeb + * under sponsorship from the FreeBSD Foundation. * * SPDX-License-Identifier: BSD-2-Clause */ @@ -12,58 +16,57 @@ #include #include +struct page_pool *linuxkpi_page_pool_create(const struct page_pool_params *); +void linuxkpi_page_pool_destroy(struct page_pool *); + +struct page *linuxkpi_page_pool_dev_alloc_frag(struct page_pool *, + uint32_t *, size_t); +void linuxkpi_page_pool_put_full_page(struct page_pool *, struct page *, bool); +dma_addr_t linuxkpi_page_pool_get_dma_addr(const struct page *); + + static inline struct page_pool * page_pool_create(const struct page_pool_params *ppparams) { - - pr_debug("%s: TODO\n", __func__); - return (NULL); + return (linuxkpi_page_pool_create(ppparams)); } static inline void -page_pool_destroy(struct page_pool *ppool) +page_pool_destroy(struct page_pool *pp) { - - pr_debug("%s: TODO\n", __func__); + linuxkpi_page_pool_destroy(pp); } + static inline struct page * -page_pool_dev_alloc_frag(struct page_pool *ppool, uint32_t *offset, +page_pool_dev_alloc_frag(struct page_pool *pp, uint32_t *offset, size_t size) { - - pr_debug("%s: TODO\n", __func__); - return (NULL); + return (linuxkpi_page_pool_dev_alloc_frag(pp, offset, size)); } -static inline dma_addr_t -page_pool_get_dma_addr(struct page *page) +static inline void +page_pool_put_full_page(struct page_pool *pp, struct page *page, + bool allow_direct) { - - pr_debug("%s: TODO\n", __func__); - return (0); + linuxkpi_page_pool_put_full_page(pp, page, allow_direct); } -static inline enum dma_data_direction -page_pool_get_dma_dir(const struct page_pool *ppool) +static inline dma_addr_t +page_pool_get_dma_addr(const struct page *page) { - - pr_debug("%s: TODO\n", __func__); - return (DMA_BIDIRECTIONAL); + return (linuxkpi_page_pool_get_dma_addr(page)); } -static inline void -page_pool_put_full_page(struct page_pool *ppool, struct page *page, - bool allow_direct) +static inline enum dma_data_direction +page_pool_get_dma_dir(const struct page_pool *pp) { - - pr_debug("%s: TODO\n", __func__); + return (pp->params.dma_dir); } static inline int page_pool_ethtool_stats_get_count(void) { - pr_debug("%s: TODO\n", __func__); return (0); } @@ -71,7 +74,6 @@ page_pool_ethtool_stats_get_count(void) static inline uint8_t * page_pool_ethtool_stats_get_strings(uint8_t *x) { - pr_debug("%s: TODO\n", __func__); return (x); } diff --git a/sys/compat/linuxkpi/common/include/net/page_pool/types.h b/sys/compat/linuxkpi/common/include/net/page_pool/types.h index 6747be50b9b2..e35fd32d3e02 100644 --- a/sys/compat/linuxkpi/common/include/net/page_pool/types.h +++ b/sys/compat/linuxkpi/common/include/net/page_pool/types.h @@ -1,5 +1,9 @@ -/*- +/* * Copyright (c) 2023-2025 Bjoern A. Zeeb + * Copyright (c) 2025-2026 The FreeBSD Foundation + * + * Portions of this software were developed by Björn Zeeb + * under sponsorship from the FreeBSD Foundation. * * SPDX-License-Identifier: BSD-2-Clause */ @@ -27,10 +31,23 @@ struct page_pool_params { }; struct page_pool { + struct page_pool_params params; }; #define PP_FLAG_DMA_MAP BIT(0) #define PP_FLAG_DMA_SYNC_DEV BIT(1) #define PP_FLAG_PAGE_FRAG BIT(2) +#define PP_FLAGS_ALL (PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV | \ + PP_FLAG_PAGE_FRAG) + +struct page *linuxkpi_page_pool_alloc_frag(struct page_pool *, uint32_t *, + size_t, gfp_t); + +static inline struct page * +page_pool_alloc_frag(struct page_pool *pp, uint32_t *offset, + size_t size, gfp_t gfp) +{ + return (linuxkpi_page_pool_alloc_frag(pp, offset, size, gfp)); +} #endif /* _LINUXKPI_NET_PAGE_POOL_TYPES_H */ diff --git a/sys/compat/linuxkpi/common/src/linuxkpi_page_pool.c b/sys/compat/linuxkpi/common/src/linuxkpi_page_pool.c new file mode 100644 index 000000000000..93e649faafd7 --- /dev/null +++ b/sys/compat/linuxkpi/common/src/linuxkpi_page_pool.c @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2025-2026 The FreeBSD Foundation + * + * This software was developed by Björn Zeeb under sponsorship from + * the FreeBSD Foundation. + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +struct page_pool * +linuxkpi_page_pool_create(const struct page_pool_params *ppparams) +{ + struct page_pool *pp; + int error; + +#ifndef PAGE_IS_LKPI_PAGE + WARN_ONCE(1, "\n!!! LinuxKPI page pool not supported yet!!!\n\n"); +#endif + + pp = kzalloc_node(sizeof(*pp), GFP_KERNEL, ppparams->nid); + if (pp == NULL) + return (ERR_PTR(-ENOMEM)); + + pp->params = *ppparams; + + if ((pp->params.flags & PP_FLAG_DMA_MAP) != 0) { + if (pp->params.dma_dir != DMA_FROM_DEVICE && + pp->params.dma_dir != DMA_BIDIRECTIONAL) { + pr_warn_once("%s: invalid dma_dir %#04x\n", + __func__, pp->params.dma_dir); + error = -EINVAL; + goto free_pp; + } + } + + if ((pp->params.flags & PP_FLAG_DMA_SYNC_DEV) != 0) { + if ((pp->params.flags & PP_FLAG_DMA_MAP) == 0) { + pr_warn_once("%s: DMA_SYNC_DEV but no DMA_MAP\n", + __func__); + error = -EINVAL; + goto free_pp; + } + + if (pp->params.max_len == 0) { + pr_warn_once("%s: max_len unset\n", __func__); + error = -EINVAL; + goto free_pp; + } + } + + return (pp); + +free_pp: + kfree(pp); + return (ERR_PTR(error)); +} + +void +linuxkpi_page_pool_destroy(struct page_pool *pp) +{ + kfree(pp); +} + +/* ---------------------------------------------------------------------------- */ + +struct page * +linuxkpi_page_pool_alloc_frag(struct page_pool *pp, uint32_t *offset, + size_t size, gfp_t gfp) +{ +#ifdef PAGE_IS_LKPI_PAGE + struct page *p; + dma_addr_t dma; + + if (size > PAGE_SIZE) { + pr_warn_once("%s: size %zu > PAGE_SIZE\n", __func__, size); + return (NULL); + } + + /* + * We do not try to be smart on the first cut until 'struct page' work + * is sorted and settled. Everyone gets a page for now. + * XXX in the future deal with page fragments, pool limits, etc. + */ + p = alloc_page(gfp); + if (p == NULL) + return (NULL); + + if (offset != NULL) + *offset = 0; + + if ((pp->params.flags & PP_FLAG_DMA_MAP) != 0) { + dma = dma_map_page_attrs(pp->params.dev, p, 0, PAGE_SIZE, + pp->params.dma_dir, DMA_ATTR_SKIP_CPU_SYNC); + if (dma_mapping_error(pp->params.dev, dma)) { + put_page(p); + return (NULL); + } + + /* We store the dma address in struct page as well. */ + p->dma_addr = dma; + } + + if ((pp->params.flags & PP_FLAG_DMA_SYNC_DEV) != 0) + dma_sync_single_for_device(pp->params.dev, dma, PAGE_SIZE, + pp->params.dma_dir); + + /* + * We may not yet need to track the page pool on the page in order + * to know where to return it but prepare at least for that. + */ + p->pp = pp; + + return (p); +#else + return (NULL); +#endif /* PAGE_IS_LKPI_PAGE */ +} + +struct page * +linuxkpi_page_pool_dev_alloc_frag(struct page_pool *pp, uint32_t *offset, + size_t size) +{ + gfp_t gfp; + + gfp = (GFP_ATOMIC | __GFP_NOWARN); + return (page_pool_alloc_frag(pp, offset, size, gfp)); +} + +void +linuxkpi_page_pool_put_full_page(struct page_pool *pp, struct page *page, + bool allow_direct) +{ + /* We just free the full page we handed out for now. */ +#ifdef PAGE_IS_LKPI_PAGE + page->pp = NULL; + page->dma_addr = 0; +#endif + put_page(page); +} + +dma_addr_t +linuxkpi_page_pool_get_dma_addr(const struct page *page) +{ + + KASSERT(page != NULL, ("%s: page %p\n", __func__, page)); + +#ifdef PAGE_IS_LKPI_PAGE + return (page->dma_addr); +#else + return (0); +#endif +} diff --git a/sys/conf/files b/sys/conf/files index fcce58183b9b..567e024259b0 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -4724,6 +4724,8 @@ compat/linuxkpi/common/src/linux_netdev.c optional compat_linuxkpi \ compile-with "${LINUXKPI_C}" compat/linuxkpi/common/src/linux_page.c optional compat_linuxkpi \ compile-with "${LINUXKPI_C}" +compat/linuxkpi/common/src/linuxkpi_page_pool.c optional compat_linuxkpi \ + compile-with "${LINUXKPI_C}" compat/linuxkpi/common/src/linux_pci.c optional compat_linuxkpi pci \ compile-with "${LINUXKPI_C}" compat/linuxkpi/common/src/linux_tasklet.c optional compat_linuxkpi \ diff --git a/sys/modules/linuxkpi/Makefile b/sys/modules/linuxkpi/Makefile index 2090fe76d857..da8d003e1d22 100644 --- a/sys/modules/linuxkpi/Makefile +++ b/sys/modules/linuxkpi/Makefile @@ -21,6 +21,7 @@ SRCS= linux_compat.c \ linux_lock.c \ linux_netdev.c \ linux_page.c \ + linuxkpi_page_pool.c \ linux_pci.c \ linux_radix.c \ linux_rcu.c \ From nobody Fri Jul 24 21:07:22 2026 X-Original-To: dev-commits-src-main@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 4h6LCt42DMz6mkjC for ; Fri, 24 Jul 2026 21:07:22 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6LCt3Zblz3cQw for ; Fri, 24 Jul 2026 21:07:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784927242; 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=j/sIpipXeJJfYTLJ69sDupQoswtgqKTIfOtj0iraywE=; b=POxtfzz6dl2zYliAb1Qt2TqLUWjibq7OBXSqN0L6AXOEnv+1vTNuvG2AVptDLwX5LKrXXQ DisaRoMQQJA9Sgz3Hf2jwda3NUhv9UBU2LsqweYL3INKk5ekjOm551kFCWtmHAWijBLvsr RWsXvORSoirfMrKRQ6TFLL3z3iVkQkJ4Ae8axhwkEe1AWrVlEcOVF0bvx4ASsO9ZZt5rGf VBdP8oALQ2+TYq5cdNkeLdKXmgtXJ8WCslTx5tA/y/ujTkT383uKXgLmwRQLCNQhTF8gVv NS/sx7zvbiFWsitqCkT7rhEPuCUn0YJKpzPVsjif9QWQRcWKMF555bFzx/VOLw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784927242; a=rsa-sha256; cv=none; b=qQFMjVvN9aPgYweFFihM2oXJTo3z/5mCLAnMYDs0lnSVAbOQYBJt0HvtNcehlWczh4hZDT gRUiKddRCMNgyUqYlF6U50hAYxelh59K92nsw2bPF4HA+RYNEJf7iEABNMN14YCD07+eSl pnbk0Q414h3NfBsVr6HEU2zwhV6u4MkJD4UHYxEZxTWkhTpUrwLkdXhFjMwfIrAmOFQ/lF lMmSTOqh+LYdmXRAZgbkT8O1CejqeMlmi5PVvymoIVWvaqi6Dxle0PL7NAwa7hZ/JxtlQQ tU8JBnBrX5qDRnVNgsr+010CFUnNX42rb1uTJ/iS4IgwcxaY3WPO1Xv9CTL38Q== 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=1784927242; 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=j/sIpipXeJJfYTLJ69sDupQoswtgqKTIfOtj0iraywE=; b=EFZq0SRzJncboMsID2q3XdOcha/ORoRfjZ6kHcgCKEz6KLAY+aHiDj1Q8/N4POYOp8yyE7 U1+DF9oRBkHiqLqXPqsjblFaCYKRavC6SHlp+gEgZI+/dXWEsKX6qEwet6th6ObUBsie+W a8xkeRlTOWcY44UnHECQZdtMciIukhDCYeGSw1QNBVwfJ+/FrOz5S5ZOQ1I7+/NYpf6mLb 1CpijCBzVw+sq6Kkht9h5gA1ZRaBEfKfdYkWGwKT0cWJuykMHSudChPQC1zpwo3KwL0YX0 rYuzcXkkDpPkkypM3VahNq41p/DnPyVY3fXsZz4nwtCnGtpId811s4UFZ1qAEw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6LCt21JMz17Rm for ; Fri, 24 Jul 2026 21:07:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 381b9 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 21:07:22 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 76ca489e0f14 - main - netinet6/nd6: Sprinkle missing prefix refcounting List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 76ca489e0f147e9bd90408ea562087e84ed6f479 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 21:07:22 +0000 Message-Id: <6a63d40a.381b9.235dfcc5@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=76ca489e0f147e9bd90408ea562087e84ed6f479 commit 76ca489e0f147e9bd90408ea562087e84ed6f479 Author: Mark Johnston AuthorDate: 2026-07-24 20:05:06 +0000 Commit: Mark Johnston CommitDate: 2026-07-24 20:05:06 +0000 netinet6/nd6: Sprinkle missing prefix refcounting When we drop the prefix lock to call nd6_prefix_offlink() or nd6_prefix_onlink(), make sure to keep the correpsonding prefix structure alive. It is possible for a concurrent nd6_timer() to expire the prefix while the lock is dropped. Reported by: Maik Muench of Secfault Security Reviewed by: pouria, zlei MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58423 --- sys/netinet6/nd6_rtr.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sys/netinet6/nd6_rtr.c b/sys/netinet6/nd6_rtr.c index 167f3704f02d..041fd25865ab 100644 --- a/sys/netinet6/nd6_rtr.c +++ b/sys/netinet6/nd6_rtr.c @@ -1940,6 +1940,7 @@ restart: flags = pr->ndpr_stateflags & (NDPRF_DETACHED | NDPRF_ONLINK); if (flags == 0 || flags == (NDPRF_DETACHED | NDPRF_ONLINK)) { genid = V_nd6_list_genid; + nd6_prefix_ref(pr); ND6_RUNLOCK(); if ((flags & NDPRF_ONLINK) != 0 && (e = nd6_prefix_offlink(pr)) != 0) { @@ -1958,6 +1959,7 @@ restart: &pr->ndpr_prefix.sin6_addr), pr->ndpr_plen, e)); } + nd6_prefix_rele(pr); ND6_RLOCK(); if (genid != V_nd6_list_genid) goto restart; @@ -2220,6 +2222,7 @@ restart: int e; genid = V_nd6_list_genid; + nd6_prefix_ref(opr); ND6_RUNLOCK(); if ((e = nd6_prefix_onlink(opr)) != 0) { nd6log((LOG_ERR, @@ -2231,6 +2234,7 @@ restart: if_name(opr->ndpr_ifp), e)); } else a_failure = 0; + nd6_prefix_rele(opr); ND6_RLOCK(); if (genid != V_nd6_list_genid) goto restart; From nobody Fri Jul 24 21:07:23 2026 X-Original-To: dev-commits-src-main@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 4h6LCv4tFZz6mkfc for ; Fri, 24 Jul 2026 21:07:23 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6LCv3xjRz3cTT for ; Fri, 24 Jul 2026 21:07:23 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784927243; 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=cu5o7aCNufkV24fe4Vsj2aqiASg9JgP9U3ytpN4FFCU=; b=SDS8KdZklfZ4LMq81hMfzBR1x1dMDzTpKuuVcNeNOt6Xtk1ccg3ZXy6c9FXLhf6iOaI4YE splzECQEPB9ERe3qbP9WILEI6uC+D/fKIirqnXB5dlsDRU9ApV7k9/l7JP9pQR00lo4BbD bfJWugdS4Kh/SpqMa6cJb77xST8FCxiJbU8zuOfZDkTG6Wj4o0dFdVgo4FKR/lQ9Nhaeuf CIBwtTZNDoFefrAQ6mwu0ZvGo9jiFdVSVpCDmAySb+VvsaX7NJrmsNlekI7KA7Hqydk7fZ 55UzIwYGki5M5Vna4SPnujsiPBw7rGbDOjS+dE/m7zkJgDJcx/2xT1O6eQGu2A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784927243; a=rsa-sha256; cv=none; b=eyuVhV252SD/hdhLecUR1LvFCbXOFs6GON7bMsivUtLez8WE1HQj5F+R25OK6xBnTaz1jW Mvf1U40oNuPuxYYANY5g6y9x5CRUJgGdXKJckfie+fHBWA/RiGTXLOkBru0FvKXb+GuVdY 0ev0TBufeKgO99CzsEo4r60QOWbSqWiPmcWfoqxncqCGPARw7FHcxo4jSqKLVoSnn4K7G7 xhAuFlegoBwAQ8PQoUO7sJkYC3pyA3E1av3WxdTZRDa2lJiudkejP7TDs4rwCXokhD/F7E qeW9PLhmSiqDqjHyEw6nmLwStRP6HVT6LY10zr4b3kTYpa+V6rfnNb9I2Dqs6g== 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=1784927243; 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=cu5o7aCNufkV24fe4Vsj2aqiASg9JgP9U3ytpN4FFCU=; b=IH/uUdx6sZkgfgdojZ368e+T03C6NKokysGIwCUPftvbghiiOIz/GkKEUPiJcctvMuH2eG OkrLz1AYJFaIeNIPuN3tjdCB2VrRhmEe/ny6OHWkDiAZmTO+VbEWrAIAGGZpTxIBdqCbst lzByseozGhtsVwS2dmaA9TX/o6pK6vUo+r0EQkP+cZJonb/fyahsUEZCJSBLlFu51FjHqB KxbWoz9m4Rs0mvwaBc1st0f46WuSV0NGEuk1BAoEm9GcyAMVQ+AsG8R0eXpu5kjDeiGcwE qgdi89OnzC+jZss3dvkpm1JiYfuBPBsIoFzgHwbGZGTtvM9tbGPEwRbX1v8h3w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6LCv2qhJz179r for ; Fri, 24 Jul 2026 21:07:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 38396 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 21:07:23 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 91e11c8f2b38 - main - procdesc: Disallow pddupfd() of non-passable files List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 91e11c8f2b38eb1d1f3a1d57b27378fb2c6ab3c1 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 21:07:23 +0000 Message-Id: <6a63d40b.38396.1656d619@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=91e11c8f2b38eb1d1f3a1d57b27378fb2c6ab3c1 commit 91e11c8f2b38eb1d1f3a1d57b27378fb2c6ab3c1 Author: Mark Johnston AuthorDate: 2026-07-24 20:05:26 +0000 Commit: Mark Johnston CommitDate: 2026-07-24 20:05:26 +0000 procdesc: Disallow pddupfd() of non-passable files Reported by: Maik Muench of Secfault Security Reviewed by: kib Fixes: 1ad21a652182 ("kern: add pddupfd(2)") Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58403 --- lib/libsys/pdfork.2 | 6 ++++++ sys/kern/sys_procdesc.c | 10 +++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/libsys/pdfork.2 b/lib/libsys/pdfork.2 index 584c87e17e38..1b99157203c1 100644 --- a/lib/libsys/pdfork.2 +++ b/lib/libsys/pdfork.2 @@ -195,6 +195,8 @@ flag set. The .Fa flags argument is reserved and must be zero. +Certain file descriptor types cannot be copied this way, namely +kqueues. .Pp The following system calls also have effects specific to process descriptors: .Pp @@ -350,6 +352,10 @@ The file descriptor is not a valid file descriptor in the specified process. .It Bq Er ENOENT The specified process does not have a file descriptor table. +.It Bq Er EOPNOTSUPP +.Fa remotefd +refers to a file that cannot be duplicated across a process boundary, +such as a kqueue. .El .Sh SEE ALSO .Xr close 2 , diff --git a/sys/kern/sys_procdesc.c b/sys/kern/sys_procdesc.c index 7fc63256bc05..b913c9109f18 100644 --- a/sys/kern/sys_procdesc.c +++ b/sys/kern/sys_procdesc.c @@ -796,9 +796,13 @@ kern_pddupfd(struct thread *td, int pdfd, int fd, int flags) PROC_UNLOCK(p); error = fget_remote(td, p, fd, &fcaps, &fd_flags, &fp); if (error == 0) { - error = finstall_refed(td, fp, &fdr, O_CLOEXEC | - ((fd_flags & FD_RESOLVE_BENEATH) != 0 ? - O_RESOLVE_BENEATH : 0), &fcaps); + if ((fp->f_ops->fo_flags & DFLAG_PASSABLE) == 0) { + error = EOPNOTSUPP; + } else { + error = finstall_refed(td, fp, &fdr, O_CLOEXEC | + ((fd_flags & FD_RESOLVE_BENEATH) != 0 ? + O_RESOLVE_BENEATH : 0), &fcaps); + } if (error != 0) { fdrop(fp, td); filecaps_free(&fcaps); From nobody Fri Jul 24 21:07:24 2026 X-Original-To: dev-commits-src-main@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 4h6LCx0NPDz6mkfd for ; Fri, 24 Jul 2026 21:07:25 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6LCw4mKgz3cTh for ; Fri, 24 Jul 2026 21:07:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784927244; 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=vhqQVrrbTz7NbT2rPTMdgUY8TGKmyWmnW3sn+4WPKYk=; b=mVM8IIYto31j1DbAGUw8u0bXCrJRNz2m+t49o8BGywWDyp0mSrDMKBnB1b7xj30x5t6cCg YSV3xrcK5JQ4OWrPQOzA3hAZf7LuT79ATWknY2/9z/zL0ntJdZcTq9pvKOobY7fATTcGXt Qajn/IEDT6R/xuNK465vcjK/dpB0dnuobH2Z5FTVKu/BvhH2mWz0elN/8JNzE8BUiIHht/ YrT5dtUJ108yvZ4tsSBdFy2E6a8XhAV152DObvwWfO9E4XLpThfceHAxFeEqvlwTwtQEny xW2Ela1pqGDHZngoJyDkZNwy6E55Yk8MNt+moPvkqs0g7CHiQvk9CT4lfHGSrw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784927244; a=rsa-sha256; cv=none; b=f/Ise4wJHhkUrz/hYTpHb1LRc6Z/XVVoV1hpZqQ1mGbAP7YnJ9hcCeiw9P+ienfAua7P6V MykV428KDgSCMs7c/HDvhDp+YbmFYN27YmVr5/sbVjAEWupEiAO4jgaCbTZVFtv84ut+ah goXqqac9nrgpMMyWhWcuRW/STmhskml943YFtpKHPESGDFSK4TC+2IUGkOwt2XeilsOGIC rbpRSaja3XzvRgLMb0ndW0j0J8R1qG6L2C7qLyqjFgn0a1FOCEw09h9RLZLkHqLMP2DHd6 v3sAX/GAsvChmpx6FVzNHFKKzhycGuwwkh/Ia3jBRpdcpG5bvNkmxihZI+gcqw== 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=1784927244; 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=vhqQVrrbTz7NbT2rPTMdgUY8TGKmyWmnW3sn+4WPKYk=; b=qXoAoGT2mEtX6dSGtucelhh5pJ5rqaof9XtKNpvXT1fiYbPita2aLav728qEEEW5fCWHIL RVhXgdlPs714NWIPis5dR0CCKNznLFbCEJbyxZ4WbBaKPUzEOq28+ZzVGEwg4JWCSLXTh8 bvRi0NETzRQfGbTrMtEyeflSMMkJ/Ks+0Ska+3bUrOHKgooHZEfxd+R6xpk5UalIZ1xdUR OV3lG2tUw0yllObOiLeTr1oAjTbihqMZEOhX+o0EwWEzEOUt6AMYHuTfdrpYZJiu/WOxhi NKhUIP5GNftieFTZJgng/Wp4hI5om+/fFSjEigRjMqsMyXCrh7uabmFTlHBPuQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6LCw3gn5z17Rp for ; Fri, 24 Jul 2026 21:07:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 37454 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 21:07:24 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 586e2b3d89d6 - main - unix: Preserve FD_RESOLVE_BENEATH when passing an fd List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 586e2b3d89d6e70ab7e4a88497b5f36d78719423 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 21:07:24 +0000 Message-Id: <6a63d40c.37454.2052fd97@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=586e2b3d89d6e70ab7e4a88497b5f36d78719423 commit 586e2b3d89d6e70ab7e4a88497b5f36d78719423 Author: Mark Johnston AuthorDate: 2026-07-24 20:06:05 +0000 Commit: Mark Johnston CommitDate: 2026-07-24 20:06:05 +0000 unix: Preserve FD_RESOLVE_BENEATH when passing an fd The FD_RESOLVE_BENEATH flag is supposed to be sticky. It's set when you receive an fd from a different jail and preserved by openat() etc.. However, if you send the fd to yourself, the flag is stripped since SCM_RIGHTS message don't preserve file descriptor flags. Fix this by preserving those flags and checking for UF_RESOLVE_BENEATH in restrict_rights(). Fixes: 350ba9672a7f ("unix: Set O_RESOLVE_BENEATH on fds transferred between jails") Reviewed by: kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58317 --- sys/kern/uipc_usrreq.c | 27 +++++++++++++++++++-------- tests/sys/kern/unix_passfd_test.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/sys/kern/uipc_usrreq.c b/sys/kern/uipc_usrreq.c index 0b4e49c7db55..a2069ca18c59 100644 --- a/sys/kern/uipc_usrreq.c +++ b/sys/kern/uipc_usrreq.c @@ -3504,15 +3504,25 @@ unp_freerights(struct filedescent **fdep, int fdcount) free(fdep[0], M_FILECAPS); } -static bool -restrict_rights(struct file *fp, struct thread *td) +/* + * Flags to set on the receiving side when externalizing a file descriptor. + * When transferring fds between jails, ensure that the receiver cannot use + * a dirfd to escape the jail chroot. + */ +static int +externalize_fdflags(struct filedescent *fde, struct thread *td) { struct prison *prison1, *prison2; - prison1 = fp->f_cred->cr_prison; + if ((fde->fde_flags & UF_RESOLVE_BENEATH) != 0) + return (O_RESOLVE_BENEATH); + prison1 = fde->fde_file->f_cred->cr_prison; prison2 = td->td_ucred->cr_prison; - return (prison1 != prison2 && prison1->pr_root != prison2->pr_root && - prison2 != &prison0); + if (prison1 != prison2 && prison1->pr_root != prison2->pr_root && + prison2 != &prison0) + return (O_RESOLVE_BENEATH); + else + return (0); } static int @@ -3589,9 +3599,9 @@ unp_externalize(const struct socket *so, struct mbuf *control, struct file *fp; fp = fdep[i]->fde_file; - _finstall(fdesc, fp, *fdp, fdflags | - (restrict_rights(fp, td) ? - O_RESOLVE_BENEATH : 0), &fdep[i]->fde_caps); + _finstall(fdesc, fp, *fdp, + fdflags | externalize_fdflags(fdep[i], td), + &fdep[i]->fde_caps); unp_externalize_fp(fp); } @@ -3829,6 +3839,7 @@ unp_internalize(struct mbuf *control, struct mchain *mc, struct thread *td, fdep[i]->fde_file = fde->fde_file; filecaps_copy(&fde->fde_caps, &fdep[i]->fde_caps, true); + fdep[i]->fde_flags = fde->fde_flags; unp_internalize_fp(fdep[i]->fde_file); } FILEDESC_SUNLOCK(fdesc); diff --git a/tests/sys/kern/unix_passfd_test.c b/tests/sys/kern/unix_passfd_test.c index c600b0937b0d..665fce767eb2 100644 --- a/tests/sys/kern/unix_passfd_test.c +++ b/tests/sys/kern/unix_passfd_test.c @@ -1344,6 +1344,36 @@ ATF_TC_CLEANUP(cross_jail_dirfd, tc) err(1, "jail_remove"); } +/* + * Verify that FD_RESOLVE_BENEATH is preserved when an fd is passed over a UNIX + * domain socket. + */ +ATF_TC_WITHOUT_HEAD(resolve_beneath_preserved); +ATF_TC_BODY(resolve_beneath_preserved, tc) +{ + int fd[2], getfd, putfd, fdflags; + + domainsocketpair(fd); + tempfile(&putfd); + + fdflags = fcntl(putfd, F_GETFD); + ATF_REQUIRE(fdflags != -1); + ATF_REQUIRE(fcntl(putfd, F_SETFD, fdflags | FD_RESOLVE_BENEATH) != -1); + ATF_REQUIRE((fcntl(putfd, F_GETFD) & FD_RESOLVE_BENEATH) != 0); + + sendfd(fd[0], putfd); + recvfd(fd[1], &getfd, 0); + + fdflags = fcntl(getfd, F_GETFD); + ATF_REQUIRE(fdflags != -1); + ATF_REQUIRE_MSG((fdflags & FD_RESOLVE_BENEATH) != 0, + "FD_RESOLVE_BENEATH was not preserved across SCM_RIGHTS transfer"); + + ATF_REQUIRE(close(putfd) == 0); + ATF_REQUIRE(close(getfd) == 0); + closesocketpair(fd); +} + ATF_TC_WITHOUT_HEAD(listening_socket); ATF_TC_BODY(listening_socket, tc) { @@ -1397,6 +1427,7 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, empty_rights_message); ATF_TP_ADD_TC(tp, control_creates_records); ATF_TP_ADD_TC(tp, cross_jail_dirfd); + ATF_TP_ADD_TC(tp, resolve_beneath_preserved); ATF_TP_ADD_TC(tp, listening_socket); return (atf_no_error()); From nobody Fri Jul 24 21:07:25 2026 X-Original-To: dev-commits-src-main@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 4h6LCy0sv1z6mkp4 for ; Fri, 24 Jul 2026 21:07:26 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6LCx5DwTz3cM9 for ; Fri, 24 Jul 2026 21:07:25 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784927245; 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=IrLR2RJGZPkM/Y/x7QTFKNTnREvwFhrBpK4JpnoDNZo=; b=XFYttNF+kUcV7z4ieZCDpnw5TpdJTABr0+dfFL/Whg9kQeu4BVxGzGhYL1Q9tJ2wG7ra+8 YH+GkYip1yN7n8aK3G+FMPe3+Zhm8tcguwtGgGcy1720upfiETCN15kn3iySBBY5nqGGBH 7J85C6OCEqZMLIU4ZOZTEIe1jNY2tKdSlIXYG6HA0qCwk9V6VPS9105eAiOxpMuFa9TbhZ LWrBPUS5Lb5/muQBuX6QG8wK5di58ep21j6iuh41yH69SIJP5nKZvOULYOF2RK0JEE1TI1 BZaeB8PZ3qo0eb1AFf0LATwIO3ma3yjW+tWGSRxCWz3pFy34JEmr/ZciP1vyqA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784927245; a=rsa-sha256; cv=none; b=AefCKabJixtqLMGZGxN/NVm762OADPUtVE81Gok118xqfqhuAcOJcCSNR8+LPPpyoQnSAd K2zMsIFcvbxB0KG2IjCYfodsrp6hzoeZ/pNfMbS8Ro6/Rfhi5ru0RlLDRbc1p6xVe/kQGq i6kcwmA3NSQgSJF6eWKgMIqbDoUGeCGwn6jJ4f918dE3kHB1snx9wuLTJb4XhWYdy05Isu s312xcdNnO67fBptQ5NhGr/NCbneRlfjLNbFBYjChoPnlMoLMdAx9nFC66NGZkUBa1vYOx 63PNDVTDKP3tS0+7bZ5trDLPR/qldDjoIlBcIyzw0qnjA86etuRKZLPkOEes0A== 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=1784927245; 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=IrLR2RJGZPkM/Y/x7QTFKNTnREvwFhrBpK4JpnoDNZo=; b=NiDhovTXMX88Nb9bZFvqfySo84fED2R9k5GzsQmYV48A6Aaxkax3e8FvdF4ZhCiO4Hu8Sl qdWKF14pqNv1UVUELrloL5JsGo4WXtibQ3qjbsB9vpQuIWUYOK+Agl4U5rf06nKMAdSzZs pTfFHAD4lcbVxUXjvRad0LkbedaJlP4VltVuAtAU9QAD/kMjYMkdKGzWVxuktj52ZKjsAx Ob2IZ4kSTIkqgBuWhZq7pgj/Gq8vn/gwBY/I4qbGjAvprmToX5A5aYgwM+8BSI55oklB9J lzMF9np9iy2ao5RAfIi2ek30cxixKWDFArG8flJ0tQGVUFaX3TUehY4cXoPJiw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6LCx4Hqnz179s for ; Fri, 24 Jul 2026 21:07:25 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 37acf by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 21:07:25 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 9a7bd3309bec - main - procdesc: Remove dead code List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 9a7bd3309bec08802e8c18c03669812ec3352534 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 21:07:25 +0000 Message-Id: <6a63d40d.37acf.2767056d@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=9a7bd3309bec08802e8c18c03669812ec3352534 commit 9a7bd3309bec08802e8c18c03669812ec3352534 Author: Mark Johnston AuthorDate: 2026-07-24 20:06:16 +0000 Commit: Mark Johnston CommitDate: 2026-07-24 20:06:16 +0000 procdesc: Remove dead code As far as I can see, it is impossible for procdesc_exit() to observe pd->pd_fpcount == 0: if procdesc_close() decrements that counter to zero, then it will clean up the procdesc structure too, and this is atomic with respect to the proctree lock. No functional change intended. Reviewed by: kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58396 --- sys/kern/kern_exit.c | 3 ++- sys/kern/sys_procdesc.c | 22 ++++------------------ sys/sys/procdesc.h | 2 +- 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c index b989cbff7720..43d0c2da38c1 100644 --- a/sys/kern/kern_exit.c +++ b/sys/kern/kern_exit.c @@ -680,7 +680,8 @@ exit1(struct thread *td, int rval, int signo) * exit(). */ signal_parent = 0; - if (p->p_procdesc == NULL || procdesc_exit(p)) { + procdesc_exit(p); + if (p->p_procdesc == NULL) { /* * Notify parent that we're gone. If parent has the * PS_NOCLDWAIT flag set, or if the handler is set to SIG_IGN, diff --git a/sys/kern/sys_procdesc.c b/sys/kern/sys_procdesc.c index b913c9109f18..862b59262d0c 100644 --- a/sys/kern/sys_procdesc.c +++ b/sys/kern/sys_procdesc.c @@ -278,45 +278,31 @@ procdesc_free(struct procdesc *pd) * We use the proctree_lock to ensure that process exit either happens * strictly before or strictly after a concurrent call to procdesc_close(). */ -bool +void procdesc_exit(struct proc *p) { struct procdesc *pd; sx_assert(&proctree_lock, SA_XLOCKED); PROC_LOCK_ASSERT(p, MA_OWNED); - KASSERT(p->p_procdesc != NULL, ("procdesc_exit: p_procdesc NULL")); MPASS((p->p_flag & P_WEXIT) != 0); pd = p->p_procdesc; + if (pd == NULL) + return; PROCDESC_LOCK(pd); - KASSERT(pd->pd_fpcount > 0 || p->p_pptr == p->p_reaper, - ("procdesc_exit: closed && parent not reaper")); + KASSERT(pd->pd_fpcount > 0, ("%s: closed procdesc %p", __func__, pd)); pd->pd_flags |= PDF_EXITED; pd->pd_xstat = KW_EXITCODE(p->p_xexit, p->p_xsig); - /* - * If the process descriptor has been closed, then we have nothing - * to do; return 1 so that init will get SIGCHLD and do the reaping. - * Clean up the procdesc now rather than letting it happen during - * that reap. - */ - if (pd->pd_fpcount == 0) { - PROCDESC_UNLOCK(pd); - pd->pd_proc = NULL; - p->p_procdesc = NULL; - procdesc_free(pd); - return (true); - } selwakeup(&pd->pd_selinfo); KNOTE_LOCKED(&pd->pd_selinfo.si_note, NOTE_EXIT | NOTE_PDSIGCHLD); PROCDESC_UNLOCK(pd); /* Wakeup all waiters for this procdesc' process exit. */ wakeup(&p->p_procdesc); - return (false); } void diff --git a/sys/sys/procdesc.h b/sys/sys/procdesc.h index ac23dbdcb53b..bb486d9026ba 100644 --- a/sys/sys/procdesc.h +++ b/sys/sys/procdesc.h @@ -102,7 +102,7 @@ struct procdesc { /* * In-kernel interfaces to process descriptors. */ -bool procdesc_exit(struct proc *); +void procdesc_exit(struct proc *); void procdesc_fork(struct proc *p, pid_t child_pid); void procdesc_jobstate(struct proc *p); int kern_pdgetpid(struct thread *, int fd, const cap_rights_t *, From nobody Fri Jul 24 21:07:21 2026 X-Original-To: dev-commits-src-main@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 4h6LCy3k8Nz6mkP5 for ; Fri, 24 Jul 2026 21:07:26 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6LCs36BQz3cZ4 for ; Fri, 24 Jul 2026 21:07:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784927241; 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=FeEjAcziyxOLDgLMntPEI4jR1LwnJoETnSEdX8F+VbE=; b=EtlhuCzVKtX8jZ+Ifx9mqsZTyTc+6pM2v0yJEfPPCVIYbUtS22Azb9b19HFWGIWYyyPVMQ 6v9Ixgo740M40kUTMBfr0vTQXJ3Cqjhjo+gMqsgAgmMaGWF3VJ41/in9h41eN/6li0z1q3 bdDqzxh2i/VYl/NXXoi9pt8zI2d0iNcWE2RsgsX2jD1uk/Hpmb5kMsMVMs+HqXp1f6iv3m 1NvYc7ey8HEaYYh+XH69FGWteiB/btHzHDMRJ/toqN7UO2A5BMDd+z56n06Pr8a5TnvsOU Jx1bo6hPyE4mnHKf8AXeUToNy/h/tCkTdR2vYZq8VqzwKOl1xrYWnGhYQPkAeA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784927241; a=rsa-sha256; cv=none; b=NGgCOu0HbxrW6oCPPOKd+5JN5+RPiO6P8M7xBlB8fJFiDiIEluTzaTpc9/eFdarUNz+tVO gQijN8oV5CLtX0f/32XtiIF8gQcuOQKbt8s7D9VhkTBdRcpz1XRJFp6R5kv37exGb2gYcA gTprlP7mtBps/FORn6a+JEk0yf0XoZX6A/OiNiQpUkuAXRoeZn0TRuiX94UWj1oFhkDUjn GdTqqpp39teV5mcvyZegqLV3JOiJUHNjHle+DWgCf/PpmhTUqPAipgX+wP5NbBm+pMI4b/ kqlddHKGok593qjJ05MUF7EhkZPhqjUmeRexIqyJ6aLPQLYt1/zQt5cQmRWHLw== 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=1784927241; 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=FeEjAcziyxOLDgLMntPEI4jR1LwnJoETnSEdX8F+VbE=; b=MlVdoqxCtctjiJzKOk2FwD4xzIy2rmC04XI85zlTRaPY91+ehBNbMDrHvzbIwVt0mEEc43 gOVOV48oVYen5+1KeDi5R6fU5IvDUzRQ0LeaHr0Q15hublWd3W/S9+zHR3cneMM8rMAc6J WLPOwBbZlnZlulr9wsb9P5E9TBIQp71bOuVygnl1XR/wrzpFb18lXZInCi5iL9avN3N6v4 cBqFPX327a9nxKCpw0AIPEYd/dlfegLPQTFTArwTbxK34Qk8Ty8G5ohbVoA97Gnaswyvkc X23F7I5pBtBeBZ/g2dhEi0AsHuh/Ers9/GLFUbEc1okrBDS/b0UWyxqunZX7SQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6LCs1bdZz17Rk for ; Fri, 24 Jul 2026 21:07:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 375a0 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 21:07:21 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: c7917e72fe80 - main - kthread: Fix a thread leak List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: c7917e72fe80e2e168b3812718b5fcd497c0e3b8 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 21:07:21 +0000 Message-Id: <6a63d409.375a0.47006484@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=c7917e72fe80e2e168b3812718b5fcd497c0e3b8 commit c7917e72fe80e2e168b3812718b5fcd497c0e3b8 Author: Mark Johnston AuthorDate: 2026-07-24 20:04:45 +0000 Commit: Mark Johnston CommitDate: 2026-07-24 20:04:45 +0000 kthread: Fix a thread leak Fixes: 963629923308 ("kthread_add(): do not allow to attach the thread to a dead or dying process") Reviewed by: kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58433 --- sys/kern/kern_kthread.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/kern/kern_kthread.c b/sys/kern/kern_kthread.c index cfe2dab2e05c..6650ab868f78 100644 --- a/sys/kern/kern_kthread.c +++ b/sys/kern/kern_kthread.c @@ -281,6 +281,7 @@ kthread_add1(void (*func)(void *), void *arg, struct proc *p, PROC_LOCK(p); if (p->p_state == PRS_ZOMBIE || (p->p_flag2 & P2_WEXIT) != 0) { PROC_UNLOCK(p); + thread_free(newtd); return (ESRCH); } oldtd = FIRST_THREAD_IN_PROC(p); From nobody Fri Jul 24 21:07:26 2026 X-Original-To: dev-commits-src-main@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 4h6LCz0vQmz6mklY for ; Fri, 24 Jul 2026 21:07:27 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6LCy6186z3cX4 for ; Fri, 24 Jul 2026 21:07:26 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784927246; 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=eoKgsEzrXS+3JRZ6Vjyz84wMsGo4Dt6eyz8mXJhbPAk=; b=pp4xyUlVSqhbLN2OL2itPDwvxkU+cRNq0lMPB5x2zxKVp2+7ozQIXXoedL3tjsjMhl+vD0 PMhPOjaUc+4hzYUZyQnVysf6C/UucBYBDqj5FUlsDhSeCaRrvQ+TMkhln/GftB4RMwZ0/l OHZVtF8MzqVtt1o7WWVslsV+vSqYl3PhcLQVgFK11MVnHrHB+Al7HbTW7PdbhR46sYaOCe nDKzcMBfOCQD618liXEzxwv91oWMeTdoOHKaBW/22s+VNhDIJw6Pt9THElBkfrsLUJOMpO tjtRL2r2Fy87Yfy1C1gHI/TOvvw/cJkPbtgcPKqeML0JzOWKClfmO62I/MV0gg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784927246; a=rsa-sha256; cv=none; b=h2ajFHbtIGQrg94vGF5DDeBVkIxE5/D38579JvkQO8ga+qH08f+d+cD0O8HUVXd7VzbnIK uEHPdEqNzqOkmk55wkMq2dcWjTdEfafCwtG77BgE7mPH99XV/2uOQUlEZLUKq6z0eqcGmJ QPiGzyNj2t7WQPTnvS2DGFstbkpztYSsuPDldwAg1CthkTVyF4VD++Y5T0AqjrVzIE3kZu ifjmPLh7S3I4bs8ubFIMUXkUS4a1sBoGDjmUyXGknnk0FywF2UlsLmM7aoBdV07wcL+SUu zCFXaekYUOtxhx1AzkuaGvKO37p793vdS/syCEH2FUCQCZbshxjgPQSEB8TUkA== 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=1784927246; 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=eoKgsEzrXS+3JRZ6Vjyz84wMsGo4Dt6eyz8mXJhbPAk=; b=PPHF512Kg39pcWM4nF9ytgMmIYBW5kDaVMX/kJyPF6ul5aks4IyC6gaYeHBfJuT+5jz8LU q7fq1ZyqrvHFzEKXR/eO0HZoW7sr7INPbt80y/IC9dennRflO8cL2VGPQ3tf720AWTHpwm uBiAxdAGKkN13PaP6Lc/1JZ/N8oXzl6AmbnC8smFTP454vPRZbXEBPysPiIgNFh0wl64lE wmQNW1n28HO1Bcwimq8lZpYJFTPsBsKIySD26I0TcqrdBNPyBFjDKcWOjWjb4rNgQTRJN4 ubvnKW1MdKZJzKz/5mR8aaxllWebKs9fBf9+bMUD1D07vtpPkLwwg/jStU48dg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6LCy55kkz16dn for ; Fri, 24 Jul 2026 21:07:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 370b6 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 21:07:26 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: bb933b1d1846 - main - kqueue: Allocate marker knotes on the stack List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: bb933b1d1846b3a984670b8cd65450c3333188f6 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 21:07:26 +0000 Message-Id: <6a63d40e.370b6.1ef24e0c@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=bb933b1d1846b3a984670b8cd65450c3333188f6 commit bb933b1d1846b3a984670b8cd65450c3333188f6 Author: Mark Johnston AuthorDate: 2026-07-24 20:06:40 +0000 Commit: Mark Johnston CommitDate: 2026-07-24 20:06:40 +0000 kqueue: Allocate marker knotes on the stack The scan marker was originally stack-allocated. In commit 1c0f9af5b5224, it became heap-allocated since the marker is visible to other threads and a scanning thread's stack may be swapped out. Now that kernel stacks can no longer be swapped out, we can avoid these heap allocations. Reviewed by: kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58402 --- sys/kern/kern_event.c | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c index e19415c8d443..f22d8ca7da11 100644 --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -2109,7 +2109,7 @@ kqueue_scan(struct kqueue *kq, int maxevents, struct kevent_copyops *k_ops, const struct timespec *tsp, struct kevent *keva, struct thread *td) { struct kevent *kevp; - struct knote *kn, *marker; + struct knote *kn, marker; struct knlist *knl; sbintime_t asbt, rsbt; int count, error, haskqglobal, influx, nkev, touch; @@ -2148,8 +2148,8 @@ kqueue_scan(struct kqueue *kq, int maxevents, struct kevent_copyops *k_ops, asbt = -1; } else asbt = 0; - marker = knote_alloc(M_WAITOK); - marker->kn_status = KN_MARKER; + memset(&marker, 0, sizeof(marker)); + marker.kn_status = KN_MARKER; KQ_LOCK(kq); retry: @@ -2172,13 +2172,13 @@ retry: goto done; } - TAILQ_INSERT_TAIL(&kq->kq_head, marker, kn_tqe); + TAILQ_INSERT_TAIL(&kq->kq_head, &marker, kn_tqe); influx = 0; while (count) { KQ_OWNED(kq); kn = TAILQ_FIRST(&kq->kq_head); - if ((kn->kn_status == KN_MARKER && kn != marker) || + if ((kn->kn_status == KN_MARKER && kn != &marker) || kn_in_flux(kn)) { if (influx) { influx = 0; @@ -2196,7 +2196,7 @@ retry: kq->kq_count--; continue; } - if (kn == marker) { + if (kn == &marker) { KQ_FLUX_WAKEUP(kq); if (count == maxevents) goto retry; @@ -2294,11 +2294,10 @@ retry: break; } } - TAILQ_REMOVE(&kq->kq_head, marker, kn_tqe); + TAILQ_REMOVE(&kq->kq_head, &marker, kn_tqe); done: KQ_OWNED(kq); KQ_UNLOCK_FLUX(kq); - knote_free(marker); done_nl: KQ_NOTOWNED(kq); if (nkev != 0) @@ -3148,7 +3147,7 @@ kqueue_fork_copy(struct filedesc *fdp, struct file *fp, struct file *fp1, struct proc *p1, struct thread *td) { struct kqueue *kq, *kq1; - struct knote *marker; + struct knote marker; int error, i; error = 0; @@ -3157,26 +3156,24 @@ kqueue_fork_copy(struct filedesc *fdp, struct file *fp, struct file *fp1, kq1 = fp1->f_data; kq = kq1->kq_forksrc; - marker = knote_alloc(M_WAITOK); - marker->kn_status = KN_MARKER; - marker->kn_kq = kq; + memset(&marker, 0, sizeof(marker)); + marker.kn_status = KN_MARKER; + marker.kn_kq = kq; KQ_LOCK(kq); for (i = 0; i < kq->kq_knlistsize; i++) { - kqueue_fork_copy_list(&kq->kq_knlist[i], marker, kq, kq1, + kqueue_fork_copy_list(&kq->kq_knlist[i], &marker, kq, kq1, p1, fdp); } if (kq->kq_knhashmask != 0) { for (i = 0; i <= kq->kq_knhashmask; i++) { - kqueue_fork_copy_list(&kq->kq_knhash[i], marker, kq, + kqueue_fork_copy_list(&kq->kq_knhash[i], &marker, kq, kq1, p1, fdp); } } kqueue_release(kq, 1); kq1->kq_forksrc = NULL; KQ_UNLOCK_FLUX(kq); - - knote_free(marker); return (error); } From nobody Fri Jul 24 21:11:22 2026 X-Original-To: dev-commits-src-main@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 4h6LJV5Jvzz6mkhP for ; Fri, 24 Jul 2026 21:11:22 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6LJV4fHJz3fk3 for ; Fri, 24 Jul 2026 21:11:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784927482; 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=TrbKmNmrw6b02Nan9GJM0DMoid1seyptFfFxkJTCDm0=; b=aU4WBXC0RcSsFz7jOGBRpKrF+6xzzoxdBCBh2/q0jpao1xKVu25IzuEUQebCxyp4mVR47K LTUokch+LFNHRa+Aw76xYCmEFwlzyMrz3L5jnSKwDqNS9hVM7/kkgGRzPfCEOz6vjgyqFz gylhcYf6Y2mb801n8ytrFTQn+4h3el8A4MG3pp/x9yUXu2HKb15CZufZl+s61ABjbEr1Jl EWaJr1tsStNRcC3jtOHxqEDnEeoOhlMo7XmkMyqzyXGGT3eMmwSyvuih9hdW/f2nIkRQWS 4scBTh3+nzc8kkpspFZy319rzl5nUcx3JyzlCVtJxja243aqIRG6Gh5a38Ik8g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784927482; a=rsa-sha256; cv=none; b=FeTrW2yE62DlCLB92RQ1GEVDfR79QbJQNaH9nGqQ3dn4ysmz65gldiKcNyzlX0CwvzFZUx BfJd08DqBqpzn73RPuTDOzEP/QH3WPoMj7i8FF3mNzYiO2Zv5qLjgQWoYiSXhXw96Q7UA4 7Wmpr3FJU4dMaXvWX8SkNc0DglLvy/g7Jj0iR52Wtf1JUXrP2KA5SAu51ivvYw3jaGHVQL oHMTCEHXPMxLNKFZWlw+N5Liv/l/eoKbwqhjWkZp1Ssy5xq8QwzRfLG8ZKg7+zvNnOa2sh POMDpDXOwzSK/xfQYiSzaFOWodN5gDjiZR+1B0uit4B267Qj+NBDDbcaUmzUuw== 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=1784927482; 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=TrbKmNmrw6b02Nan9GJM0DMoid1seyptFfFxkJTCDm0=; b=QI2Uzk37SPgblfyUtmQCnOiAs8L8axhpVeevczZunQWjHB14tStwJuT4ZA/FPoOvz2aVp1 HonkljnXVbnGQImq5xwsz8rUkAi+obzWTOZTOcXK6K03QmO84Gn0qNEUJRzCQvFJYckBOd bDM1kX9AB2phhynqc41xKbIluiyPZzqzJHM08xfW0ECfWFZ9ENJkgYFb1rL+snheVP96q6 ARgJ/HN5Md4Vh6lpiLABUTfuZ/r3lr7JiL+79RBIZhJ2VJV5GtxljzzRoAk4X+8OfKG55K qCJ8U4jT70EbDyW3VuwAMC3QbJGfeRaDQ/qxwxyEdrH7GPshgahd6ugJSnmfaA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6LJV3h4Dz17Cf for ; Fri, 24 Jul 2026 21:11:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 37dbf by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 21:11:22 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 4c1c2b9dab02 - main - git-mfc: Slightly relax the regex used to search for reverts List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 4c1c2b9dab020624a1400644f98af7af4b7af68d Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 21:11:22 +0000 Message-Id: <6a63d4fa.37dbf.3e811c8f@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=4c1c2b9dab020624a1400644f98af7af4b7af68d commit 4c1c2b9dab020624a1400644f98af7af4b7af68d Author: Mark Johnston AuthorDate: 2026-07-24 21:09:42 +0000 Commit: Mark Johnston CommitDate: 2026-07-24 21:09:42 +0000 git-mfc: Slightly relax the regex used to search for reverts Prompted by commit 9dfaf1cb37f8ac89cf in FreeBSD src. Reported by: des --- tools/tools/git/git-mfc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/tools/git/git-mfc b/tools/tools/git/git-mfc index c5a39e3ba5a4..45a16a3bd5e4 100755 --- a/tools/tools/git/git-mfc +++ b/tools/tools/git/git-mfc @@ -154,7 +154,7 @@ def reverts(commit): reverts, or None. """ for line in commit.message.splitlines(): - m = re.match(r'^This reverts commit ([0-9a-f]{40})\.', line) + m = re.match(r'^This reverts commit ([0-9a-f]{40})', line) if m: return m.group(1) return None From nobody Fri Jul 24 21:11:23 2026 X-Original-To: dev-commits-src-main@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 4h6LJX16hmz6mlBx for ; Fri, 24 Jul 2026 21:11:24 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6LJW63b6z3fgn for ; Fri, 24 Jul 2026 21:11:23 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784927483; 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=UCsC23FiC4zwRUQlrNhrHpC3nI+fx4myCiYIDlnZ0Uk=; b=EJJoUCw2UEo2nZdblQ3JH6aa4uFFQthMQS6TG3UJcgXmKbW1dktndXa5+Zz4iyDe5EoyTV n1xGjG2d5XXT3BrC82DR1Z0dE1YJLdb+bfuAJRkJHsu2w4VBXmtwNA6181YJPauCFu2WAZ yIMMXFf4xWvOw9T20sxqC74iRbl1z2m+cJQOnioUcI21PJzXOzL1uEUHmCAjqPSfRR8M5i AN0VsZPaQ1SL45OBolP6KX2L5+q9yTC68J7DHEUhYZbRs15nh4XmK4LIS5O5FUHZBlj2Iy jc6nh3pbqSmuHR6768rzmyEqf05KaM8e5dCUZw4F6RkEBMtHJOs8dWNvj5AHGQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784927483; a=rsa-sha256; cv=none; b=OiYi9PYuOAtM7uWeSXHFzZ0AH8KZPDTC0HdQHJ1CHds0TRaKqqCqkytWA3iY/v/fKBtxQb +UTj3iXJ7/Q/e18lY0wvUoADR7R7xmZ8ljEk4VXB9dMLLBTHaVjG1RaOv8N1SA8kmGUKu2 HUXC/tuf044Gdv8xEuboR+WhS/iViKl6XdwmlfO3nHCcnjoEtWlb2TVPSuZKO8B5j6Wgp7 BnjqkfXGEhFBkltYnZDbd1aadYJT/k0Ceuffjn69FEw6zU3mfgYQeakqwrZj38XcqakBwD OTpzydILxpEF8uXdwTw1My+bttmBFmk7T4YZ8j2wm4rns4HHYAeR+292zBrZkQ== 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=1784927483; 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=UCsC23FiC4zwRUQlrNhrHpC3nI+fx4myCiYIDlnZ0Uk=; b=oG1dTwXCRf5/xq55bXD+qTlakjr+ZuTzaujRYhOj6XBflKfxZ+mIsTKBDTsmCEs1Cka3hg KS6ezvRJV2X3C7qj3jW3CL3CS6rV3PUiiKmtfUuRNGWT2a10BDm1OOo2PixZA/JXl/DWsU oLNHBlCWFBJ9dh/A4W1nmWJ0+NG/odI+eCT9rGZ1tEGAmQo9f9OHfXlGBjo3oZh4/pvB5H 4om26xjz9AX0l+23M6gU+56DAdoe2a2Kf719CjulIhIsWepiFM7gsYuXvMDl1vhaP9kFy7 pkitxxyLkWAFoRWgIFuY/v2byFrz++V/Nu7EH+23C/BCbAZ/CmbzRqWFh55CAw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6LJW4VSgz17Cg for ; Fri, 24 Jul 2026 21:11:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 370de by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 21:11:23 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 7392dc9d2683 - main - git-mfc: Let the upstream for PRERELEASE branches be main List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 7392dc9d26830fe9d19e035d2e08f19dcca96591 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 21:11:23 +0000 Message-Id: <6a63d4fb.370de.23147404@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=7392dc9d26830fe9d19e035d2e08f19dcca96591 commit 7392dc9d26830fe9d19e035d2e08f19dcca96591 Author: Mark Johnston AuthorDate: 2026-07-24 21:09:48 +0000 Commit: Mark Johnston CommitDate: 2026-07-24 21:09:48 +0000 git-mfc: Let the upstream for PRERELEASE branches be main Such branches are in code slush but are the same as stable branches for the purpose of MFCs. --- tools/tools/git/git-mfc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/tools/git/git-mfc b/tools/tools/git/git-mfc index 45a16a3bd5e4..431ed2ebc861 100755 --- a/tools/tools/git/git-mfc +++ b/tools/tools/git/git-mfc @@ -59,7 +59,7 @@ def origin_branch(): err(1, f"could not determine BRANCH from {newvers}") if branch == "CURRENT": err(1, "this is a CURRENT tree, we do not MFC to CURRENT") - if branch == "STABLE": + if branch == "STABLE" or branch == "PRERELEASE": return "main" if re.match(r'^RELEASE(-p\d+)?$', branch): if revision is None: From nobody Fri Jul 24 21:11:24 2026 X-Original-To: dev-commits-src-main@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 4h6LJY0wLcz6mkhS for ; Fri, 24 Jul 2026 21:11:25 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6LJX65w5z3fbP for ; Fri, 24 Jul 2026 21:11:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784927484; 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=3zOOyXZmN/anzt4GPXRI4lE8x9bYhFsTt51/krR48UI=; b=kh75+lAwBf/W1ej67fcRsl4VUEELe9BO8r0P/JNa2llB8G5U8vVGvaJfXmZcrUzT4j8C2J OEL4YGZWJEIrYgVnZTPT6dHh2m4PU1GsX0LXZHG3tE3onRLe+2JgkAPvS9SGNKCpqay+Ni n19TvZBYhu/+aUYuUBkPDTNrnJ7JE8R16zXgaMO0SNFaF4KiBOdnu/YvKq/vZpZefHGMS4 b89zaGQf/mvXiL5YRFUeWHLLEWa8PiYzcQGkKJGpwPsWL83QkMIalFPMSsAFum3FSE/OeV SX7g+fSQci/l6lXl7K4voRmd8j/hlnX0/XJ27pRYkLcrhE+AUqWl3yEQLvx8Bg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784927484; a=rsa-sha256; cv=none; b=izNhn3SUsufeBYr8fbjnyXuv9AL154AcIEGqql9TVbXRcXZ2qpw+v973wu089E8kKF3OIo Rjgp6wJu9FkdZMFBvKD9DEd7wYANGkavHO5BHo1yd92FbsF6rjX28OlzIZ7DsG4jsBwhFX YnNVMjJ48a+gKYIKNB5JVklD0SahsX23owRtt+zN9jG/MAj+/7uXkrMK3c9QBH0Bd5tevk u/hFXnXod9h5/qrCPUMz6gp/JyF4c8WCKGS9t5UJM+vtAFxmRIa+8uVYr7qhIZTZRB1iOJ oos0q5hhqcVxCNdHwX3k+RRcc4MKz5vWoFnelwDDU+951IANJK1U0d2aQeqibg== 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=1784927484; 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=3zOOyXZmN/anzt4GPXRI4lE8x9bYhFsTt51/krR48UI=; b=xjHcgwzEg99cSLAcr5f8R9m8Ea9kSxQhGM3Bvqxkt6Jk9EGLR8ZqbW4yyX1/RxwjGLtTtS m6ZVjmhWXmLwk0/tziDNn6YY7hALGovOd4q4tjm1z8z+gET7TKkoIm2iFPWsZF1B6XjdyH hJCA3k/Xd8ilrlUslpGjBEN9h/8A7/brWFL+D4nK7FXZhIsXdtL9zGeDGPInCwW3pFhWsT T0/lhQTdL8KVLeEEKXYuSGtXDA1FVpvhNAMP3IRGBHR3Gmj14a84ljG0DO4zi9uR863MqU fiIApvcmcoolO7vDOVKSIqhZDX8Kz3tLb4Wn7UmkTZiCz+WzT7ebq8HKPVY/qg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6LJX4vTWz16x9 for ; Fri, 24 Jul 2026 21:11:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 38e45 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 21:11:24 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: b86e36493469 - main - git-mfc: Improve handling of remotes List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: b86e36493469ded108ad616ebc094886b33851c4 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 21:11:24 +0000 Message-Id: <6a63d4fc.38e45.3181dfca@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=b86e36493469ded108ad616ebc094886b33851c4 commit b86e36493469ded108ad616ebc094886b33851c4 Author: Mark Johnston AuthorDate: 2026-07-24 21:10:26 +0000 Commit: Mark Johnston CommitDate: 2026-07-24 21:10:26 +0000 git-mfc: Improve handling of remotes If we can't figure out which remote to use, print a useful error instead of assuming that "freebsd" is the right remote to use. --- tools/tools/git/git-mfc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/tools/git/git-mfc b/tools/tools/git/git-mfc index 431ed2ebc861..c6c4ea2b786a 100755 --- a/tools/tools/git/git-mfc +++ b/tools/tools/git/git-mfc @@ -501,11 +501,11 @@ def main(): if args.remote: remote = args.remote else: - try: - tracking = repo.active_branch.tracking_branch() - remote = tracking.remote_name if tracking else 'freebsd' - except (TypeError, ValueError): - remote = 'freebsd' + tracking = repo.active_branch.tracking_branch() + if tracking: + remote = tracking.remote_name + else: + err(1, "could not find upstream branch, use --remote") upstream = remote + '/' + origin From nobody Fri Jul 24 22:36:23 2026 X-Original-To: dev-commits-src-main@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 4h6NBb4yH1z6mrJs for ; Fri, 24 Jul 2026 22:36:23 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6NBb4G49z3rBj for ; Fri, 24 Jul 2026 22:36:23 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784932583; 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=5FBIp+R9v1hlV1wapj9auGje/bc8PQnScFRQoedyW2U=; b=pXbKq8EsYki3jMhC55UWQqSDmPT+UuN4KHPa/9G+TCdz7HwpJewrPG0hkkP0dNpZHGP2oC FWKdcnEjkwdbHayu8LOwch+EVAXORgZcm2IEfakRbCO2nAp1B48hsbjik2jYoDQtELUdSg ASgYepS6ARCPbKWi7+Q6igdKGwgnozWVwhkihAYyhiNAPYTxNNVJ/aw7rpMtE+ppchpNWg YEZID0GH/8Q/T/EaC98zsDSpOAFgxgdsD09TYEQWQVzgGgjFK+6NjUieaAE+ugHcOml3TZ MEAwiqh6GwNBK3QZOn+8c/umE+1U57b7DIvLuAnAVeSMqZKnJHSqOOXks3IE/A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784932583; a=rsa-sha256; cv=none; b=QXVGMRteYAnn9uw+QiDX5xmKX/7HE15BTi63fnTSV+oVz/HELpc+TiaKlIw5dY7gKpkLrC Vbk9uRL9e8w1x4Al3MhJwRZohYzpKw0tbcTP3OBfT6bZ8xigJX517liZFmH01XlxTpiH2X lEWF3L1KARQGKNE+4fDI+h1/E+5xGWh/KmWyqu93R0RyYZZz2pQZ26xTUXXzIxi6cjhm57 6UFgCw6Sj/tRmJGwNZHR6FjorGkl+/F0ases7hPFLFlmqoyxTdtJeZXGEkLOgp+SFzy5Ri a8SmBGeV8z74hccPS46Rxj8QWAL3mbcv0q7N/Lgz4dOL0TCUxPAdVlXZteLrYA== 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=1784932583; 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=5FBIp+R9v1hlV1wapj9auGje/bc8PQnScFRQoedyW2U=; b=eC3LHdLhBPN/IZS10xPv67xkP/ffluKKL6PIeR7RMpndfPmQcLQaoEx6H/wt2cYXjoSHbz j3MqSpAvqvCVkV4lHHxPGbDxAlGgchG/IAjO+s76NmiInofuWxpCoGea2GoVajhideiUIv fTIaP4RdoF1V3ixU7tJ8Bb3Y1F8CQ5jzns1QTOmLxKPmG+x4ncoHoH6pHOKbD2y/srPoer aPSIRjpiwdwUHWgl4G09InC4WngDMM2YUrDD1xKBMvcC2nt7e3KMCaaxhIuVtRgR3FPMnv wHzik5c6DjgfOFDksv54H80bqbrPi46vPbmZDMLoAVniBk58AsDtyHoxx1DGtg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6NBb2rWYz19TN for ; Fri, 24 Jul 2026 22:36:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 188ba by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 22:36:23 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 6337ca19a363 - main - uma: Factor out the implementations of uma_zfree_{arg,smr}() List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 6337ca19a3637aa72eddf4d62a2eaf7d8df51638 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 22:36:23 +0000 Message-Id: <6a63e8e7.188ba.5fd30e5@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=6337ca19a3637aa72eddf4d62a2eaf7d8df51638 commit 6337ca19a3637aa72eddf4d62a2eaf7d8df51638 Author: Mark Johnston AuthorDate: 2026-07-24 21:11:58 +0000 Commit: Mark Johnston CommitDate: 2026-07-24 21:11:58 +0000 uma: Factor out the implementations of uma_zfree_{arg,smr}() The two function both free an item to a UMA zone, but uma_zfree_arg() does so in such as way as to ensure that the item will be the first one returned by a subsequent allocation, while uma_zfree_smr() must defer reuse of the item and therefore never frees to the per-CPU alloc bucket. When KASAN is enabled, we actually want uma_zfree_arg() to behave like uma_zfree_smr(): to improve the reliability of use-after-free detection, reuse of the newly freed item should be deferred for some time. Refactor a bit to make it easier to improve KASAN along these lines: introduce two helper functions, cache_free_item() and cache_free_smr(), which handle most of the work of interacting with the per-CPU caches. A subsequent commit will let uma_zfree_arg() use cache_free_smr() when KASAN is enabled. No functional change intended. Reviewed by: rlibby MFC after: 1 month Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58268 --- sys/vm/uma_core.c | 159 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 91 insertions(+), 68 deletions(-) diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c index 410b4f5a5142..02b2df89f636 100644 --- a/sys/vm/uma_core.c +++ b/sys/vm/uma_core.c @@ -4447,37 +4447,82 @@ fail: return (NULL); } -/* See uma.h */ -void -uma_zfree_smr(uma_zone_t zone, void *item) +static __always_inline bool +cache_free_item(uma_zone_t zone, int uz_flags, void *item, void *udata) { uma_cache_t cache; - uma_cache_bucket_t bucket; int itemdomain; + + /* + * If possible, free to the per-CPU cache. There are two + * requirements for safe access to the per-CPU cache: (1) the thread + * accessing the cache must not be preempted or yield during access, + * and (2) the thread must not migrate CPUs without switching which + * cache it accesses. We rely on a critical section to prevent + * preemption and migration. We release the critical section in + * order to acquire the zone mutex if we are unable to free to the + * current cache; when we re-acquire the critical section, we must + * detect and handle migration if it has occurred. + */ + itemdomain = 0; #ifdef NUMA - int uz_flags; + if ((uz_flags & UMA_ZONE_FIRSTTOUCH) != 0) + itemdomain = item_domain(item); #endif - CTR3(KTR_UMA, "uma_zfree_smr zone %s(%p) item %p", - zone->uz_name, zone, item); + critical_enter(); + do { + uma_cache_bucket_t bucket; -#ifdef UMA_ZALLOC_DEBUG - KASSERT((zone->uz_flags & UMA_ZONE_SMR) != 0, - ("uma_zfree_smr: called with non-SMR zone.")); - KASSERT(item != NULL, ("uma_zfree_smr: Called with NULL pointer.")); - SMR_ASSERT_NOT_ENTERED(zone->uz_smr); - if (uma_zfree_debug(zone, item, NULL) == EJUSTRETURN) - return; + cache = &zone->uz_cpu[curcpu]; + /* + * Try to free into the allocbucket first to give LIFO + * ordering for cache-hot datastructures. Spill over + * into the freebucket if necessary. Alloc will swap + * them if one runs dry. + */ + bucket = &cache->uc_allocbucket; +#ifdef NUMA + if ((uz_flags & UMA_ZONE_FIRSTTOUCH) != 0 && + PCPU_GET(domain) != itemdomain) { + bucket = &cache->uc_crossbucket; + } else #endif - cache = &zone->uz_cpu[curcpu]; + if (bucket->ucb_cnt == bucket->ucb_entries && + cache->uc_freebucket.ucb_cnt < + cache->uc_freebucket.ucb_entries) + cache_bucket_swap(&cache->uc_freebucket, + &cache->uc_allocbucket); + if (__predict_true(bucket->ucb_cnt < bucket->ucb_entries)) { + cache_bucket_push(cache, bucket, item); + critical_exit(); + return (true); + } + } while (cache_free(zone, cache, udata, itemdomain)); + critical_exit(); + + return (false); +} + +static __always_inline bool +cache_free_smr(uma_zone_t zone, void *item, void *udata) +{ + uma_cache_t cache; + int itemdomain; +#ifdef NUMA + int uz_flags; +#endif + itemdomain = 0; #ifdef NUMA - uz_flags = cache_uz_flags(cache); + uz_flags = cache_uz_flags(&zone->uz_cpu[curcpu]); if ((uz_flags & UMA_ZONE_FIRSTTOUCH) != 0) itemdomain = item_domain(item); #endif critical_enter(); do { + uma_cache_bucket_t bucket; + cache = &zone->uz_cpu[curcpu]; /* SMR Zones must free to the free bucket. */ bucket = &cache->uc_freebucket; @@ -4490,11 +4535,33 @@ uma_zfree_smr(uma_zone_t zone, void *item) if (__predict_true(bucket->ucb_cnt < bucket->ucb_entries)) { cache_bucket_push(cache, bucket, item); critical_exit(); - return; + return (true); } - } while (cache_free(zone, cache, NULL, itemdomain)); + } while (cache_free(zone, cache, udata, itemdomain)); critical_exit(); + return (false); +} + +/* See uma.h */ +void +uma_zfree_smr(uma_zone_t zone, void *item) +{ + CTR3(KTR_UMA, "uma_zfree_smr zone %s(%p) item %p", + zone->uz_name, zone, item); + +#ifdef UMA_ZALLOC_DEBUG + KASSERT((zone->uz_flags & UMA_ZONE_SMR) != 0, + ("uma_zfree_smr: called with non-SMR zone.")); + KASSERT(item != NULL, ("uma_zfree_smr: Called with NULL pointer.")); + SMR_ASSERT_NOT_ENTERED(zone->uz_smr); + if (uma_zfree_debug(zone, item, NULL) == EJUSTRETURN) + return; +#endif + + if (cache_free_smr(zone, item, NULL)) + return; + /* * If nothing else caught this, we'll just do an internal free. */ @@ -4506,8 +4573,7 @@ void uma_zfree_arg(uma_zone_t zone, void *item, void *udata) { uma_cache_t cache; - uma_cache_bucket_t bucket; - int itemdomain, uz_flags; + int uz_flags; /* Enable entropy collection for RANDOM_ENABLE_UMA kernel option */ random_harvest_fast_uma(&zone, sizeof(zone), RANDOM_UMA); @@ -4540,55 +4606,12 @@ uma_zfree_arg(uma_zone_t zone, void *item, void *udata) * The race here is acceptable. If we miss it we'll just have to wait * a little longer for the limits to be reset. */ - if (__predict_false(uz_flags & UMA_ZFLAG_LIMIT)) { - if (atomic_load_32(&zone->uz_sleepers) > 0) - goto zfree_item; - } + if (__predict_false(uz_flags & UMA_ZFLAG_LIMIT) && + atomic_load_32(&zone->uz_sleepers) > 0) + goto zfree_item; - /* - * If possible, free to the per-CPU cache. There are two - * requirements for safe access to the per-CPU cache: (1) the thread - * accessing the cache must not be preempted or yield during access, - * and (2) the thread must not migrate CPUs without switching which - * cache it accesses. We rely on a critical section to prevent - * preemption and migration. We release the critical section in - * order to acquire the zone mutex if we are unable to free to the - * current cache; when we re-acquire the critical section, we must - * detect and handle migration if it has occurred. - */ - itemdomain = 0; -#ifdef NUMA - if ((uz_flags & UMA_ZONE_FIRSTTOUCH) != 0) - itemdomain = item_domain(item); -#endif - critical_enter(); - do { - cache = &zone->uz_cpu[curcpu]; - /* - * Try to free into the allocbucket first to give LIFO - * ordering for cache-hot datastructures. Spill over - * into the freebucket if necessary. Alloc will swap - * them if one runs dry. - */ - bucket = &cache->uc_allocbucket; -#ifdef NUMA - if ((uz_flags & UMA_ZONE_FIRSTTOUCH) != 0 && - PCPU_GET(domain) != itemdomain) { - bucket = &cache->uc_crossbucket; - } else -#endif - if (bucket->ucb_cnt == bucket->ucb_entries && - cache->uc_freebucket.ucb_cnt < - cache->uc_freebucket.ucb_entries) - cache_bucket_swap(&cache->uc_freebucket, - &cache->uc_allocbucket); - if (__predict_true(bucket->ucb_cnt < bucket->ucb_entries)) { - cache_bucket_push(cache, bucket, item); - critical_exit(); - return; - } - } while (cache_free(zone, cache, udata, itemdomain)); - critical_exit(); + if (cache_free_item(zone, uz_flags, item, udata)) + return; /* * If nothing else caught this, we'll just do an internal free. From nobody Fri Jul 24 22:36:24 2026 X-Original-To: dev-commits-src-main@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 4h6NBd0mBSz6mqxS for ; Fri, 24 Jul 2026 22:36:25 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6NBc585fz3rT4 for ; Fri, 24 Jul 2026 22:36:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784932584; 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=HokieKV2Jbm2tCEc5vDUoKfv6e16Iw7r6uHogeeFZ+0=; b=X+tKqNKicNzNv3B+iCoz8KCae80ALKecKXr+55zO+dXrrvwxehGlp7sEfIxZIy7+RTX9Kk vdrLA+IwjtE5erGY4MS92Yfrw8V88rkdnaMSCiZWsXEoanhvZrTjBgHM2t0whUROrwXp4U kXcdb9sJR1UZUR+tanklLtB3gqmv99p16wCNAEQsOOMInUVNmF3/WA8E8eQzj9p8DrHsQP n8PYHKkLl4mlu2UkS3QNZDiqJtoNbE1dV0IdRt3VEA2XwXlZ6Az53+Pl3D5nm63dqKsNk9 BME6p5J1SKaGZHNOep/flf/UUwUOC3ofrQVawDETf12bMKO7/+Ml41XIAsuVEA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784932584; a=rsa-sha256; cv=none; b=nnIpI6rsSVJZ+v2J9GqW/XJwvpbiKRxVuwE1QsTXy14fBr8lyWf5TATHstGS2aETbAVtvK TgER98AiMJLP6pRmYd32uCTbQj6wtNWvcBJ6dQgHofIFD7OH1svpj/IOTZDgFcTz/GWgdW ZTDI1J7EZqHb88Upjr6jaCvfJAIpKCIn+HiE27eomNyBcOJ01T4F7nNRK0zYDFUs9p6crC hnsNcaFQ3IyGm4T7sd43VrijRezVwwDa5DSJ63f3wew7USESQNHXYlDeC2T1vKuhPgLzF+ +Q0QPN9yrTg6561VG+Wjq8KHdNQra6LVhTtESkjIr5nJVVdxouVOh+qbgt5OpQ== 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=1784932584; 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=HokieKV2Jbm2tCEc5vDUoKfv6e16Iw7r6uHogeeFZ+0=; b=Av0oaAwL5HYpZ42Rl18LeDXefpe/A9Pgq+5g/XApxoUdXtaHOoC1p4dJ3A6wFhZlm30skr LbGTWViMLEmK16W0fsnk4MCZuOKAA6ljzrondADtOBLQBLfWy4wtkyioBsjDRpfsMDMeqC DhK26NQ2/hn0q9ufAMqv5qJ4qU/67N80fZC8imaP3rgP0ja3/2pK06LEctnl//yxba8W1P VjgfIhCRCFXlIVaajX8Q18cJn7ihIO+qXDJekfXSDQw9NZmnUNS2//KMG67UcfoucuZrNh kxiLJbIVIrxCWH0TMVJ9ICRLqATj9ExaZZVQf99jp1IRqLKaXWjwq3QUp36F9Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6NBc3gwyz19Bn for ; Fri, 24 Jul 2026 22:36:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 188be by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 22:36:24 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 990989c31b46 - main - uma: Make an effort to defer reuse of items when KASAN is enabled List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 990989c31b4637a23e64598a3d9929079bb9a8de Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 22:36:24 +0000 Message-Id: <6a63e8e8.188be.576e443f@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=990989c31b4637a23e64598a3d9929079bb9a8de commit 990989c31b4637a23e64598a3d9929079bb9a8de Author: Mark Johnston AuthorDate: 2026-07-24 21:12:10 +0000 Commit: Mark Johnston CommitDate: 2026-07-24 21:12:10 +0000 uma: Make an effort to defer reuse of items when KASAN is enabled When KASAN is configured, make uma_zfree_arg() free items to the per-CPU free bucket, rather than to the alloc bucket. This means that the item won't be recycled immediately the next time a thread goes to allocate an item from that zone on the same CPU. In other words, the item will stay in a quarantine state longer, which helps make KASAN's use-after-free detection more reliable. Reviewed by: rlibby MFC after: 1 month Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58269 --- sys/vm/uma_core.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c index 02b2df89f636..fb72fafe9abc 100644 --- a/sys/vm/uma_core.c +++ b/sys/vm/uma_core.c @@ -4447,8 +4447,11 @@ fail: return (NULL); } +/* + * Try to free an item to the per-CPU cache, promoting its quick reuse. + */ static __always_inline bool -cache_free_item(uma_zone_t zone, int uz_flags, void *item, void *udata) +cache_free_reuse(uma_zone_t zone, int uz_flags, void *item, void *udata) { uma_cache_t cache; int itemdomain; @@ -4504,8 +4507,14 @@ cache_free_item(uma_zone_t zone, int uz_flags, void *item, void *udata) return (false); } +/* + * Try to free an object to the per-CPU cache, deferring its reuse. This is + * used by the SMR-protected allocator, which cannot reuse the item until + * smr_poll() guarantees that no threads are still accessing it, and by + * sanitizers, which wish to defer reuse to make UAF detection more effective. + */ static __always_inline bool -cache_free_smr(uma_zone_t zone, void *item, void *udata) +cache_free_defer(uma_zone_t zone, void *item, void *udata) { uma_cache_t cache; int itemdomain; @@ -4524,7 +4533,6 @@ cache_free_smr(uma_zone_t zone, void *item, void *udata) uma_cache_bucket_t bucket; cache = &zone->uz_cpu[curcpu]; - /* SMR Zones must free to the free bucket. */ bucket = &cache->uc_freebucket; #ifdef NUMA if ((uz_flags & UMA_ZONE_FIRSTTOUCH) != 0 && @@ -4559,7 +4567,7 @@ uma_zfree_smr(uma_zone_t zone, void *item) return; #endif - if (cache_free_smr(zone, item, NULL)) + if (cache_free_defer(zone, item, NULL)) return; /* @@ -4607,16 +4615,22 @@ uma_zfree_arg(uma_zone_t zone, void *item, void *udata) * a little longer for the limits to be reset. */ if (__predict_false(uz_flags & UMA_ZFLAG_LIMIT) && - atomic_load_32(&zone->uz_sleepers) > 0) - goto zfree_item; - - if (cache_free_item(zone, uz_flags, item, udata)) + atomic_load_32(&zone->uz_sleepers) > 0) { + /* We will free directly to the zone. */ + } +#ifdef KASAN + else if ((uz_flags & UMA_ZONE_NOKASAN) == 0) { + if (cache_free_defer(zone, item, udata)) + return; + } +#endif + else if (cache_free_reuse(zone, uz_flags, item, udata)) { return; + } /* * If nothing else caught this, we'll just do an internal free. */ -zfree_item: zone_free_item(zone, item, udata, SKIP_DTOR); } From nobody Fri Jul 24 22:36:25 2026 X-Original-To: dev-commits-src-main@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 4h6NBf0JtPz6mr56 for ; Fri, 24 Jul 2026 22:36:26 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6NBd5xkKz3rT6 for ; Fri, 24 Jul 2026 22:36:25 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784932585; 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=T/P6RhgtXBdKUnUXDYK+YV6nEBk4HphV/c+r6Dc4yuc=; b=l/mdUdXDE3+QPTzXyrNu/Fh4vdpMySIuBmr8Nw1odVbOw77XBT9dm12bJlvSzjUq9sEsWn +ijm4MvuEooYToMFqzEuImN0Jl5y+XvMXyco7iXi7bFbrxRkvkHlHDkEgwpws6RVDof+Lf sWceoJKGZGwMzL4O9mbNBD1mPYs/QogKwr2yJm2oiUpHwWWhFaBj9Vc+wC/3M2jMBoz6A0 IOp2XKcz5ioQdqCL7+rAT9zOADAkelnfqSjcy+GPt0JM0QEPzPUQ94xQDJ77d4fh7TiN3e wbIFa3jIdwP7WZYTe7eJz2T3pTDAq8eCibyJGrqQc5pTgP1m3JjEU1oooZG0Sg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784932585; a=rsa-sha256; cv=none; b=bro+NAXZRaW4cHIc2XWaUR6XM2hPW3uSOtCt4qvB36RbUNbBBzb+2PW5XFss7WPD5imKp7 p5vEm8U+OZyQLcWPuFxDFHzHDwDk0SKdq0qACyzbU1Ocycd2gSDbbrhOPDiQQTWw7sLola w0KGztVB/3YQPeeJ/B8wapILZD6RmrZqd2xQuwNZkXLmrnatV79TF8TzejfaagqMpM0RbS qzGxy1ydXRmHYqiXZtBVonS3KCdNNpnh6JpWMHWFwSdWY9GPvnp4Qp4W+ZZKYjn/EjxVo3 OZQcV7bfbV9zRwWILMk7T8HiY0rFd2HDhLDdzAcRVwiEV1DGbJj81dcOkuGiHA== 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=1784932585; 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=T/P6RhgtXBdKUnUXDYK+YV6nEBk4HphV/c+r6Dc4yuc=; b=a2ocG//tEuNmzDIMYmLc7DCU9Vfykqlrt7tZuXHcrMoeGZzgUOWVN/+zdsX5OdZ/Bw/tMd tCNPV7HMwjEBiIEZTui/Hgr4j3q1xxhJMUJ+of5AFf0CThuoCv4JAqxA7lqXEtg0SBSqQJ R8B4PWQcuV590q9Hxek5gXgoX5AOq7kXqXrQi/v6kO98sEwi5VRj1JLsegBAiHE6BBW0rT RPhFAZZuwdsQEYnd7rETC0i4kg6YoYBsqFZqWbNtoX9CB3B/WBV3tzFyYY21RlPpR96+R2 J+IOlWGy0oqFJ4i8NiguRe3WL6SLDYbTPWE95IlKqSdW8y08KZ9pXCFuOOV4Xw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6NBd4b3kz19TQ for ; Fri, 24 Jul 2026 22:36:25 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 189b3 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 22:36:25 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 666eab3afc52 - main - uma: Avoid allocating from free buckets when KASAN is enabled List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 666eab3afc52bf20d57c24e98a6aa667433fb7c2 Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 22:36:25 +0000 Message-Id: <6a63e8e9.189b3.7fcf0923@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=666eab3afc52bf20d57c24e98a6aa667433fb7c2 commit 666eab3afc52bf20d57c24e98a6aa667433fb7c2 Author: Mark Johnston AuthorDate: 2026-07-24 21:12:21 +0000 Commit: Mark Johnston CommitDate: 2026-07-24 21:12:21 +0000 uma: Avoid allocating from free buckets when KASAN is enabled When uma_zalloc_arg() hits an empty alloc bucket in the per-CPU cache, it tries swapping the alloc and free buckets in the hope that the free bucket has some items available. If not, it has to lock the zone. Disable this behaviour when KASAN is configured in order to further defer reuse of freed items. This forces a free item to go to the per-domain full bucket cache before it becomes accessible to the allocator. Reviewed by: rlibby MFC after: 1 month Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58270 --- sys/vm/uma_core.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c index fb72fafe9abc..e5f7d92a4f2a 100644 --- a/sys/vm/uma_core.c +++ b/sys/vm/uma_core.c @@ -3782,6 +3782,7 @@ static __noinline bool cache_alloc(uma_zone_t zone, uma_cache_t cache, void *udata, int flags) { uma_bucket_t bucket; + uint32_t zflags; int curdomain, domain; bool new; @@ -3791,10 +3792,15 @@ cache_alloc(uma_zone_t zone, uma_cache_t cache, void *udata, int flags) * If we have run out of items in our alloc bucket see * if we can switch with the free bucket. * - * SMR Zones can't re-use the free bucket until the sequence has - * expired. + * SMR zones can't re-use the free bucket until the sequence has + * expired. When KASAN is enabled, we want to avoid re-using free + * items in order to improve reliability of use-after-free detection. */ - if ((cache_uz_flags(cache) & UMA_ZONE_SMR) == 0 && + zflags = cache_uz_flags(cache); + if ((zflags & UMA_ZONE_SMR) == 0 && +#ifdef KASAN + (zflags & UMA_ZONE_NOKASAN) != 0 && +#endif cache->uc_freebucket.ucb_cnt != 0) { cache_bucket_swap(&cache->uc_freebucket, &cache->uc_allocbucket); @@ -3823,8 +3829,7 @@ cache_alloc(uma_zone_t zone, uma_cache_t cache, void *udata, int flags) * the critical section. */ domain = PCPU_GET(domain); - if ((cache_uz_flags(cache) & UMA_ZONE_ROUNDROBIN) != 0 || - VM_DOMAIN_EMPTY(domain)) + if ((zflags & UMA_ZONE_ROUNDROBIN) != 0 || VM_DOMAIN_EMPTY(domain)) domain = zone_domain_highest(zone, domain); bucket = cache_fetch_bucket(zone, cache, domain); if (bucket == NULL && zone->uz_bucket_size != 0 && !bucketdisable) { @@ -3849,7 +3854,7 @@ cache_alloc(uma_zone_t zone, uma_cache_t cache, void *udata, int flags) critical_enter(); cache = &zone->uz_cpu[curcpu]; if (cache->uc_allocbucket.ucb_bucket == NULL && - ((cache_uz_flags(cache) & UMA_ZONE_FIRSTTOUCH) == 0 || + ((zflags & UMA_ZONE_FIRSTTOUCH) == 0 || (curdomain = PCPU_GET(domain)) == domain || VM_DOMAIN_EMPTY(curdomain))) { if (new) From nobody Fri Jul 24 22:36:26 2026 X-Original-To: dev-commits-src-main@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 4h6NBg0BWfz6mr7t for ; Fri, 24 Jul 2026 22:36:27 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6NBf6bjJz3r44 for ; Fri, 24 Jul 2026 22:36:26 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784932586; 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=Ths+qi3JJpi7VwcooQDHweSiaJkSFyDlOb/o0KYe/ps=; b=lI9ZFnIXJjb8mj3t/dPLm9R1XpCi0fvOjOPqOB+KP/S4RfglBbNl0JU83b5H2b7PYWzs1u g+isEV+14L9k7PPok2J1frxm8wYWnaZZ5tEvXSDC3pIIvJ6db2mq4dZwaqaam65Q6dD5d5 +HPzt1+p1XQ7Qv3K4HhOy94uZMh9sySOt2aImlJwJD9P2YzyTYYGvDNuTs74gv5RPoJJpF NgKXUljoK+z0W0N8drl1Zz4UuaI9WPKWTs9xsRiKUdeUhqTb7xWqnQR3YUhoMZS2VRXJkX 4r3C0khEwhZHqTsRuFurJc0tbcB+lGvLVn9trH1iAjCLZ7+x0sAG9H71ax6OIA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784932586; a=rsa-sha256; cv=none; b=OCURWT4sEsrbjfg+bnkUwB3lfHEjtz/9pX4AGo2pRJqj7bXuqtpJUS4aqshrkkPm4IAEAu 10VgHqgmP0Nm5rxs1oAExycn+DL4K6QPzJcuCSM/9uqZVrapK4lFrpLYWpIMYPiJGfyxx9 vem1WjCxMin6fbOhMi5ldIgOBnOyWj69/aLoz/G2xliDZgAeBTiwZ05FrPPGES012Ld/qq d7OrmRyT6n5mZ5wo9rOLDtRpOGvMa6BPZSwhhLidqH6i7PVHwUvHCuNDlwxXIdwIhqKR92 Evp8XtKV0hw0SgcM0XYi4x+gOB1WjH2SPqgzSNppCnnpKXe2xRVD9zTRvmN50Q== 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=1784932586; 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=Ths+qi3JJpi7VwcooQDHweSiaJkSFyDlOb/o0KYe/ps=; b=QcWeyirSnGVQoNVGA80POct4FzcI5/Hkv9RkMa5BKJn8MW44Wfv+xEOyf8CLyibU/V5y+d 1eWweurHJLhbyq4T+LYbX+KxXe6rtvXYO9oR3AKTull59E5Y/uzzp1+M5mzYFVHY7D82dc uWEXf/ommSJ8SPNbTQpKwGz1mQ3WGx9Cnf9Z1gBYntuCpYbL2Ou5PcJgyc79Lw8TGKYw5r ISThKc6QOOfAj6km4ezgA62AxwYjU5zpUqqK0d5ZBTdfFQ1yvtRkto12LphJVqFiy6L/kf Rx82oGSsJckF8lXE22M5dZ2PrKJeZ69TJSp1bOhXB+bsCOc4QhuA3+yMXYvjiA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6NBf5Qltz19PB for ; Fri, 24 Jul 2026 22:36:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3fc3d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 22:36:26 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 492cfbe9e2f8 - main - uma: Enqueue full buckets in FIFO order when KASAN is configured List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 492cfbe9e2f831fff290e019dae66345146978bd Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 22:36:26 +0000 Message-Id: <6a63e8ea.3fc3d.5cce49ee@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=492cfbe9e2f831fff290e019dae66345146978bd commit 492cfbe9e2f831fff290e019dae66345146978bd Author: Mark Johnston AuthorDate: 2026-07-24 21:12:33 +0000 Commit: Mark Johnston CommitDate: 2026-07-24 21:18:49 +0000 uma: Enqueue full buckets in FIFO order when KASAN is configured We want to defer reuse of free objects, and this is a trivial way to promote that. Suggested by: rlibby Reviewed by: rlibby, alc MFC after: 1 month Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58312 --- sys/vm/uma_core.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c index e5f7d92a4f2a..d4a98d0b8463 100644 --- a/sys/vm/uma_core.c +++ b/sys/vm/uma_core.c @@ -869,6 +869,8 @@ zone_put_bucket(uma_zone_t zone, int domain, uma_bucket_t bucket, void *udata, */ zdom->uzd_nitems += bucket->ub_cnt; if (__predict_true(zdom->uzd_nitems < zone->uz_bucket_max)) { + bool head; + if (ws) { zone_domain_imax_set(zdom, zdom->uzd_nitems); } else { @@ -887,8 +889,14 @@ zone_put_bucket(uma_zone_t zone, int domain, uma_bucket_t bucket, void *udata, /* * Try to promote reuse of recently used items. For items * protected by SMR, try to defer reuse to minimize polling. + * If KASAN is configured, try to defer reuse to improve UAF + * detection. */ - if (bucket->ub_seq == SMR_SEQ_INVALID) + head = bucket->ub_seq == SMR_SEQ_INVALID; +#ifdef KASAN + head = head && (zone->uz_flags & UMA_ZONE_NOKASAN) != 0; +#endif + if (head) STAILQ_INSERT_HEAD(&zdom->uzd_buckets, bucket, ub_link); else STAILQ_INSERT_TAIL(&zdom->uzd_buckets, bucket, ub_link); From nobody Fri Jul 24 22:45:40 2026 X-Original-To: dev-commits-src-main@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 4h6NPK0B90z6mrVc for ; Fri, 24 Jul 2026 22:45:41 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6NPJ4kJbz3tC9 for ; Fri, 24 Jul 2026 22:45:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784933140; 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=Ra82zv1RJilCDQpSGx3Ujn8dQ7VTXV0TpNpbCW7MQcE=; b=M0HGc2HuytXWDPnlHmso3F+AwMdhx5c0YNH3zsmBEAzTwrwzfkdrrkHWd+YXGQwtKG5KCk zgQiXa/QiFHZVNOmTgBnFj+eK4l4kA/U6ncJK2Ep2+9TE8RdjppXLk9KnsUPQnSqPg7RmM 2zlgj0PIThXux73HOjbiI7QlgD0wcrP53xWqlkZ+feZeKu9SXryX+IB9UGxu7N9fiuSCKY HdAElvSuEgLgFv5jA9sS/z3YcEnhM/5/jESOOlVjD0+xVbDwnFCKXRjY45woRnAWEATejT VGLa+0OQpt6rRhi+aopbuSIhQF5UchYy3nSjrTVE9HdfgPKOqzP7nLLb+28n4Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784933140; a=rsa-sha256; cv=none; b=ul/2udeTbo0/YuJuO9BF8Py59SCS0XWEjQoA9b+Y3TG1lQVLqm5GCQSCcs6sS6EuuMpZD4 ed3evLax0kgfVGsiUjNEwVGkclaiuhfsDwdd0HULdFk9o9putpR7m/ei6v5TsAHkP9Icpu Q1rHXZL5antKsVvSGu5QOZB3tTvkAQU15XUsmcv/PoSIsvEhCb3m9sCG/74tx66pK+c+4H PcHekSRhyuuzDUTAiZt+nQNnYq3MzUaM6OXxLGVf955POa4J86sh0048kPmAL0SEgYkPSf k5LdOI8EbpRo0CyPlNzrR8yxXA1ZRYlUmP5P0sUKPABFsw7MLfmMSXELra54ng== 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=1784933140; 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=Ra82zv1RJilCDQpSGx3Ujn8dQ7VTXV0TpNpbCW7MQcE=; b=ykhSD263RKruw6Ol7S5tVyOc6yVWAAMUZfYqNWsnlj4bk89oSG0zghmpQyrIieDXyLw2jd w5YD7DrJRKT8U7K79Auufqn3NT9YLobH9PzLeO7H485qYwYW8ovawl33bUT3Ay5KaUqQVU SmxYYJARQ5/50knFFnsX+7DLqkQXv2Qmf28NspDK5VB8nfmA5Rk4cmZ3wlza6AypSwCb5J 9j4/kNu8ubqgNdvPIZir1UkgOjBZQLU72FIbrnBXf6dalGtfC++UQplp0grpSCT3gB4Wuz kfUzw/GR/Ad+PkHzBm7KWQ1qXwOB9/7HIXTYzDzWFLwcYNAKn9yLYKWeve8+bQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6NPJ2QDdz19CV for ; Fri, 24 Jul 2026 22:45:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 19efc by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Jul 2026 22:45:40 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Enji Cooper Subject: git: a594783bac90 - main - linux_firmware: reformat error print-out List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: ngie X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a594783bac906ecc4f6528d7d576215f85a21bda Auto-Submitted: auto-generated Date: Fri, 24 Jul 2026 22:45:40 +0000 Message-Id: <6a63eb14.19efc.36f751fb@gitrepo.freebsd.org> The branch main has been updated by ngie: URL: https://cgit.FreeBSD.org/src/commit/?id=a594783bac906ecc4f6528d7d576215f85a21bda commit a594783bac906ecc4f6528d7d576215f85a21bda Author: Enji Cooper AuthorDate: 2026-07-21 16:08:44 +0000 Commit: Enji Cooper CommitDate: 2026-07-24 22:45:34 +0000 linux_firmware: reformat error print-out This makes it easier to grep for the error message to better understand the call stack when loading firmware modules fails. Fix a cosmetic-only style(9) bug while here in the same function related to another logging message. MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58380 --- sys/compat/linuxkpi/common/src/linux_firmware.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sys/compat/linuxkpi/common/src/linux_firmware.c b/sys/compat/linuxkpi/common/src/linux_firmware.c index 0c6d855501ef..0915b317c01e 100644 --- a/sys/compat/linuxkpi/common/src/linux_firmware.c +++ b/sys/compat/linuxkpi/common/src/linux_firmware.c @@ -131,12 +131,13 @@ _linuxkpi_request_firmware(const char *fw_name, const struct linuxkpi_firmware * *fw = NULL; } if (warn) - device_printf(dev->bsddev, "could not load firmware " - "image '%s'\n", fw_name); + device_printf(dev->bsddev, + "could not load firmware image '%s'\n", + fw_name); return (-ENOENT); } - device_printf(dev->bsddev,"successfully loaded firmware image '%s'\n", + device_printf(dev->bsddev, "successfully loaded firmware image '%s'\n", fw_name); lfw->fbdfw = fbdfw; lfw->data = (const uint8_t *)fbdfw->data; From nobody Sat Jul 25 00:59:09 2026 X-Original-To: dev-commits-src-main@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 4h6RMj1m70z6n2GT for ; Sat, 25 Jul 2026 00:59:29 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "WR4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6RMh6qDsz49cB for ; Sat, 25 Jul 2026 00:59:28 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2ceed7018c8so7017505ad.1 for ; Fri, 24 Jul 2026 17:59:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784941162; x=1785545962; darn=freebsd.org; h=to:references:message-id:cc:date:in-reply-to:from:subject :mime-version:content-type:from:to:cc:subject:date:message-id :reply-to:content-type; bh=AVFOdNhSZAGz2I8FwX7Aitj5wKGjIKqb9GzdJebQhJ8=; b=BY2bbpWYUpbHoxF+7rCWtTME2rHMU3vtahLeAK2g09bi19FIHkIwQfUVaY5jCslcVD gzRVVye1V+qsykoyWVJbrjUQhIlGg8rsZt+cf2k89TLbPOEOpLm2kPW+lz0OtkSZFqVl xkz1BT57o0IbPb1y3uLIKl0B1EJ+H1Dl0zLTjelEKGQFN+tMiD8qIXPNKbhiqCrGnzIx ogCmmuos2R8GBz52l5qRjXHlb8LBQvvD2pggNfjl1PoFJmtcan+fD0e+XpOXfg35Pry4 sm4Ol1O2BLLGy25u5rLp/X72Hc+W1oRb6NKV9bAHVD63qR2cCzNpjtLQ8HLIHaJvh4X7 Lrzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784941162; x=1785545962; h=to:references:message-id:cc:date:in-reply-to:from:subject :mime-version:content-type:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=AVFOdNhSZAGz2I8FwX7Aitj5wKGjIKqb9GzdJebQhJ8=; b=ak/CpY1n5FTJ8oWbt24UbJl7jxFetF4wz9abQOIHIei9QBuvDfgGKuWA0lHyRByQqr aHx6KEO/gn0n2/+LrCWWtGH3pT1BRUABpZ4hIaMKxXhtgYcSMfBEe2hwWe9aq/69ECsb sQcPVpMfrQOkNHTU3fKcarwggO1U8cF/9pnq3vP2EP6JMG28fLx4/mZ7k3Ul0bDbNjiY f9bvP9uTMSd7HYiowed5p1IW0JAWg5krumaDe1QLMpvEr0Pd3lQ7P9H7BraP9bnfuKSE J4o/WyYsOu5RmiBHw4X3yZjyHfzGEcJO3Wevd4MCSgB7saFbP07d1YdN8hRlDR36/V/A KMsw== X-Forwarded-Encrypted: i=1; AHgh+RrDqidbXVot71E5a/q6XGGIwpIU4J4P/W2XAK09c2AaimRHVSyaCMJ+k76QT/ROqi/vP3DQZWwkFVXUNUZ9sON2BVFNvw==@freebsd.org X-Gm-Message-State: AOJu0YwEw8/nlUhZcRm8oXOXHDd71zPYmaXjE9Ujdl6E9UY+RBbdIh7K ZjGSvYdrmEhCXdPm48aeo7oUywv4ojmmyf6/o2OYUy1H4ZvU9lR6vgBt X-Gm-Gg: AR+sD11zc9aALd7qYpkfGl9HicBfkmbkX5ooFqG9YAXNlQwHRqfZlYoCyn2rtdkmhxF E//umMt+xdxkTUM7NNAWQBseQ/DhVz5oEIrlALkam/VU6TeYFPsB1DHH4S63RzXBRpLsT+ge+ci 6aCZWTx1B76J5utRx28EmHyD67KlSr2cjKpRfA0IooojDrTrWb0rG1SbwWEAVildYuhEJAh0/+h li2BuogL9Fej48cmRPj79O2p8ag87QBQ9J32t/QDMS8IxuPlAV6VaL4p8ZgeT2tcLFPLnfsuZjI cZ4QGpYaYLI9O2C01vUxGJlmuGvuX+Mz1t4QBOcYVmixIuXOAYl+I7XXzNXlrGrDPTZZ2dwsFwT AtHJ0Y4kr9xmgwWzVeyDSFmy3u57iBuYY3oQ+3HHUStzisKklpqCndSebNQIfoJykDZ0AazNl0g NtLvrGPZKmkksoCSC9/OPHnEBXLA== X-Received: by 2002:a17:903:1b6c:b0:2ca:3e3f:4956 with SMTP id d9443c01a7336-2cfde891b9dmr5256215ad.44.1784941161937; Fri, 24 Jul 2026 17:59:21 -0700 (PDT) Received: from smtpclient.apple ([145.79.197.119]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cfde5eecf5sm2324935ad.36.2026.07.24.17.59.20 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 Jul 2026 17:59:20 -0700 (PDT) Content-Type: multipart/signed; boundary="Apple-Mail=_23DB1DF9-C7AE-473F-A47D-A9CB86A669D4"; protocol="application/pgp-signature"; micalg=pgp-sha256 List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3864.600.51.1.1\)) Subject: Re: git: 7392dc9d2683 - main - git-mfc: Let the upstream for PRERELEASE branches be main From: "Enji Cooper (yaneurabeya)" In-Reply-To: <6a63d4fb.370de.23147404@gitrepo.freebsd.org> Date: Fri, 24 Jul 2026 17:59:09 -0700 Cc: "src-committers@freebsd.org" , "dev-commits-src-all@freebsd.org" , "dev-commits-src-main@freebsd.org" Message-Id: <8569B085-E920-4331-8012-420C91DB899B@gmail.com> References: <6a63d4fb.370de.23147404@gitrepo.freebsd.org> To: Mark Johnston X-Mailer: Apple Mail (2.3864.600.51.1.1) X-Rspamd-Queue-Id: 4h6RMh6qDsz49cB X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US] X-Spamd-Bar: ---- --Apple-Mail=_23DB1DF9-C7AE-473F-A47D-A9CB86A669D4 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Jul 24, 2026, at 2:11=E2=80=AFPM, Mark Johnston = wrote: >=20 > The branch main has been updated by markj: >=20 > URL: = https://cgit.FreeBSD.org/src/commit/?id=3D7392dc9d26830fe9d19e035d2e08f19d= cca96591 >=20 > commit 7392dc9d26830fe9d19e035d2e08f19dcca96591 > Author: Mark Johnston > AuthorDate: 2026-07-24 21:09:48 +0000 > Commit: Mark Johnston > CommitDate: 2026-07-24 21:09:48 +0000 >=20 > git-mfc: Let the upstream for PRERELEASE branches be main >=20 > Such branches are in code slush but are the same as stable branches = for > the purpose of MFCs. > --- > tools/tools/git/git-mfc | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) >=20 > diff --git a/tools/tools/git/git-mfc b/tools/tools/git/git-mfc > index 45a16a3bd5e4..431ed2ebc861 100755 > --- a/tools/tools/git/git-mfc > +++ b/tools/tools/git/git-mfc > @@ -59,7 +59,7 @@ def origin_branch(): > err(1, f"could not determine BRANCH from {newvers}") > if branch =3D=3D "CURRENT": > err(1, "this is a CURRENT tree, we do not MFC to CURRENT") > - if branch =3D=3D "STABLE": > + if branch =3D=3D "STABLE" or branch =3D=3D "PRERELEASE": This is the preferred idiom: ``` if branch in (=E2=80=9CSTABLE=E2=80=9D, =E2=80=9CPREREALEASE=E2=80=9D, = ): ``` It=E2=80=99s easier to read and results in less instructions Cheers, -Enji ``` >>> import dis >>> def db1(a): ... if a =3D=3D "b" or a =3D=3D "c": ... return True ... return False =E2=80=A6 >>> def db2(a): ... if a in ("b", "c"): ... return True ... return False ... >>> dis.dis(db1) 1 RESUME 0 2 LOAD_FAST_BORROW 0 (a) LOAD_CONST 0 ('b') COMPARE_OP 88 (bool(=3D=3D)) POP_JUMP_IF_TRUE 8 (to L1) NOT_TAKEN LOAD_FAST_BORROW 0 (a) LOAD_CONST 1 ('c') COMPARE_OP 88 (bool(=3D=3D)) POP_JUMP_IF_FALSE 3 (to L2) NOT_TAKEN 3 L1: LOAD_CONST 2 (True) RETURN_VALUE 4 L2: LOAD_CONST 3 (False) RETURN_VALUE >>> dis.dis(db2) 1 RESUME 0 2 LOAD_FAST_BORROW 0 (a) LOAD_CONST 3 (('b', 'c')) CONTAINS_OP 0 (in) POP_JUMP_IF_FALSE 3 (to L1) NOT_TAKEN 3 LOAD_CONST 1 (True) RETURN_VALUE 4 L1: LOAD_CONST 2 (False) RETURN_VALUE ```= --Apple-Mail=_23DB1DF9-C7AE-473F-A47D-A9CB86A669D4 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEkHfexGRJ3gYRdA2gGpE5DjPsNJgFAmpkCl0ACgkQGpE5DjPs NJhRYBAAhEuGTohQcZmp3DaPB/SJz6KZY0MmXZpZ7CZdCIq7vSOiwKybquO5gonQ UpMMe2AZn8ydIFNEeM+/9M0tw0oJJYfse1ychYt874femanVlQYaD+MG/qspiFj0 2Rvig9uhxrRcUVxVkixE8ceI/ZwZ3vicMFStNihLJ/f0x7A3XqhVJDTIWe8yRJ6l IqRO8nXs6RLzYM/iPm7R/BUUEpcNZHFX+3z/PPOlMewAAPS/MY/ZJOOEBmtGnR9a MhC2gALI3/zKSSUmBFw/KvakuFVcdiL7JxqMo4WY6vDTKn49ripwXnq2p1kYjoFT wbvzgYHzq3EJ/qdjqxWzT3q3LyKRcvAa1Hr1lwSr9pZU4O8CXeOuI7xevatxFtrK MYaBWI3Yh3Y7es+IycattqeDF9nbOjKzaUXGeFoj6v3fay/UjA/9IBYeeVYf686/ TZp+IzoHr/OD3EeaLZwyXUnant5OmmRN+KJHpuUT5S39KWQzCYViulDcrVDqIFRG O/B4O7R5wOaIGB0vVxq5bCUp8rA/6qwA/AjL8h1oJzM0F7sXy8hPkRJ2uZxfRq1+ YKrznBuHZ+Gu8S6HLJGQJz9F6YVXlTsUAYKxBqLMmIARRo8YcwxH7oAEJY4gkORO mOyoC/NCAlZh/dUG4I+TtPaJJ5sL3wal8fi2UnUXVHjQ/lWvDMU= =sIE5 -----END PGP SIGNATURE----- --Apple-Mail=_23DB1DF9-C7AE-473F-A47D-A9CB86A669D4-- From nobody Sat Jul 25 01:49:45 2026 X-Original-To: dev-commits-src-main@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 4h6STj21Fyz6ldqq for ; Sat, 25 Jul 2026 01:49:45 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6STj1ltxz3Q4p for ; Sat, 25 Jul 2026 01:49:45 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784944185; 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=HSIA/Js1BWvqcaWYhwEb4JpcLS2T/t7WkNSJlMa9i6A=; b=MkDgXnjc7wO/BeHf0PapDHqXhAZqWrf8oqz4MBPDl1Ree3xu3XwIIfnRQZzP6cQ7550/qh t+aUGtHuX45WFY6QEPPkbjR6sLVtC9gMDbUbrXLvxKkY882T5PnlmAx3x6r9t6MH9JQenC Hd53QimaV1FQvJLEFCJKI4QOPIWoS88G5oQslYX7HW6AiKUJrPG29Su4ZxzGmnSko2Jlmn eMSbm/CLxLvk0l7Yh9h9Zk7q9IzwOaq6u2qbLJJXQ0Jt8t9eMvSUfbehRwhKyujMG8CAHb Z5t3ZBb9frfRJWTWYivxYX6bGjbsLYW3p9R62j8ZptQgPSSdiU97m9d7zCq6Nw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784944185; a=rsa-sha256; cv=none; b=oUBm/p/aY830cYf/nPIBsgl2S0fdTl4gidLLiaLtkCWVFg2gKAb8cfIPACu4gTvTD/yGVc OgBrkG83BW7TfqyughltqEi+DRbRoHfnFwHDkVahhoMUJ4+FKpRyBc5p7mMiwZR7s62gRU 0rOvK2ZoHT8asugDZGJiMRjDis1b5zd+6ID58BHsYtdIzywH6FTHl5vXk6sX4Ww+XU9Dvb IOYkjbbuS0FWJUeqO0ZrZDaUBtritq0gxVee571QKb6LR4glANVTklQcmYciMiLAAwoBM1 HM4AX7sped+H+JpEis8yoZPoowBOGGW5p31oD8kK7GqZ6jMHWxzqIC2UiZffcQ== 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=1784944185; 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=HSIA/Js1BWvqcaWYhwEb4JpcLS2T/t7WkNSJlMa9i6A=; b=bAnNb/g6LQP2BPnqSx38HRZ5OaHle9+XHe5sscl2r/5DoVUgWkcWnwaQx4UGz5sM9m5vRQ LrOu8iwQbc193mcxrvlZ6pyvF4jKCFG7k5MJnP7PsxZmEKu4+dfEHigDYuwBa3DsjFwbI6 Fne7sOq5G/uW7w/QYl4nQkQfDD0jh9HGdk/iZzKgyN3NCogpSfF69XkVmtFZj6OVMS5oVr 2gUYRv/z7LPDyuD7vHqtyRz0g8TXPQPMciSAmyX30umx7fmHlRSVmACdQwWe1/Lt3Ci68P W/bJp21fQwMp3j9AAipvXnVHbo2RDHg00XkRMDccfA/LC0b53z6okRIau+7I9Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6STj0bSjz1nm for ; Sat, 25 Jul 2026 01:49:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 34446 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 25 Jul 2026 01:49:45 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: ShengYi Hung Subject: git: e0b235ecd4fa - main - xhci: Refactor xhci_generic_setup code List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: aokblast X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e0b235ecd4fa9a67578be68057dbcad797f96397 Auto-Submitted: auto-generated Date: Sat, 25 Jul 2026 01:49:45 +0000 Message-Id: <6a641639.34446.a8e4eee@gitrepo.freebsd.org> The branch main has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=e0b235ecd4fa9a67578be68057dbcad797f96397 commit e0b235ecd4fa9a67578be68057dbcad797f96397 Author: ShengYi Hung AuthorDate: 2026-05-20 09:26:59 +0000 Commit: ShengYi Hung CommitDate: 2026-07-25 01:49:35 +0000 xhci: Refactor xhci_generic_setup code Our USB TRB buildup subroutines were previously difficult to follow. In setup_generic_chain_sub(), the routine filled TRB packets based on the characteristics passed by the caller and the current state (for example, whether the TRB was the last in the TD). However, most TRB types (except Normal TRBs) cannot be shared across TDs. To simplify the logic, refactor xhci_setup_generic() so that TRBs are constructed according to their transfer type, with dedicated helper functions for each TRB type. Sponsored by: The FreeBSD Foundation Assisted-by: Claude Code (Opus 4.6, Opus 4.8(1M) and Sonet 5.0) Differential Revision: https://reviews.freebsd.org/D57130 --- sys/dev/usb/controller/xhci.c | 1009 +++++++++++++++++++++-------------------- 1 file changed, 508 insertions(+), 501 deletions(-) diff --git a/sys/dev/usb/controller/xhci.c b/sys/dev/usb/controller/xhci.c index b522c5fdc5a3..a3bb28bdfe0b 100644 --- a/sys/dev/usb/controller/xhci.c +++ b/sys/dev/usb/controller/xhci.c @@ -132,28 +132,6 @@ SYSCTL_INT(_hw_usb_xhci, OID_AUTO, ctlstep, CTLFLAG_RWTUN, #define XHCI_INTR_ENDPT 1 -struct xhci_std_temp { - struct xhci_softc *sc; - struct usb_page_cache *pc; - struct xhci_td *td; - struct xhci_td *td_next; - uint32_t len; - uint32_t offset; - uint32_t max_packet_size; - uint32_t average; - uint32_t isoc_frame; - uint16_t isoc_delta; - uint8_t shortpkt; - uint8_t multishort; - uint8_t last_frame; - uint8_t trb_type; - uint8_t direction; - uint8_t tbc; - uint8_t tlbpc; - uint8_t step_td; - uint8_t do_isoc_sync; -}; - static void xhci_do_poll(struct usb_bus *); static void xhci_device_done(struct usb_xfer *, usb_error_t); static void xhci_get_xecp(struct xhci_softc *); @@ -997,6 +975,8 @@ xhci_check_transfer(struct xhci_softc *sc, struct xhci_trb *trb) continue; td = xfer->td_transfer_cache; + if (td == NULL) + continue; DPRINTFN(5, "Checking if 0x%016llx == (0x%016llx .. 0x%016llx)\n", (long long)td_event, @@ -1757,555 +1737,583 @@ xhci_do_poll(struct usb_bus *bus) USB_BUS_UNLOCK(&sc->sc_bus); } +/* + * Fill the link TRB at td->td_trb[td->ntrb]. + * + * td_next: the TD to link to (qwTrb0 is set to its physical address), or + * NULL when this is the end of the static chain (xhci_transfer_insert + * will later overwrite qwTrb0 with the ring-return address). + * last: when true, CHAIN_BIT is NOT set on this link TRB; the hardware + * treats it as a TD boundary. When false, CHAIN_BIT is set so + * the hardware continues to the next TD without a TD boundary. + * + * NOTE: isochronous transfers must always use last=true (no CHAIN) even for + * non-final frames; see xhci_setup_isoc() for the rationale. + */ static void -xhci_setup_generic_chain_sub(struct xhci_std_temp *temp) +xhci_td_fill_link(struct xhci_td *td, struct xhci_td *td_next, bool last) { - struct usb_page_search buf_res; - struct xhci_td *td; - struct xhci_td *td_next; - struct xhci_td *td_alt_next; - struct xhci_td *td_first; - uint32_t buf_offset; - uint32_t average; - uint32_t len_old; - uint32_t npkt_off; + struct xhci_trb *trb; uint32_t dword; - uint8_t shortpkt_old; - uint8_t precompute; - uint8_t x; - - td_alt_next = NULL; - buf_offset = 0; - shortpkt_old = temp->shortpkt; - len_old = temp->len; - npkt_off = 0; - precompute = 1; -restart: - - td = temp->td; - td_next = td_first = temp->td_next; - - while (1) { - if (temp->len == 0) { - if (temp->shortpkt) - break; + trb = &td->td_trb[td->ntrb]; + trb->qwTrb0 = td_next != NULL ? htole64(td_next->td_self) : 0; + trb->dwTrb2 = 0; + dword = XHCI_TRB_3_TYPE_SET(XHCI_TRB_TYPE_LINK) | XHCI_TRB_3_CYCLE_BIT | + XHCI_TRB_3_IOC_BIT; + trb->dwTrb3 = htole32(dword); + (void)last; +} - /* send a Zero Length Packet, ZLP, last */ +/* + * Build Normal TRBs for one transfer frame. + * + * cache: DMA page cache containing the data. + * offset: byte offset within cache (non-zero for isochronous frames that + * share a single frbuffer[0]). + * len: number of bytes in this frame (0 = zero-length packet). + * mps: maximum packet size of the endpoint. + * td: transfer descriptor to fill. + * td_next: next TD in the chain (for the link TRB), or NULL if last. + * is_in: true for an IN endpoint (ISP_BIT is set on data TRBs). + * step_td: if true, leave CYCLE_BIT clear on the first TRB so that + * xhci_activate_transfer() can start it later (bulk IN stepping). + * last: true if this is the last TD of the transfer. + */ +static void +xhci_setup_normal_trbs(struct usb_page_cache *cache, uint32_t offset, + uint32_t len, uint32_t mps, struct xhci_td *td, struct xhci_td *td_next, + bool is_in, bool step_td, bool last) +{ + struct xhci_trb *trb; + struct usb_page_search search; + uint32_t cur_len, seg_len, npkt, dword; + int i; - temp->shortpkt = 1; - average = 0; + trb = NULL; + cur_len = 0; + i = 0; + do { + trb = &td->td_trb[i]; + if (len > 0) { + usbd_get_page(cache, offset + cur_len, &search); + seg_len = search.length; + if (cur_len + seg_len > len) + seg_len = len - cur_len; + if (seg_len > XHCI_TD_PAGE_SIZE) + seg_len = XHCI_TD_PAGE_SIZE; + cur_len += seg_len; } else { - average = temp->average; - - if (temp->len < average) { - if (temp->len % temp->max_packet_size) { - temp->shortpkt = 1; - } - average = temp->len; - } + /* Zero-length packet: no data buffer */ + memset(&search, 0, sizeof(search)); + seg_len = 0; } - if (td_next == NULL) - panic("%s: out of XHCI transfer descriptors!", __FUNCTION__); - - /* get next TD */ - - td = td_next; - td_next = td->obj_next; - - /* check if we are pre-computing */ + npkt = howmany(len - cur_len, mps); + if (npkt > 31) + npkt = 31; + + trb->qwTrb0 = htole64(search.physaddr); + trb->dwTrb2 = htole32( + XHCI_TRB_2_BYTES_SET(seg_len) | XHCI_TRB_2_TDSZ_SET(npkt)); + dword = XHCI_TRB_3_CHAIN_BIT | + XHCI_TRB_3_TYPE_SET(XHCI_TRB_TYPE_NORMAL); + if (is_in) + dword |= XHCI_TRB_3_ISP_BIT; + /* First TRB: omit CYCLE if stepping */ + if (i > 0 || !step_td) + dword |= XHCI_TRB_3_CYCLE_BIT; + trb->dwTrb3 = htole32(dword); + i++; + } while (cur_len < len); - if (precompute) { - /* update remaining length */ + /* Last data TRB: remove CHAIN, add IOC, clear TD size */ + trb->dwTrb3 &= ~htole32(XHCI_TRB_3_CHAIN_BIT); + trb->dwTrb3 |= htole32(XHCI_TRB_3_IOC_BIT); + trb->dwTrb2 &= ~htole32(XHCI_TRB_2_TDSZ_SET(31)); - temp->len -= average; + td->ntrb = i; + td->len = len; + td->remainder = 0; + td->status = 0; + td->alt_next = last ? NULL : td_next; - continue; - } - /* fill out current TD */ + xhci_td_fill_link(td, td_next, last); + usb_pc_cpu_flush(td->page_cache); +} - td->len = average; +/* + * Build TRBs for a control transfer. Each stage (Setup, Data, Status) + * occupies its own xhci_td so that xhci_generic_done_sub() can account + * for each frame independently. Returns the last TD used. + */ +static struct xhci_td * +xhci_setup_ctrl(struct usb_xfer *xfer, struct xhci_td *td) +{ + struct xhci_softc *sc = XHCI_BUS2SC(xfer->xroot->bus); + struct xhci_trb *trb; + struct usb_page_search search; + uint32_t dword, len, cur_len, seg_len, npkt; + int x, i; + bool is_in, use_data_stage, step_td, is_last; + + is_in = !!(xfer->endpointno & UE_DIR_IN); + use_data_stage = !xfer->flags_int.control_did_data; + + /* ---- Setup stage ---- */ + if (xfer->flags_int.control_hdr) { + /* setup_only: no data or status to follow */ + bool setup_only = (xfer->nframes == 1) && + xfer->flags_int.control_act; + + trb = &td->td_trb[0]; + usbd_copy_out(&xfer->frbuffers[0], 0, + (uint8_t *)(uintptr_t)&trb->qwTrb0, 8); + trb->dwTrb2 = htole32( + XHCI_TRB_2_BYTES_SET(8) | XHCI_TRB_2_TDSZ_SET(0)); + /* + * IOC: the Setup stage is a complete one-TRB TD; without IOC + * the controller generates no Transfer Event for it and + * td_transfer_cache never advances past the Setup stage, so the + * control transfer (and thus enumeration) hangs. + */ + dword = XHCI_TRB_3_CYCLE_BIT | XHCI_TRB_3_IDT_BIT | + XHCI_TRB_3_IOC_BIT | + XHCI_TRB_3_TYPE_SET(XHCI_TRB_TYPE_SETUP_STAGE); + /* TRT field: set only when wLength != 0 (XHCI 1.2 §4.11.2.2) */ + if (trb->qwTrb0 & htole64(XHCI_TRB_0_WLENGTH_MASK)) + dword |= (trb->qwTrb0 & + htole64(XHCI_TRB_0_DIR_IN_MASK)) ? + XHCI_TRB_3_TRT_IN : + XHCI_TRB_3_TRT_OUT; + trb->dwTrb3 = htole32(dword); + + td->ntrb = 1; + td->len = 8; td->remainder = 0; td->status = 0; + td->alt_next = setup_only ? NULL : td->obj_next; - /* update remaining length */ - - temp->len -= average; - - /* reset TRB index */ - - x = 0; - - if (temp->trb_type == XHCI_TRB_TYPE_SETUP_STAGE) { - /* immediate data */ - - if (average > 8) - average = 8; - - td->td_trb[0].qwTrb0 = 0; - - usbd_copy_out(temp->pc, temp->offset + buf_offset, - (uint8_t *)(uintptr_t)&td->td_trb[0].qwTrb0, - average); - - dword = XHCI_TRB_2_BYTES_SET(8) | - XHCI_TRB_2_TDSZ_SET(0) | - XHCI_TRB_2_IRQ_SET(0); - - td->td_trb[0].dwTrb2 = htole32(dword); + xhci_td_fill_link(td, setup_only ? NULL : td->obj_next, + setup_only); + usb_pc_cpu_flush(td->page_cache); - dword = XHCI_TRB_3_TYPE_SET(XHCI_TRB_TYPE_SETUP_STAGE) | - XHCI_TRB_3_IDT_BIT | XHCI_TRB_3_CYCLE_BIT; + if (setup_only) + return (td); + td = td->obj_next; + } - /* check wLength */ - if (td->td_trb[0].qwTrb0 & - htole64(XHCI_TRB_0_WLENGTH_MASK)) { - if (td->td_trb[0].qwTrb0 & - htole64(XHCI_TRB_0_DIR_IN_MASK)) - dword |= XHCI_TRB_3_TRT_IN; - else - dword |= XHCI_TRB_3_TRT_OUT; - } + /* ---- Data stages (frame indices 1 .. nframes-1) ---- */ + for (x = 1; x < xfer->nframes; x++) { + len = xfer->frlengths[x]; + is_last = (x == xfer->nframes - 1) && + xfer->flags_int.control_act; - td->td_trb[0].dwTrb3 = htole32(dword); -#ifdef USB_DEBUG - xhci_dump_trb(&td->td_trb[x]); -#endif - x++; + cur_len = 0; + i = 0; - } else do { - uint32_t npkt; + do { + trb = &td->td_trb[i]; + usbd_get_page(&xfer->frbuffers[x], cur_len, &search); + seg_len = search.length; + if (cur_len + seg_len > len) + seg_len = len - cur_len; + if (seg_len > XHCI_TD_PAGE_SIZE) + seg_len = XHCI_TD_PAGE_SIZE; + cur_len += seg_len; + + npkt = howmany(len - cur_len, xfer->max_packet_size); + if (npkt > 31) + npkt = 31; - /* fill out buffer pointers */ + trb->qwTrb0 = htole64(search.physaddr); + trb->dwTrb2 = htole32(XHCI_TRB_2_BYTES_SET(seg_len) | + XHCI_TRB_2_TDSZ_SET(npkt)); - if (average == 0) { - memset(&buf_res, 0, sizeof(buf_res)); + /* + * XHCI 1.2 §4.11.2.2: first TRB of the data + * phase must be Data Stage type; subsequent + * TRBs (same or later data frame) use Normal. + */ + if (use_data_stage) { + dword = XHCI_TRB_3_CYCLE_BIT | + XHCI_TRB_3_CHAIN_BIT | + XHCI_TRB_3_TYPE_SET( + XHCI_TRB_TYPE_DATA_STAGE); + if (is_in) + dword |= XHCI_TRB_3_DIR_IN | + XHCI_TRB_3_ISP_BIT; + use_data_stage = false; } else { - usbd_get_page(temp->pc, temp->offset + - buf_offset, &buf_res); - - /* get length to end of page */ - if (buf_res.length > average) - buf_res.length = average; - - /* check for maximum length */ - if (buf_res.length > XHCI_TD_PAGE_SIZE) - buf_res.length = XHCI_TD_PAGE_SIZE; - - npkt_off += buf_res.length; - } - - /* set up npkt */ - npkt = howmany(len_old - npkt_off, - temp->max_packet_size); - - if (npkt == 0) - npkt = 1; - else if (npkt > 31) - npkt = 31; - - /* fill out TRB's */ - td->td_trb[x].qwTrb0 = - htole64((uint64_t)buf_res.physaddr); - - dword = - XHCI_TRB_2_BYTES_SET(buf_res.length) | - XHCI_TRB_2_TDSZ_SET(npkt) | - XHCI_TRB_2_IRQ_SET(0); - - td->td_trb[x].dwTrb2 = htole32(dword); - - switch (temp->trb_type) { - case XHCI_TRB_TYPE_ISOCH: - dword = XHCI_TRB_3_CHAIN_BIT | XHCI_TRB_3_CYCLE_BIT | - XHCI_TRB_3_TBC_SET(temp->tbc) | - XHCI_TRB_3_TLBPC_SET(temp->tlbpc); - if (td != td_first) { - dword |= XHCI_TRB_3_TYPE_SET(XHCI_TRB_TYPE_NORMAL); - } else if (temp->do_isoc_sync != 0) { - temp->do_isoc_sync = 0; - /* wait until "isoc_frame" */ - dword |= XHCI_TRB_3_TYPE_SET(XHCI_TRB_TYPE_ISOCH) | - XHCI_TRB_3_FRID_SET(temp->isoc_frame / 8); - } else { - /* start data transfer at next interval */ - dword |= XHCI_TRB_3_TYPE_SET(XHCI_TRB_TYPE_ISOCH) | - XHCI_TRB_3_ISO_SIA_BIT; - } - if (temp->direction == UE_DIR_IN) - dword |= XHCI_TRB_3_ISP_BIT; - break; - case XHCI_TRB_TYPE_DATA_STAGE: - dword = XHCI_TRB_3_CHAIN_BIT | XHCI_TRB_3_CYCLE_BIT | - XHCI_TRB_3_TYPE_SET(XHCI_TRB_TYPE_DATA_STAGE); - if (temp->direction == UE_DIR_IN) - dword |= XHCI_TRB_3_DIR_IN | XHCI_TRB_3_ISP_BIT; - /* - * Section 3.2.9 in the XHCI - * specification about control - * transfers says that we should use a - * normal-TRB if there are more TRBs - * extending the data-stage - * TRB. Update the "trb_type". - */ - temp->trb_type = XHCI_TRB_TYPE_NORMAL; - break; - case XHCI_TRB_TYPE_STATUS_STAGE: - dword = XHCI_TRB_3_CHAIN_BIT | XHCI_TRB_3_CYCLE_BIT | - XHCI_TRB_3_TYPE_SET(XHCI_TRB_TYPE_STATUS_STAGE); - if (temp->direction == UE_DIR_IN) - dword |= XHCI_TRB_3_DIR_IN; - break; - default: /* XHCI_TRB_TYPE_NORMAL */ - dword = XHCI_TRB_3_CHAIN_BIT | XHCI_TRB_3_CYCLE_BIT | + dword = XHCI_TRB_3_CYCLE_BIT | + XHCI_TRB_3_CHAIN_BIT | XHCI_TRB_3_TYPE_SET(XHCI_TRB_TYPE_NORMAL); - if (temp->direction == UE_DIR_IN) + if (is_in) dword |= XHCI_TRB_3_ISP_BIT; - break; } - td->td_trb[x].dwTrb3 = htole32(dword); - - average -= buf_res.length; - buf_offset += buf_res.length; -#ifdef USB_DEBUG - xhci_dump_trb(&td->td_trb[x]); -#endif - x++; - - } while (average != 0); - - td->td_trb[x-1].dwTrb3 |= htole32(XHCI_TRB_3_IOC_BIT); - - /* store number of data TRB's */ - - td->ntrb = x; - - DPRINTF("NTRB=%u\n", x); - - /* fill out link TRB */ - - if (td_next != NULL) { - /* link the current TD with the next one */ - td->td_trb[x].qwTrb0 = htole64((uint64_t)td_next->td_self); - DPRINTF("LINK=0x%08llx\n", (long long)td_next->td_self); - } else { - /* this field will get updated later */ - DPRINTF("NOLINK\n"); - } - - dword = XHCI_TRB_2_IRQ_SET(0); - - td->td_trb[x].dwTrb2 = htole32(dword); - - dword = XHCI_TRB_3_TYPE_SET(XHCI_TRB_TYPE_LINK) | - XHCI_TRB_3_CYCLE_BIT | XHCI_TRB_3_IOC_BIT | - /* - * CHAIN-BIT: Ensure that a multi-TRB IN-endpoint - * frame only receives a single short packet event - * by setting the CHAIN bit in the LINK field. In - * addition some XHCI controllers have problems - * sending a ZLP unless the CHAIN-BIT is set in - * the LINK TRB. - */ - XHCI_TRB_3_CHAIN_BIT; - - td->td_trb[x].dwTrb3 = htole32(dword); + trb->dwTrb3 = htole32(dword); + i++; + } while (cur_len < len); + /* Fix last data TRB */ + trb->dwTrb3 &= ~htole32(XHCI_TRB_3_CHAIN_BIT); + trb->dwTrb3 |= htole32(XHCI_TRB_3_IOC_BIT); + trb->dwTrb2 &= ~htole32(XHCI_TRB_2_TDSZ_SET(31)); + + td->ntrb = i; + td->len = len; + td->remainder = 0; + td->status = 0; + td->alt_next = is_last ? NULL : td->obj_next; - td->alt_next = td_alt_next; -#ifdef USB_DEBUG - xhci_dump_trb(&td->td_trb[x]); -#endif + xhci_td_fill_link(td, is_last ? NULL : td->obj_next, is_last); usb_pc_cpu_flush(td->page_cache); - } - - if (precompute) { - precompute = 0; - - /* set up alt next pointer, if any */ - if (temp->last_frame) { - td_alt_next = NULL; - } else { - /* we use this field internally */ - td_alt_next = td_next; - } - /* restore */ - temp->shortpkt = shortpkt_old; - temp->len = len_old; - goto restart; + if (is_last) + return (td); + td = td->obj_next; } + /* ---- Status stage ---- */ + /* - * Remove cycle bit from the first TRB if we are - * stepping them: + * Some XHCI controllers will not delay the status stage until the + * next SOF, causing control transfer failures. When ctlstep is + * set we leave CYCLE_BIT clear; xhci_activate_transfer() enables it + * after the data stage has completed. */ - if (temp->step_td != 0) { - td_first->td_trb[0].dwTrb3 &= ~htole32(XHCI_TRB_3_CYCLE_BIT); - usb_pc_cpu_flush(td_first->page_cache); - } - - /* clear TD SIZE to zero, hence this is the last TRB */ - /* remove chain bit because this is the last data TRB in the chain */ - td->td_trb[td->ntrb - 1].dwTrb2 &= ~htole32(XHCI_TRB_2_TDSZ_SET(31)); - td->td_trb[td->ntrb - 1].dwTrb3 &= ~htole32(XHCI_TRB_3_CHAIN_BIT); - /* remove CHAIN-BIT from last LINK TRB */ - td->td_trb[td->ntrb].dwTrb3 &= ~htole32(XHCI_TRB_3_CHAIN_BIT); - + step_td = (xhcictlstep || sc->sc_ctlstep) && (xfer->nframes != 0); + + trb = &td->td_trb[0]; + trb->qwTrb0 = 0; + trb->dwTrb2 = htole32(XHCI_TRB_2_BYTES_SET(0) | XHCI_TRB_2_TDSZ_SET(0)); + dword = XHCI_TRB_3_IOC_BIT | + XHCI_TRB_3_TYPE_SET(XHCI_TRB_TYPE_STATUS_STAGE); + /* Status direction is opposite to the data direction */ + if (!is_in) + dword |= XHCI_TRB_3_DIR_IN; + if (!step_td) + dword |= XHCI_TRB_3_CYCLE_BIT; + trb->dwTrb3 = htole32(dword); + + td->ntrb = 1; + td->len = 0; + td->remainder = 0; + td->status = 0; + td->alt_next = NULL; + + xhci_td_fill_link(td, NULL, true); usb_pc_cpu_flush(td->page_cache); - temp->td = td; - temp->td_next = td_next; + return (td); } -static void -xhci_setup_generic_chain(struct usb_xfer *xfer) +/* + * Build TRBs for a bulk (or interrupt) transfer. + * Each frame gets its own xhci_td. Returns the last TD used. + */ +static struct xhci_td * +xhci_setup_bulk(struct usb_xfer *xfer, struct xhci_td *td) { - struct xhci_std_temp temp; - struct xhci_td *td; - uint32_t x; - uint32_t y; - uint8_t mult; - - temp.do_isoc_sync = 0; - temp.step_td = 0; - temp.tbc = 0; - temp.tlbpc = 0; - temp.average = xfer->max_hc_frame_size; - temp.max_packet_size = xfer->max_packet_size; - temp.sc = XHCI_BUS2SC(xfer->xroot->bus); - temp.pc = NULL; - temp.last_frame = 0; - temp.offset = 0; - temp.multishort = xfer->flags_int.isochronous_xfr || - xfer->flags_int.control_xfr || - xfer->flags_int.short_frames_ok; - - /* toggle the DMA set we are using */ - xfer->flags_int.curr_dma_set ^= 1; - - /* get next DMA set */ - td = xfer->td_start[xfer->flags_int.curr_dma_set]; - - temp.td = NULL; - temp.td_next = td; - - xfer->td_transfer_first = td; - xfer->td_transfer_cache = td; - - if (xfer->flags_int.isochronous_xfr) { - uint8_t shift; - - /* compute multiplier for ISOCHRONOUS transfers */ - mult = xfer->endpoint->ecomp ? - UE_GET_SS_ISO_MULT(xfer->endpoint->ecomp->bmAttributes) - : 0; - /* check for USB 2.0 multiplier */ - if (mult == 0) { - mult = (xfer->endpoint->edesc-> - wMaxPacketSize[1] >> 3) & 3; - } - /* range check */ - if (mult > 2) - mult = 3; - else - mult++; - - x = XREAD4(temp.sc, runt, XHCI_MFINDEX); + bool is_in = !!(xfer->endpointno & UE_DIR_IN); + bool multishort = xfer->flags_int.short_frames_ok; + struct xhci_td *td_last; + int i; - DPRINTF("MFINDEX=0x%08x IST=0x%x\n", x, temp.sc->sc_ist); + td_last = td; + for (i = 0; i < xfer->nframes; i++) { + bool is_last = (i == xfer->nframes - 1); + /* + * Bulk IN: skip CYCLE on the first TRB of non-first frames + * (unless short frames are allowed) so that the host + * controller does not start the next frame before software + * calls xhci_activate_transfer(). + */ + bool step_td = is_in && (i != 0) && !multishort; + struct xhci_td *td_next = is_last ? NULL : td->obj_next; - switch (usbd_get_speed(xfer->xroot->udev)) { - case USB_SPEED_FULL: - shift = 3; - temp.isoc_delta = 8; /* 1ms */ - break; - default: - shift = usbd_xfer_get_fps_shift(xfer); - temp.isoc_delta = 1U << shift; - break; - } + xhci_setup_normal_trbs(&xfer->frbuffers[i], 0, + xfer->frlengths[i], xfer->max_packet_size, td, td_next, + is_in, step_td, is_last); + td_last = td; + td = td->obj_next; + } - /* Compute isochronous scheduling threshold. */ - if (temp.sc->sc_ist & 8) - y = (temp.sc->sc_ist & 7) << 3; - else - y = (temp.sc->sc_ist & 7); + /* + * If force_short_xfer is set and the last frame length is a non-zero + * multiple of the max packet size, the hardware will not generate a + * short packet naturally, so we must append a zero-length TD. + * + * The last regular-frame TD was set up with qwTrb0=0 in its link TRB + * (the placeholder that xhci_transfer_insert would normally overwrite + * for the final TD). Since the ZLP TD is now the true final TD, that + * link TRB must be patched: qwTrb0 must point to the ZLP TD, and + * CHAIN_BIT must be set. Some xHCI controllers refuse to send a ZLP + * if the preceding link TRB does not have CHAIN_BIT set. + */ + if (xfer->flags.force_short_xfer && xfer->nframes > 0) { + uint32_t last_len = xfer->frlengths[xfer->nframes - 1]; - /* Range check the IST. */ - if (y < 8) { - y = 0; - } else if (y > 15) { - DPRINTFN(3, "IST(%d) is too big!\n", temp.sc->sc_ist); + if (last_len > 0 && (last_len % xfer->max_packet_size) == 0) { + xhci_setup_normal_trbs(NULL, 0, 0, + xfer->max_packet_size, td, NULL, is_in, false, + true); /* - * The USB stack minimum isochronous transfer - * size is typically 2x2 ms of payload. If the - * IST makes is above 15 microframes, we have - * an effective scheduling delay of more than - * or equal to 2 milliseconds, which is too - * much. + * Fix the previous TD's link TRB: point to the ZLP TD + * and set CHAIN_BIT. The address fix is necessary + * because xhci_transfer_insert only patches td_last's + * link TRB. The CHAIN_BIT is required because some + * xHCI controllers will not emit a ZLP unless the + * preceding link TRB has CHAIN_BIT set. */ - y = 7; - } else { - /* - * Subtract one millisecond, because the - * generic code adds that to the latency. - */ - y -= 8; + td_last->td_trb[td_last->ntrb].qwTrb0 = + htole64(td->td_self); + td_last->td_trb[td_last->ntrb].dwTrb3 |= htole32( + XHCI_TRB_3_CHAIN_BIT); + usb_pc_cpu_flush(td_last->page_cache); + td_last = td; } + } + return (td_last); +} - if (usbd_xfer_get_isochronous_start_frame( - xfer, x, y, 8, XHCI_MFINDEX_GET(-1), &temp.isoc_frame)) { - /* Start isochronous transfer at specified time. */ - temp.do_isoc_sync = 1; +/* + * Build TRBs for an isochronous transfer. + * + * All isochronous frame data lives in a single contiguous DMA buffer + * (frbuffers[0]); frlengths[x] gives the size of each frame. Each frame + * maps to one xhci_td whose first TRB is of type ISOCH and whose remaining + * TRBs (if data spans multiple pages) are of type NORMAL. + * + * Returns the last TD used. + */ +static struct xhci_td * +xhci_setup_isoc(struct usb_xfer *xfer, struct xhci_td *td) +{ + struct xhci_softc *sc = XHCI_BUS2SC(xfer->xroot->bus); + struct xhci_trb *trb; + struct usb_page_search search; + uint32_t dword, len, cur_len, buf_offset, seg_len, npkt; + uint32_t mfindex, isoc_frame, isoc_delta; + uint8_t mult, tdpc, tbc, tlbpc, shift, ist, y; + int x, i; + bool is_in = !!(xfer->endpointno & UE_DIR_IN); + bool do_isoc_sync = false; + struct xhci_td *td_last; - DPRINTFN(3, "start next=%d\n", temp.isoc_frame); - } + /* Compute burst multiplier (SuperSpeed or USB 2.0 high-bandwidth) */ + mult = xfer->endpoint->ecomp ? + UE_GET_SS_ISO_MULT(xfer->endpoint->ecomp->bmAttributes) : + 0; + if (mult == 0) + mult = (xfer->endpoint->edesc->wMaxPacketSize[1] >> 3) & 3; + if (mult > 2) + mult = 3; + else + mult++; - x = 0; - temp.trb_type = XHCI_TRB_TYPE_ISOCH; + mfindex = XREAD4(sc, runt, XHCI_MFINDEX); + DPRINTF("MFINDEX=0x%08x IST=0x%x\n", mfindex, sc->sc_ist); - } else if (xfer->flags_int.control_xfr) { - /* check if we should prepend a setup message */ - - if (xfer->flags_int.control_hdr) { - temp.len = xfer->frlengths[0]; - temp.pc = xfer->frbuffers + 0; - temp.shortpkt = temp.len ? 1 : 0; - temp.trb_type = XHCI_TRB_TYPE_SETUP_STAGE; - temp.direction = 0; - - /* check for last frame */ - if (xfer->nframes == 1) { - /* no STATUS stage yet, SETUP is last */ - if (xfer->flags_int.control_act) - temp.last_frame = 1; - } + switch (usbd_get_speed(xfer->xroot->udev)) { + case USB_SPEED_FULL: + shift = 3; + isoc_delta = 8; /* 1 ms = 8 microframes */ + break; + default: + shift = usbd_xfer_get_fps_shift(xfer); + isoc_delta = 1U << shift; + break; + } - xhci_setup_generic_chain_sub(&temp); - } - x = 1; - mult = 1; - temp.isoc_delta = 0; - temp.isoc_frame = 0; - temp.trb_type = xfer->flags_int.control_did_data ? - XHCI_TRB_TYPE_NORMAL : XHCI_TRB_TYPE_DATA_STAGE; + /* Compute isochronous scheduling threshold (XHCI 1.2 §4.14.2) */ + ist = sc->sc_ist; + if (ist & 8) + y = (ist & 7) << 3; + else + y = (ist & 7); + if (y < 8) { + y = 0; + } else if (y > 15) { + DPRINTFN(3, "IST(%d) is too big!\n", ist); + /* + * The USB stack minimum isochronous transfer size is typically + * 2x2 ms of payload. An IST above 15 microframes gives a + * scheduling delay >= 2 ms, which is too much. + */ + y = 7; } else { - x = 0; - mult = 1; - temp.isoc_delta = 0; - temp.isoc_frame = 0; - temp.trb_type = XHCI_TRB_TYPE_NORMAL; + /* Subtract one millisecond added by the generic layer */ + y -= 8; } - if (x != xfer->nframes) { - /* set up page_cache pointer */ - temp.pc = xfer->frbuffers + x; - /* set endpoint direction */ - temp.direction = UE_GET_DIR(xfer->endpointno); + if (usbd_xfer_get_isochronous_start_frame(xfer, mfindex, y, 8, + XHCI_MFINDEX_GET(-1), &isoc_frame)) { + /* Synchronise to a specific frame number */ + do_isoc_sync = true; + DPRINTFN(3, "start next=%d\n", isoc_frame); } - while (x != xfer->nframes) { - /* DATA0 / DATA1 message */ - - temp.len = xfer->frlengths[x]; - temp.step_td = ((xfer->endpointno & UE_DIR_IN) && - x != 0 && temp.multishort == 0); - - x++; - - if (x == xfer->nframes) { - if (xfer->flags_int.control_xfr) { - /* no STATUS stage yet, DATA is last */ - if (xfer->flags_int.control_act) - temp.last_frame = 1; - } else { - temp.last_frame = 1; - } - } - if (temp.len == 0) { - /* make sure that we send an USB packet */ - - temp.shortpkt = 0; - - temp.tbc = 0; - temp.tlbpc = mult - 1; - - } else if (xfer->flags_int.isochronous_xfr) { - uint8_t tdpc; - - /* - * Isochronous transfers don't have short - * packet termination: - */ - - temp.shortpkt = 1; - - /* isochronous transfers have a transfer limit */ - - if (temp.len > xfer->max_frame_size) - temp.len = xfer->max_frame_size; + buf_offset = 0; + td_last = td; - /* compute TD packet count */ - tdpc = howmany(temp.len, xfer->max_packet_size); + for (x = 0; x < xfer->nframes; x++) { + bool is_last = (x == xfer->nframes - 1); + struct xhci_td *td_next = is_last ? NULL : td->obj_next; - temp.tbc = howmany(tdpc, mult) - 1; - temp.tlbpc = (tdpc % mult); + len = xfer->frlengths[x]; + if (len > xfer->max_frame_size) + len = xfer->max_frame_size; - if (temp.tlbpc == 0) - temp.tlbpc = mult - 1; - else - temp.tlbpc--; + /* Compute TBC and TLBPC (XHCI 1.2 §4.11.2.3) */ + if (len == 0) { + tbc = 0; + tlbpc = mult - 1; } else { - /* regular data transfer */ - - temp.shortpkt = xfer->flags.force_short_xfer ? 0 : 1; + tdpc = howmany(len, xfer->max_packet_size); + tbc = howmany(tdpc, mult) - 1; + tlbpc = tdpc % mult; + if (tlbpc == 0) + tlbpc = mult - 1; + else + tlbpc--; } - xhci_setup_generic_chain_sub(&temp); + cur_len = 0; + i = 0; - if (xfer->flags_int.isochronous_xfr) { - temp.offset += xfer->frlengths[x - 1]; - temp.isoc_frame += temp.isoc_delta; + if (len == 0) { + /* Zero-length isochronous frame */ + trb = &td->td_trb[0]; + trb->qwTrb0 = 0; + trb->dwTrb2 = htole32( + XHCI_TRB_2_BYTES_SET(0) | XHCI_TRB_2_TDSZ_SET(0)); + dword = XHCI_TRB_3_CYCLE_BIT | XHCI_TRB_3_IOC_BIT | + XHCI_TRB_3_TBC_SET(tbc) | + XHCI_TRB_3_TLBPC_SET(tlbpc) | + XHCI_TRB_3_TYPE_SET(XHCI_TRB_TYPE_ISOCH); + if (do_isoc_sync) { + do_isoc_sync = false; + dword |= XHCI_TRB_3_FRID_SET(isoc_frame / 8); + } else { + dword |= XHCI_TRB_3_ISO_SIA_BIT; + } + if (is_in) + dword |= XHCI_TRB_3_ISP_BIT; + trb->dwTrb3 = htole32(dword); *** 155 LINES SKIPPED *** From nobody Sat Jul 25 02:02:12 2026 X-Original-To: dev-commits-src-main@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 4h6Sm52K4bz6lfd1 for ; Sat, 25 Jul 2026 02:02:13 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6Sm51M4vz3RhP for ; Sat, 25 Jul 2026 02:02:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784944933; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=dCSr0jjaEBi8LQZuxfzLwEAYHsGsn+5WpUD4qqQzCN0=; b=Xe8VcxaY1akAZqCLn/3buKnNt10NBQASvg+sM6bUcitzZvqSOIhyPh9Fx1zVKMQ4rK5yQJ LhzdYqxOc7+LWMUqWSYSgAJWgcyN8IwYbkWoS2y9n9l63foTL53+4l+tvvnwshIJU9GhHr Sez8ailVIr9waJHzwXHhXD7bTtwXyyQFxD5BWSZoN9KBiFrjxiwmCMaYYneYXU8S3LSVN7 Bbo9cFGh3hBrT6CVP9CVgB7TyLujSHHmOUteqv4FAEZSnDs5mz79fBttz3T1GdgwnWXN46 WuCztbYteECVD05HliUdnO2GSwOFLU/pV+iK7NgGad0grEU/HkmcMVh/b6sXog== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784944933; a=rsa-sha256; cv=none; b=m9HBmHTWDF6KG/A+X4tQMqTlZileRI3IQ+SbVYfP4sPU3Jpnr42WCC0YLQSZ/f/0J0uJYQ fmWt2AhxMU7CjcX2XigGxqTsE5qsB326xTqqjRX/yB1A5pDIt/QikA+TakIlUq/Y7hNkvy J5cEZsqSLEN0aoZ2VT2WBZ5L2F39NhLCzppD0Ln2JcfNtNdNMKUb5tp09Z6OC3y7otu7NC Qe5dL9yFwh9zfA8MWEVJwjVmIEWQnjD36gzGT7E8KB09WQU60EShKVvn4Nl+YOhIPZSGNR K6p9zrdAqt7vYwIkt+CXi1eqt4DksGgicndJq7F6q32fDvlUEZIMwyvp4b7nCg== 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=1784944933; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=dCSr0jjaEBi8LQZuxfzLwEAYHsGsn+5WpUD4qqQzCN0=; b=UmeJ14Ol5VIF4rX4XMy6MCD6EkXagpb+a5sHTrI8avx8+wwMmgdzEMrJ4b9BXD4rkX7yVJ iqxit4e4lM59anBO72ploCeid5jnVSVCq3uwWuPq59R2OYG7CHrcppw+Jb/+i1reK4TFBs vJU8DRo6v1b+afy0E8wmvDDV4+kwJZsGe1yyey+7ZBYGkEJzA4nss4XgrJogCkpLVA385C KeYvxltL9o+bH0Xi0fY/fn2fLZFXQpG9aKE/+1Zgh96U1JXsHiXn+jcXk5qGxzo6oV+iIK mId15sDmHTRWp3JHuaBRSdFXNCqdk/NInIUCJg4T1hszXBxH21x9xPQhUJnNHg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6Sm502z9z2NW for ; Sat, 25 Jul 2026 02:02:13 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 38b06 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 25 Jul 2026 02:02:12 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Abdelkader Boudih From: Adrian Chadd Subject: git: 3fbffbcbec88 - main - ietp: guard iicbus_get_addr with devclass check List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 3fbffbcbec88932d7c7b024aca5a1e26a36f13a4 Auto-Submitted: auto-generated Date: Sat, 25 Jul 2026 02:02:12 +0000 Message-Id: <6a641924.38b06.1aef7f36@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=3fbffbcbec88932d7c7b024aca5a1e26a36f13a4 commit 3fbffbcbec88932d7c7b024aca5a1e26a36f13a4 Author: Abdelkader Boudih AuthorDate: 2026-07-25 01:28:44 +0000 Commit: Adrian Chadd CommitDate: 2026-07-25 02:01:54 +0000 ietp: guard iicbus_get_addr with devclass check When a USB HID device triggers identify, the grandparent is usbhid on a USB hub. Calling iicbus_get_addr() on a non-iicbus device hits a KASSERT panic. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58432 --- sys/dev/hid/ietp.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sys/dev/hid/ietp.c b/sys/dev/hid/ietp.c index a9d0295fb121..6a31423f61d8 100644 --- a/sys/dev/hid/ietp.c +++ b/sys/dev/hid/ietp.c @@ -450,13 +450,10 @@ ietp_iic_identify(driver_t *driver, device_t parent) { device_t iichid = device_get_parent(parent); static const uint16_t reg = IETP_PATTERN; - uint16_t addr = iicbus_get_addr(iichid) << 1; + uint16_t addr; uint8_t resp[2]; uint8_t cmd[2] = { reg & 0xff, (reg >> 8) & 0xff }; - struct iic_msg msgs[2] = { - { addr, IIC_M_WR | IIC_M_NOSTOP, sizeof(cmd), cmd }, - { addr, IIC_M_RD, sizeof(resp), resp }, - }; + struct iic_msg msgs[2]; struct iic_rdwr_data ird = { msgs, nitems(msgs) }; uint8_t pattern; @@ -466,6 +463,10 @@ ietp_iic_identify(driver_t *driver, device_t parent) if (device_get_devclass(iichid) != devclass_find("iichid")) return; + addr = iicbus_get_addr(iichid) << 1; + msgs[0] = (struct iic_msg){ addr, IIC_M_WR | IIC_M_NOSTOP, sizeof(cmd), cmd }; + msgs[1] = (struct iic_msg){ addr, IIC_M_RD, sizeof(resp), resp }; + DPRINTF("Read reg 0x%04x with size %zu\n", reg, sizeof(resp)); if (hid_ioctl(parent, I2CRDWR, (uintptr_t)&ird) != 0) From nobody Sat Jul 25 03:17:11 2026 X-Original-To: dev-commits-src-main@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 4h6VQb6gsjz6lmNP for ; Sat, 25 Jul 2026 03:17:11 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6VQb5wPkz3YPJ for ; Sat, 25 Jul 2026 03:17:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784949431; 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=POWth8xZLlKta4QS7aVH+WaqHIYkXPhJgw4fIj9g4I4=; b=Y+AG/ytQJKd0f8smvvim1hYAk4N+aEA12jdS7DIT7UOROhz2I6T3Z6/7FWNES9u1KE7jad gpXMlW0vHKGdHwD9GSH4IfmDYOw62dBI5ryfY1mVjF+wNTN9TvOjFMReL9ZEkKTA2vhH7L LE++mHQtMiGiWmZLCVYUoSI1qdS2Q+7IwAd5r+T1Mer6+n8mw/VHZkBdd4ELPP4OfzN0jG 0n3El4IShsba5/2WicFNB7CM7ykJ9y2drvxugbjUoe2V7PUAIBr5mmmnHECpyU5tGt9+RL 5ThW6SpNIr4YJDkf/7JDviqEfmP41JwNZh97eUGgcjfnCzu93ZOOIxfyb1d2ww== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784949431; a=rsa-sha256; cv=none; b=yy9XeXCIk/C/c657aDQB0z+EkIW3LlG7r0UTslahkxiZawD907GmZFK6y/5d5sIarkg8TU fr6BJDQHODtXOG7xCzQ3yAM5jtz+S6coZR3aj66YXyGtrfr+IY5aUKtp/JDDej747NF2nA 7X6lMcbUv3aJ+sWc1StewMChwKw3pDQq1Mr265YmpFXDc6wUX+0s8OybTyBlaE7v8GjH7V bq65Yv33lQMwqXvKp4gqRY7RScZZSceLAgYBkfeqddiasiVIsgFkCW8i+cQoX99h1KM4OE qeJKX1SfP/tzOZmp7n5M+ea/8ERYtVV+XJblE0hcTeqLHAnASMPeDdd9c6J10g== 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=1784949431; 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=POWth8xZLlKta4QS7aVH+WaqHIYkXPhJgw4fIj9g4I4=; b=his4M/Q47IVQCteTKlOZ3NZ1lnG1dMu7bfgPZxe4yQOP8+sGyAetu3ilqfja1fH95W/Bq/ NtFZ5pGbVADcOnry6yi4xvGRuW8ST28bTcQEuJROUczHtpK8BCwHA/H+EvI6VEld9YMg2+ M0lrlNeXh2LzcPY7DGJO3mgIK2FsoyrC9vXxJQ04LxVZ15v3qaGQUwob1hTa6W74u+7+ps tr43QQekbB9eYBI6be/nzvPk/Q0it+3FxNJW0ew0B8iNLXoRkJtzdufWMoNDQWiUuREfOt FD+DwxMWX5aENr6Y1ZPlYkeqOjt8f5+1app0/mK8SiNmXu5xngX2W+bRaC0uIQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6VQb4cClz4v9 for ; Sat, 25 Jul 2026 03:17:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3d7cc by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 25 Jul 2026 03:17:11 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: ShengYi Hung Subject: git: 2cf2d955635a - main - usb: preserve error when doing request List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: aokblast X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2cf2d955635abb546e57296e06815dd71f8c16ad Auto-Submitted: auto-generated Date: Sat, 25 Jul 2026 03:17:11 +0000 Message-Id: <6a642ab7.3d7cc.34eedc2e@gitrepo.freebsd.org> The branch main has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=2cf2d955635abb546e57296e06815dd71f8c16ad commit 2cf2d955635abb546e57296e06815dd71f8c16ad Author: ShengYi Hung AuthorDate: 2025-08-29 17:23:12 +0000 Commit: ShengYi Hung CommitDate: 2026-07-25 03:16:59 +0000 usb: preserve error when doing request Currently, USB request not distinguished different error and always return EIO. However, some error are recoverable or ignorable in userspace. Therefore, we preserve the meaning of different error to userspace then allow userspace to decide how to use the return error. Reviewed by: adrian Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D52244 --- lib/libusb/libusb10_io.c | 47 ++++++++++++++++++++++++++++++++++++++------ lib/libusb/libusb20_ugen20.c | 45 +++++++++++++++++++++++++++++++++++++++++- sys/dev/usb/usb_generic.c | 46 +++++++++++++++++++++++++++++++++++++++---- 3 files changed, 127 insertions(+), 11 deletions(-) diff --git a/lib/libusb/libusb10_io.c b/lib/libusb/libusb10_io.c index 2047712e9e39..bb4680daebdb 100644 --- a/lib/libusb/libusb10_io.c +++ b/lib/libusb/libusb10_io.c @@ -28,6 +28,7 @@ #ifdef LIBUSB_GLOBAL_INCLUDE_FILE #include LIBUSB_GLOBAL_INCLUDE_FILE #else +#include #include #include #include @@ -472,6 +473,44 @@ done: /* Synchronous device I/O */ +static int +libusb10_convert_libusb20_error(int err) +{ + /* LIBUSB20_ERROR_* values are always non-positive */ + assert(err <= 0); + + switch (err) { + case LIBUSB20_SUCCESS: + return (0); + case LIBUSB20_ERROR_IO: + return (LIBUSB_ERROR_IO); + case LIBUSB20_ERROR_INVALID_PARAM: + return (LIBUSB_ERROR_INVALID_PARAM); + case LIBUSB20_ERROR_ACCESS: + return (LIBUSB_ERROR_ACCESS); + case LIBUSB20_ERROR_NO_DEVICE: + return (LIBUSB_ERROR_NO_DEVICE); + case LIBUSB20_ERROR_NOT_FOUND: + return (LIBUSB_ERROR_NOT_FOUND); + case LIBUSB20_ERROR_BUSY: + return (LIBUSB_ERROR_BUSY); + case LIBUSB20_ERROR_TIMEOUT: + return (LIBUSB_ERROR_TIMEOUT); + case LIBUSB20_ERROR_OVERFLOW: + return (LIBUSB_ERROR_OVERFLOW); + case LIBUSB20_ERROR_PIPE: + return (LIBUSB_ERROR_PIPE); + case LIBUSB20_ERROR_INTERRUPTED: + return (LIBUSB_ERROR_INTERRUPTED); + case LIBUSB20_ERROR_NO_MEM: + return (LIBUSB_ERROR_NO_MEM); + case LIBUSB20_ERROR_NOT_SUPPORTED: + return (LIBUSB_ERROR_NOT_SUPPORTED); + default: + return (LIBUSB_ERROR_OTHER); + } +} + int libusb_control_transfer(libusb_device_handle *devh, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, @@ -498,12 +537,8 @@ libusb_control_transfer(libusb_device_handle *devh, err = libusb20_dev_request_sync(devh, &req, data, &actlen, timeout, 0); - if (err == LIBUSB20_ERROR_PIPE) - return (LIBUSB_ERROR_PIPE); - else if (err == LIBUSB20_ERROR_TIMEOUT) - return (LIBUSB_ERROR_TIMEOUT); - else if (err) - return (LIBUSB_ERROR_NO_DEVICE); + if (err) + return (libusb10_convert_libusb20_error(err)); return (actlen); } diff --git a/lib/libusb/libusb20_ugen20.c b/lib/libusb/libusb20_ugen20.c index 32c8d53cd611..43d870fbe112 100644 --- a/lib/libusb/libusb20_ugen20.c +++ b/lib/libusb/libusb20_ugen20.c @@ -97,6 +97,49 @@ static const struct libusb20_device_methods libusb20_ugen20_device_methods = { LIBUSB20_DEVICE(LIBUSB20_DECLARE, ugen20) }; +static int +errno_to_libusb_error(int uerr) +{ + switch (uerr) { + case 0: + return (LIBUSB20_SUCCESS); + case EIO: + case ERANGE: + return (LIBUSB20_ERROR_IO); + case EINVAL: + case EFAULT: + case ENOBUFS: + return (LIBUSB20_ERROR_INVALID_PARAM); + case EACCES: + case EPERM: + return (LIBUSB20_ERROR_ACCESS); + case ENXIO: + case ENODEV: + return (LIBUSB20_ERROR_NO_DEVICE); + case ENOENT: + return (LIBUSB20_ERROR_NOT_FOUND); + case EBUSY: + case EALREADY: + case EADDRINUSE: + return (LIBUSB20_ERROR_BUSY); + case ETIMEDOUT: + return (LIBUSB20_ERROR_TIMEOUT); + case EMSGSIZE: + return (LIBUSB20_ERROR_OVERFLOW); + case EPIPE: + return (LIBUSB20_ERROR_PIPE); + case EINTR: + case ECANCELED: + return (LIBUSB20_ERROR_INTERRUPTED); + case ENOMEM: + return (LIBUSB20_ERROR_NO_MEM); + case ENOTSUP: + return (LIBUSB20_ERROR_NOT_SUPPORTED); + default: + return (LIBUSB20_ERROR_OTHER); + } +} + static const char * ugen20_get_backend_name(void) { @@ -746,7 +789,7 @@ ugen20_do_request_sync(struct libusb20_device *pdev, /* ignore */ } if (ioctl(pdev->file_ctrl, IOUSB(USB_DO_REQUEST), &req)) { - return (LIBUSB20_ERROR_OTHER); + return (errno_to_libusb_error(errno)); } if (pactlen) { /* get actual length */ diff --git a/sys/dev/usb/usb_generic.c b/sys/dev/usb/usb_generic.c index c564585acd5a..fb2b4ce6dc1b 100644 --- a/sys/dev/usb/usb_generic.c +++ b/sys/dev/usb/usb_generic.c @@ -143,6 +143,38 @@ SYSCTL_INT(_hw_usb_ugen, OID_AUTO, debug, CTLFLAG_RWTUN, &ugen_debug, 0, "Debug level"); #endif +static const int usb_error_to_errno[USB_ERR_MAX] = { + [USB_ERR_NORMAL_COMPLETION] = 0, + [USB_ERR_PENDING_REQUESTS] = EALREADY, + [USB_ERR_NOT_STARTED] = EINVAL, + [USB_ERR_INVAL] = EINVAL, + [USB_ERR_NOMEM] = ENOMEM, + [USB_ERR_CANCELLED] = ECANCELED, + [USB_ERR_BAD_ADDRESS] = EFAULT, + [USB_ERR_BAD_BUFSIZE] = ENOBUFS, + [USB_ERR_BAD_FLAG] = EINVAL, + [USB_ERR_NO_CALLBACK] = EINVAL, + [USB_ERR_IN_USE] = EADDRINUSE, + [USB_ERR_NO_ADDR] = EADDRNOTAVAIL, + [USB_ERR_NO_PIPE] = ENOENT, + [USB_ERR_ZERO_NFRAMES] = EINVAL, + [USB_ERR_ZERO_MAXP] = EINVAL, + [USB_ERR_SET_ADDR_FAILED] = EADDRNOTAVAIL, + [USB_ERR_NO_POWER] = ENXIO, + [USB_ERR_TOO_DEEP] = EINVAL, + [USB_ERR_IOERROR] = EIO, + [USB_ERR_NOT_CONFIGURED] = ENXIO, + [USB_ERR_TIMEOUT] = ETIMEDOUT, + [USB_ERR_SHORT_XFER] = ERANGE, + [USB_ERR_STALLED] = EPIPE, + [USB_ERR_INTERRUPTED] = EINTR, + [USB_ERR_DMA_LOAD_FAILED] = EIO, + [USB_ERR_BAD_CONTEXT] = EBADMSG, + [USB_ERR_NO_ROOT_HUB] = EINVAL, + [USB_ERR_NO_INTR_THREAD] = EIO, + [USB_ERR_NOT_LOCKED] = EINVAL, +}; + /* prototypes */ static int @@ -861,10 +893,16 @@ ugen_do_request(struct usb_fifo *f, struct usb_ctl_request *ur) ur->ucr_actlen = actlen; - if (error) { - error = EIO; - } - return (error); + /* + * Fall back to EIO for USB errors without a table entry, so + * that an unmapped error cannot be reported as success. + */ + if (error < 0 || error >= USB_ERR_MAX || + (error != USB_ERR_NORMAL_COMPLETION && + usb_error_to_errno[error] == 0)) + return (EIO); + + return (usb_error_to_errno[error]); } #ifdef COMPAT_FREEBSD32 From nobody Sat Jul 25 12:44:43 2026 X-Original-To: dev-commits-src-main@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 4h6l1S0NB5z6lLph for ; Sat, 25 Jul 2026 12:44:44 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6l1R6ZTMz3hB7 for ; Sat, 25 Jul 2026 12:44:43 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784983484; 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=uZ8pVHcePL0r+FUXH0hNeAx22JX4R1yRTIsbtbWalh4=; b=pEW88gYokt6jjeIL9poCaKy/1gZnohBPiDpIfAMtr68Lnp+/eEoXIKA1CWj/oLL3qoHpYd ukZe5OD5qrkSsLSH7YuF0Je639JpnF+Kyf27oVLe8QViShC2GHO6g2lzksbvXxjyyD7tWw mfPzhc/5FB/cPP+NUp6G1ed1gC8kgcIZvZVSSEmAmv8vfdMS09b52e+xv83gfG5BCUOCH6 p850IKVFeoK3flet/vABCxdk5ShOh8bMpXJmXunazkv52WgmoXuE3+maNtbcfvTll/C5m6 ZBGlzotznPM5dgK0m0DXi288neUb2P14tOSfe9dp1NcNA9OoDvQ+NYjDt7vW4g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784983484; a=rsa-sha256; cv=none; b=EKhOQyGjZwQFSX0HTujloaKbpimHvqIyjAMF2AxctT6Zx9Xyr9qpATrqVlDYRbdkJhTvBG RfLFSuyvLdLRDPQ9NaAAgSMEt4DdQEwI1MNqcVQsxN2vvvqXanZiejyc9ryedDY2GsXcSD cToBiQ6zKO+oEwzjUdVIzQjz/gMZzPcukgkpdT5DagJ+FgkElRrLFz4ak/MHYkNQHea+zV BqyfD5Ho8Lc4HNLRuCj8GZIn8olHUpKuZLb4Fp4uF1ozfkMKHJbcLsvCjEybyyaLHCCy1Q 5jr17dBQRdVzhvVmi1ydHOgdDYCj5BBR5Wz25Qrt2rvNg2Xo6Uj04AanBDKegg== 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=1784983484; 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=uZ8pVHcePL0r+FUXH0hNeAx22JX4R1yRTIsbtbWalh4=; b=H3+h1KjbVGkOdIX70eo1jeOhARG2ltIDmbAczIeJu3zN1MLDRPG6i7Q7IYV8/R7o8X5yi2 uMkmXEbZmPNkzN05je+aYET3rzP29qP1eoh45rzvSR/RuIgODu10wPAzNT6LSX6EqKjdQ+ ZBNR2MTj08rcASfw8zcxQpGsKAIM8GvlPlqg3Voup/4Sf7/bNmkAcvT+xw8NiRZnT9fCSx MNJ0Ko5YSi9OVKn+jyXHXWs6TRYSvkcpSHi1FC9aZKLbWHtMqBWE4pmGuaXOpe/0AWvBP/ W4tzdFR35oQiEO/iH8io9UINtvUMFrWfA2H55nFxV2lOP/4u3YkxV3Vk+X+U3A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6l1R5PyFzdYc for ; Sat, 25 Jul 2026 12:44:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 248ac by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 25 Jul 2026 12:44:43 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 5922e9d7e72b - main - pwait: Don't use init as a target List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5922e9d7e72bfa8a85b0f37bcfd1a8b5d866ec3b Auto-Submitted: auto-generated Date: Sat, 25 Jul 2026 12:44:43 +0000 Message-Id: <6a64afbb.248ac.412a55c0@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=5922e9d7e72bfa8a85b0f37bcfd1a8b5d866ec3b commit 5922e9d7e72bfa8a85b0f37bcfd1a8b5d866ec3b Author: Dag-Erling Smørgrav AuthorDate: 2026-07-25 12:44:35 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-07-25 12:44:35 +0000 pwait: Don't use init as a target The time_unit test case uses PID 1 as a target for pwait. This doesn't work in a jail. Since all we need is a process that we know won't die while the test is running, we may as well use ourselves. MFC after: 1 week Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. Reviewed by: ngie Differential Revision: https://reviews.freebsd.org/D58418 --- bin/pwait/tests/pwait_test.sh | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/bin/pwait/tests/pwait_test.sh b/bin/pwait/tests/pwait_test.sh index d31ca21cff93..0d4f53d2941d 100644 --- a/bin/pwait/tests/pwait_test.sh +++ b/bin/pwait/tests/pwait_test.sh @@ -56,31 +56,29 @@ time_unit_head() time_unit_body() { - init=1 - atf_check \ -o empty \ -e inline:"pwait: timeout unit\n" \ -s exit:65 \ - timeout --preserve-status 2 pwait -t 1d $init + timeout --preserve-status 2 pwait -t 1d $$ atf_check \ -o empty \ -e inline:"pwait: timeout unit\n" \ -s exit:65 \ - timeout --preserve-status 2 pwait -t 1d $init + timeout --preserve-status 2 pwait -t 1d $$ atf_check \ -o empty \ -e inline:"pwait: timeout value\n" \ -s exit:65 \ - timeout --preserve-status 2 pwait -t -1 $init + timeout --preserve-status 2 pwait -t -1 $$ atf_check \ -o empty \ -e inline:"pwait: timeout value\n" \ -s exit:65 \ - timeout --preserve-status 2 pwait -t 100000001 $init + timeout --preserve-status 2 pwait -t 100000001 $$ # These long duration cases are expected to timeout from the # timeout utility rather than pwait -t. @@ -88,37 +86,37 @@ time_unit_body() -o empty \ -e empty \ -s signal:15 \ - timeout --preserve-status 2 pwait -t 100000000 $init + timeout --preserve-status 2 pwait -t 100000000 $$ atf_check \ -o empty \ -e empty \ -s signal:15 \ - timeout --preserve-status 2 pwait -t 1h $init + timeout --preserve-status 2 pwait -t 1h $$ atf_check \ -o empty \ -e empty \ -s signal:15 \ - timeout --preserve-status 2 pwait -t 1.5h $init + timeout --preserve-status 2 pwait -t 1.5h $$ atf_check \ -o empty \ -e empty \ -s signal:15 \ - timeout --preserve-status 2 pwait -t 1m $init + timeout --preserve-status 2 pwait -t 1m $$ atf_check \ -o empty \ -e empty \ -s signal:15 \ - timeout --preserve-status 2 pwait -t 1.5m $init + timeout --preserve-status 2 pwait -t 1.5m $$ atf_check \ -o empty \ -e empty \ -s signal:15 \ - timeout --preserve-status 2 pwait -t 0 $init + timeout --preserve-status 2 pwait -t 0 $$ # The rest are fast enough that pwait -t is expected to trigger # the timeout. @@ -126,31 +124,31 @@ time_unit_body() -o empty \ -e empty \ -s exit:124 \ - timeout --preserve-status 2 pwait -t 1s $init + timeout --preserve-status 2 pwait -t 1s $$ atf_check \ -o empty \ -e empty \ -s exit:124 \ - timeout --preserve-status 2 pwait -t 1.5s $init + timeout --preserve-status 2 pwait -t 1.5s $$ atf_check \ -o empty \ -e empty \ -s exit:124 \ - timeout --preserve-status 2 pwait -t 1 $init + timeout --preserve-status 2 pwait -t 1 $$ atf_check \ -o empty \ -e empty \ -s exit:124 \ - timeout --preserve-status 2 pwait -t 1.5 $init + timeout --preserve-status 2 pwait -t 1.5 $$ atf_check \ -o empty \ -e empty \ -s exit:124 \ - timeout --preserve-status 2 pwait -t 0.5 $init + timeout --preserve-status 2 pwait -t 0.5 $$ } atf_test_case timeout_trigger_timeout From nobody Sat Jul 25 13:26:59 2026 X-Original-To: dev-commits-src-main@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 4h6lyC22Ktz6lQHD for ; Sat, 25 Jul 2026 13:26:59 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6lyC1YH7z3vh9 for ; Sat, 25 Jul 2026 13:26:59 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784986019; 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=r30U4SGLr2piIlFGmIQIyr5TgmofxTZfUYz16JDPLlY=; b=IrDwzujvoFdN+KkUfgI+atBG0UL8UnLjU+N6z7GZTIUdxrUkewuuzjb/pfndmOddjBHsAB HmAsPSoHqJoC2FsYleorsLV1YVQEVe4O0dEkqCYxNIaz7qGlTq8T+QoDDM9xNk3ZKijzwB U0PrPqJqC03NWg73pWyUOcv0V0Ui9nxdDHRIyy/+SdJMl/7IjAGfAPqfKEABt12ue9y8Hi ke1p3X8nyk3A/2RiFyH4Br3Jf877fHegt6jrN61P3785JW4TGP8/ymTXEFrdVpcSF5hL7p AvDdqAomhUqYYFbJ7Qrs7RX7RayajdlZ+CyM0VzatYd+SgxI59f/Sjd+zKR/8A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784986019; a=rsa-sha256; cv=none; b=O3XOlVKY+K+4WcL4Ud4zpGONIXub+bHIS2KOnmVkll3fUQdh6CD6+cn5f8ikisyoq53GVO OVczQaSiVB43lsgvWvCl+WJwkM8Ley76lhKT1s1f9kcDbqt4rMKH2P2iShi4dDj6tPHIIF 3CMZvKHQyGeuycyjmbjwIsfvO2LHU+uAXNDjyE3NdyFsL6JdXBNjdUj32xHnncfEn7C2IQ jXOM3R9YZxgR0CGDaBo3oRZ8ErEPnh7tz0aKczq0Z4j7kocwLtKTzU1soMiOOHCvVld5Pq a4orK51gHMf2N260BU/CNMv+3abcCfGNCrBeFej6Dai4aI8j1wlCxxd6iTRVJw== 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=1784986019; 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=r30U4SGLr2piIlFGmIQIyr5TgmofxTZfUYz16JDPLlY=; b=NVixv0/wE/64PavlkXLMF5xBzL2WfhxbEby3WYFOK10ihHZI65WbGUxeSSwjeld/d5f6SR Nd78DTWVJUBeNhHVxstweIwx6nNSN5gCtT+imiBPOht4EU2fFGUf+xCcHzoNlt63kZQXp0 EyfABaOV0kArWSG71+sUDgR+T3mI/J9bOA93yJnlroAyJg5ju0tMferD1OIeYdBjIbMGI5 QRP/vlUYlWpOLnJKC8TWCq6WztcSjoBqKxcNxsHB0v4EjYiUtKaazVQEUIKN4o2iJV/LmF wqziyXTCGtGQ9ZcNWv8ijJWqjsDbJS2isRe+XVEhE8PCW4EpbnMZ/H8ZmCOBKw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6lyC0BVFzf6m for ; Sat, 25 Jul 2026 13:26:59 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 306a6 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 25 Jul 2026 13:26:59 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: ShengYi Hung Subject: git: b78f8800a7b0 - main - x86/specialreg: Add MSR_AMD_CPUID01 MSR List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: aokblast X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b78f8800a7b07f5b0eb0eafabcfa90019b795288 Auto-Submitted: auto-generated Date: Sat, 25 Jul 2026 13:26:59 +0000 Message-Id: <6a64b9a3.306a6.3fbdaf8f@gitrepo.freebsd.org> The branch main has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=b78f8800a7b07f5b0eb0eafabcfa90019b795288 commit b78f8800a7b07f5b0eb0eafabcfa90019b795288 Author: ShengYi Hung AuthorDate: 2026-07-25 13:24:59 +0000 Commit: ShengYi Hung CommitDate: 2026-07-25 13:26:41 +0000 x86/specialreg: Add MSR_AMD_CPUID01 MSR Reviewed by: markj MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D56311 --- sys/x86/include/specialreg.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/x86/include/specialreg.h b/sys/x86/include/specialreg.h index 66ae3ed581f4..f5ca0b8415bb 100644 --- a/sys/x86/include/specialreg.h +++ b/sys/x86/include/specialreg.h @@ -1273,6 +1273,7 @@ #define MSR_VM_CR 0xc0010114 /* SVM: feature control */ #define MSR_VM_HSAVE_PA 0xc0010117 /* SVM: host save area address */ #define MSR_AMD_CPUID07 0xc0011002 /* CPUID 07 %ebx override */ +#define MSR_AMD_CPUID01 0xc0011004 /* CPUID 01 %ecx override */ #define MSR_EXTFEATURES 0xc0011005 /* Extended CPUID Features override */ #define MSR_LS_CFG 0xc0011020 #define MSR_IC_CFG 0xc0011021 /* Instruction Cache Configuration */ From nobody Sat Jul 25 15:42:00 2026 X-Original-To: dev-commits-src-main@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 4h6py10zpyz6lcWZ for ; Sat, 25 Jul 2026 15:42:01 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6py10QtQz45p3 for ; Sat, 25 Jul 2026 15:42:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784994121; 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=SbzThZUGSVU5bPJ7j2S+83weIvqsoV+u4hhxvD3vBPc=; b=XR6S7ubifx6a8+t7mO7OkEl8gTNlZyzNm0rxD9FtR/TkNBgb/YiWP2yVRKnL9HXdmj2vve FZtkFfY2oSnkXA7SM5E1tkPwkShGfuBpvsNE/8dAJh2H0VKxmiqXQ8ZkkLgkIiyww8fea6 a76k22ebZ/mELz1okUpxpwPORe8Ee4/hA5gzCz247UKF6vPKmNIhFA/fu9klZzwb2jIR4Q kzLxxImIiWgpLJqqn34svFttGG4KkGJFThjhhPRUyVzIR9Tg+vZkhImagI87ERElMBzpHP B4xbiWbJR6CxV5Rco8LM0QO9WGQS/5tBZ8+aSeTKZsFEjxS0at4iJe8rhuS2dQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784994121; a=rsa-sha256; cv=none; b=jlg/6WEysJofCBmVrfjVS78t6KCypZjB924aTlTZdOVGNUypqk8kU7Y5Drb/Cp2QVcGWHN m1GUqc611xHt+4StKTh2SyiuD4a16PyXqTZexlN8hXKfg8XCaYMiM9JfpzuESt+6f9da2U z61Brs29uYVbjdO54w6uSPVqHbgeA5BUD2jczIxSnrB0iYkf1N9AExZLzyzrwqm7cmXWwe yvtl/sgFzX4NbFd+H+FkXN4Oskjx2GuAR6xvS7jfZ57/EnHGQD6joKmZJM/KHJ4DlPBh+c 6W33uHcJauQmwXbyRyo2Ug+EFMUShA5Za3H3zXNXeCgwFi/HYGlaz93K5AcTWA== 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=1784994121; 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=SbzThZUGSVU5bPJ7j2S+83weIvqsoV+u4hhxvD3vBPc=; b=K6R8N/z+M9AwSe9vIjG/AFplOHmDRICd0rr+uzDpUN6RHzGbZwRhJxyyP7z05VtD9XWH7Q 7+jpN4PbdbeHQgL9KyVyDMBzY38/tPSh0rIl/qvxxBNdqQNc7Rj/1BMFpIY51Hq64/pU5Z enxN/Gzarive9D4TgSUr+Db0jAXnrcKGN42UGZWYXW7m5KtCNALKfrqNEiHB4nVfVjfA8B aWc0rYKc5BFY2Utt8t6sTsTLsrEclaf+YfquL1hRD8mlgLsWVwHZ2HQObXFzkLRNAv5SZa pwWyvJV/aln2wETnxRKkvg8hi6OjLzLfDBddrpoBDYo+alovgXJg5IA6ljbbjQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6py068vzzhwH for ; Sat, 25 Jul 2026 15:42:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3e873 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 25 Jul 2026 15:42:00 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: ShengYi Hung Subject: git: 340c6aff6736 - main - libusb: Add LIBUSB_DT_SUPERSPEED_HUB List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: aokblast X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 340c6aff67367aaee190e48dc8834a8881a84127 Auto-Submitted: auto-generated Date: Sat, 25 Jul 2026 15:42:00 +0000 Message-Id: <6a64d948.3e873.48ef8a75@gitrepo.freebsd.org> The branch main has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=340c6aff67367aaee190e48dc8834a8881a84127 commit 340c6aff67367aaee190e48dc8834a8881a84127 Author: ShengYi Hung AuthorDate: 2026-07-25 15:38:42 +0000 Commit: ShengYi Hung CommitDate: 2026-07-25 15:41:20 +0000 libusb: Add LIBUSB_DT_SUPERSPEED_HUB Sponsored by: The FreeBSD Foundation --- lib/libusb/libusb.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/libusb/libusb.h b/lib/libusb/libusb.h index 1cf860cbb8ab..006b023c65e6 100644 --- a/lib/libusb/libusb.h +++ b/lib/libusb/libusb.h @@ -89,6 +89,7 @@ enum libusb_descriptor_type { LIBUSB_DT_HUB = 0x29, LIBUSB_DT_BOS = 0x0f, LIBUSB_DT_DEVICE_CAPABILITY = 0x10, + LIBUSB_DT_SUPERSPEED_HUB = 0x2a, LIBUSB_DT_SS_ENDPOINT_COMPANION = 0x30, }; From nobody Sat Jul 25 16:05:48 2026 X-Original-To: dev-commits-src-main@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 4h6qTT2Ky6z6lfHX for ; Sat, 25 Jul 2026 16:05:49 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6qTT1hTvz4812 for ; Sat, 25 Jul 2026 16:05:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784995549; 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=E6qBDQaYL0FGQo1O6bCGkVr0COdIM3eQzAq+cMB3+CA=; b=FAWoza63ZYg4byN9GSAy22b4LBzg4inRf8Fu+TmfPNJ9wYGLO+LWWkyMTUyhRbnwtmJiV1 bq0LUiFeopPfBK64AC4Xfdg9VWFgNP6DAn1WOgX3xn7S7kAHc+IL/VYwxsYuAabLtatpof +7Loax5TM9fsGoNIkvWIb4t6lwUOkvm4jd3filJov0TU0HLeAxnW7Q/2JEqJBZoLftb7gB FTQ2uXXEJeNrf8xb9y7b4HQxKP+8Nuh89lDv8E8Wtf8iDDbhGNCSioWBL1aMZfj00qrzaB hIOTFubvsph/x8H0dFpGHpdoroSRy8hWMow0UHUw1pZTqQsMEk4mBYuTRaaTsA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784995549; a=rsa-sha256; cv=none; b=bu1pdJJ5jkqDnVNhhbAmZCcsOKs/hVhZegZRUIHJIxHRzZiwhkMwQBna2YZpoTdvhZlIG6 RSD1hxQI0xw/x6llNw8/3Wrzq2RJo8pzclQiAQvi8iO19ENZqa7DfLtGGG33efWuhPbuxk ZLl5MXCsV4ctSip0AApQLUe6x0s+P5xos2USgPdmQC9ThhECE+okekhcALqWak1NEoD8Sg fp6q6IhQphV+oobpLpgKIzH+5tXBPnMEIiGMp7MLIsYOxUo24UNIXSe52wSUF2XdbGWLoB dRmzrCdZlQsn84yfeWHuvMpldllEEJbYbDwz0cT9JBl6Np5uLK+qiP70wan2/A== 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=1784995549; 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=E6qBDQaYL0FGQo1O6bCGkVr0COdIM3eQzAq+cMB3+CA=; b=eFwWYj9Cuez/zohgBYGpmJOdLJIMSFzXNKmwoYYrjZGLuczuG9ejQw6GkRj4wLvmoJKNtC OrxWQGwB1R8NyNjbDlCrDZPqulkpsEEWrs5o9iHs+ddr955MvuMXtVjV7IK3eOltjxojtV ou+btMy2/zYdstB7MK1JkpQv5PM3btPR0Xb1ghjv7XItPjTCX9rGt0KpuGQEYGO04hvwMb AJ9FRoW/erbagEXAhWKg3MC2Ad1m9Yfir9CXyXGLEbZDiN/E2lePKPNI93XviXlanVqgoT Nkdn7/GbZLKYVMaRweYii3E2l+VEaHLS5oInpjbWCkox2VGrUJtj240Dz+th8Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6qTT03HVzjVs for ; Sat, 25 Jul 2026 16:05:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3e7fd by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 25 Jul 2026 16:05:48 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: ShengYi Hung Subject: git: 5f346dba4f7b - main - libusb: Sync interface for libusb_init_option List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: aokblast X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5f346dba4f7b6ca088f2a3f40c5b562ef531adda Auto-Submitted: auto-generated Date: Sat, 25 Jul 2026 16:05:48 +0000 Message-Id: <6a64dedc.3e7fd.19c18fd4@gitrepo.freebsd.org> The branch main has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=5f346dba4f7b6ca088f2a3f40c5b562ef531adda commit 5f346dba4f7b6ca088f2a3f40c5b562ef531adda Author: ShengYi Hung AuthorDate: 2026-07-25 15:57:31 +0000 Commit: ShengYi Hung CommitDate: 2026-07-25 16:05:40 +0000 libusb: Sync interface for libusb_init_option Sponsored by: The FreeBSD Foundation --- lib/libusb/libusb.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/libusb/libusb.h b/lib/libusb/libusb.h index 006b023c65e6..08f1ab5d4d7e 100644 --- a/lib/libusb/libusb.h +++ b/lib/libusb/libusb.h @@ -324,16 +324,18 @@ struct libusb_version { const char *describe; }; +typedef struct libusb_context libusb_context; +typedef void (*libusb_log_cb)(libusb_context *ctx, enum libusb_log_level, + const char *str); + struct libusb_init_option { enum libusb_option option; union { int64_t ival; + libusb_log_cb log_cbval; } value; }; -typedef struct libusb_context libusb_context; -typedef void (*libusb_log_cb)(libusb_context *ctx, enum libusb_log_level, - const char *str); typedef struct libusb_device libusb_device; typedef struct libusb_device_handle libusb_device_handle; typedef struct libusb_pollfd libusb_pollfd; From nobody Sat Jul 25 16:32:14 2026 X-Original-To: dev-commits-src-main@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 4h6r3y5kKQz6lh17 for ; Sat, 25 Jul 2026 16:32:14 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6r3y4Y2rz3Cgg for ; Sat, 25 Jul 2026 16:32:14 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784997134; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=44PKWJrtCZZJWkjq7K1axRpnoXsn3md/YPqcIW61/N4=; b=dhuGi+uKjr0/trzztR4GYUaibue5/RibHrpZYRm7YyW82o5Il13Nm2kbNh1XJNuWaY6/O9 S3IZaLKg9Z5C1iKw+PVhX0RGbGVYjHCmrPV5aoi9slH4yF9lj+4xGt/q5O0C0RyUPgefSU DDNXc/qtjrgYLnjGQOaHGx4oigb1YhX1n9q5wkBAhlTqS863bUClbfSqaW6Lf5Ava6bKZF jb3CKHc6f5b8OieQpyWJrh2VW9Woyyw3vbiVfMxsJ7qAgpxwP8O8n0NiBrD4Mq7fNpaIqw Ug8Y+HDNqS1e2PDETndEy+3utTknWg44nMursYM01P1y47TDnyS+iASpTWVNzw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784997134; a=rsa-sha256; cv=none; b=VMyWLZ4hi7w6VY8mqJzjvgW3osnM4L+5+jdfzyjXlD6yBOeHzRMtpNCH1gSp5qkKVkVbSM zyyvV5CUZ6dV4FLsvAuTFuONjjHRpsdHSufiHOhdVvMbWwHxAAqwBqSLnna+RSedtI5Bn3 85IwFzAEJwyUGoUszJDKwpQP7V5jEeK/O0kQYLFFQSKS1qOBOTZOUqUfVOzBvztlcZqfRb PxnDuE4feOXCXmGarm5f9G0Yhe9YWs69yL/zc+PK/M1ILADmFHPOAc0c+WcIGlRl6dm2Hj 6o3Q3S5z+OwZp81jUMbCjGh05I3v07GLg/73LYGGoRL9zSd7SARsUvNn2VaFjw== 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=1784997134; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=44PKWJrtCZZJWkjq7K1axRpnoXsn3md/YPqcIW61/N4=; b=OBxV2/UljIsVkF12gcBEkSA1uIlKCgrxM4/pMk8AKxHd6pAdUplo8LRad/O78W60lNDR+4 l8nyZdEQ0Zstw/P9YCD5E0HKqhH0GB/rfrI+irg5CDoBwUNV9Uu29Hg2e9e2utXJWAl4vQ NWwl9GHm6zIr/vW3+/CFenlcD1OLwYlywesrN2CTB4fgp4F2QybxnTvGLvU4dI8QTyAQ25 b8qutECExsSsAi3jLn2mk53ZPJPBS+XndXbuzV5uFewmq8kwjKtmXrbajrEKLqJg46eDCa D8m2Ceiaz9uOeos1Jr+JH/oA3X+wAjj4QDMVTeDETWz2zzkgeP23HnUTmOVbwQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6r3y3HGczkn8 for ; Sat, 25 Jul 2026 16:32:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1c14c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 25 Jul 2026 16:32:14 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Zhang Qiyue From: Enji Cooper Subject: git: 64038db825d6 - main - libc: tests: add static to resolve -Wmissing-prototypes List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: ngie X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 64038db825d64fb4827fc8ee264ea0fa1a046d82 Auto-Submitted: auto-generated Date: Sat, 25 Jul 2026 16:32:14 +0000 Message-Id: <6a64e50e.1c14c.b5573b5@gitrepo.freebsd.org> The branch main has been updated by ngie: URL: https://cgit.FreeBSD.org/src/commit/?id=64038db825d64fb4827fc8ee264ea0fa1a046d82 commit 64038db825d64fb4827fc8ee264ea0fa1a046d82 Author: Zhang Qiyue AuthorDate: 2026-07-12 06:26:36 +0000 Commit: Enji Cooper CommitDate: 2026-07-25 16:29:28 +0000 libc: tests: add static to resolve -Wmissing-prototypes The function create_staticobj() is only used inside this translation unit. Clang produces a -Wmissing-prototypes warning during standard buildworld. This warning will become a fatal compile error if MK_WERROR is enabled for hardened builds. PR: 285870 Fixes: ee9ce1078 ("libc: tests: add some tests for __cxa_atexit...") Signed-off-by: Zhang Qiyue Reviewed-by: ngie Pull-Request: https://github.com/freebsd/freebsd-src/pull/2321 --- lib/libc/tests/stdlib/libatexit/libatexit.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/libc/tests/stdlib/libatexit/libatexit.cc b/lib/libc/tests/stdlib/libatexit/libatexit.cc index bb286c97e421..7c5a7126d178 100644 --- a/lib/libc/tests/stdlib/libatexit/libatexit.cc +++ b/lib/libc/tests/stdlib/libatexit/libatexit.cc @@ -44,7 +44,7 @@ struct other_object { } }; -void +static void create_staticobj() { static other_object obj; From nobody Sat Jul 25 16:56:21 2026 X-Original-To: dev-commits-src-main@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 4h6rbn5W8Sz6lkHr for ; Sat, 25 Jul 2026 16:56: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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6rbn505Xz3H4l for ; Sat, 25 Jul 2026 16:56:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784998581; 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=ZRFIoB3dsrD34kEroFs3tYi6bHGkljYpVwl75pFUQsQ=; b=JBzsz6V9V9C/u0+IKoG0VyD4tHAAHxMjtE5N/N2r+E1WVJHjVBUvjSRstL/+58B5SZsAY6 4WT3mR43jbkCmybKEGYDjFtc3onblJwqPcYK1JG3OsDwBmN9znUEMS6dgW6r0IwSPwR4sw NRGxeW/aBfzNvKm1haDVUroEvEkv0Oa/qa3UlNEIEQIHYyxqQ+42i9ilIaErkBmUCSMJme NMkckUb5VXLPXRGM3vOgmmHAjp8kpqrepLD7aHVSK2KdObl3+cGtarcQVS0ra3Gn+us+xx YUFgJWJRLXCE5tiAXGR8x/eL8QjWtQ4q038dffRQyvyhh6GsT0kMoGjLdKg6iA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784998581; a=rsa-sha256; cv=none; b=C9CnzlYTLNvZpn6gsXtnsIzJiI7d1BKpgSwFboaLLsd8o5vXe4BE7MnKzEy/Q297XFh+IG Ju21s5w26N0x5xGLKiDO+J1uLbIdftk2vIsC/WROv2sOF5au7X12R46+XmFOE5yNz4IpnH KVey5SRwYF3Y54X0bbFbZkx2f3lT0NTslwSVbN0vCOg0J5tY4vNaud6JKb/kyxL7d728D3 1lGS+gttpup0hr7gu72nLRCS89sO3ontiC4SBSqTp6lAbdWmycBDc+8McveVrjmLnJNEN8 DgaUr/ZgQrXpDDgyUIpxKvw7VjedmZfJpG8p7/tSyP4BAex2z20iFrwSImO32w== 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=1784998581; 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=ZRFIoB3dsrD34kEroFs3tYi6bHGkljYpVwl75pFUQsQ=; b=ZP539zP4q1L+SZ9JaJ2bUZOSzXRSgT2BHIsTORyhiPqMChi789aZMfv1kTa/9bJXifwgMo Jeglnlg5ek8xQHvNJsWxaX6Vl3hZp45POLzuBOaZYE5/BpqoqHBsA4+zNeKNPLW/JY9UER zdD+EtwfJA0xwsrcHEXZUSPtCTpJZhrFv0WZekFik8sL59nQwoNUcIiLPooBcuhXSX8yVE uVs2/XwX6kL+iM7fX2Pm6aA78V1vAUqG13OWgP85Ln8+SYHJE7NQdIz24hE8/h08GZ9pEQ 2UTjUL/yZwfsTT9Uq/TEd+C17d3HzWoktljZvQiogVSxNu+xRKB9Xn67zYlizA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6rbn41MSzkrZ for ; Sat, 25 Jul 2026 16:56:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1e32e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 25 Jul 2026 16:56:21 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Enji Cooper Subject: git: bc81728c00b2 - main - [test] libatexit: leverage __{BEGIN,END}_DECLS List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: ngie X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: bc81728c00b200297ac556974b5373c804077a17 Auto-Submitted: auto-generated Date: Sat, 25 Jul 2026 16:56:21 +0000 Message-Id: <6a64eab5.1e32e.13c91658@gitrepo.freebsd.org> The branch main has been updated by ngie: URL: https://cgit.FreeBSD.org/src/commit/?id=bc81728c00b200297ac556974b5373c804077a17 commit bc81728c00b200297ac556974b5373c804077a17 Author: Enji Cooper AuthorDate: 2026-07-25 16:51:53 +0000 Commit: Enji Cooper CommitDate: 2026-07-25 16:55:38 +0000 [test] libatexit: leverage __{BEGIN,END}_DECLS This change converts the longhand form of `extern "C" {` and its corresponding `}` into `__BEGIN_DECLS` and `__END_DECLS`, respectively. The new form is much easier to grep for and is a best practice to use in the FreeBSD tree. This is meant to be a non-functional change. MFC after: 1 week --- lib/libc/tests/stdlib/libatexit/libatexit.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/libc/tests/stdlib/libatexit/libatexit.cc b/lib/libc/tests/stdlib/libatexit/libatexit.cc index 7c5a7126d178..5dcbe8a33dc0 100644 --- a/lib/libc/tests/stdlib/libatexit/libatexit.cc +++ b/lib/libc/tests/stdlib/libatexit/libatexit.cc @@ -5,15 +5,18 @@ * */ +#include #include static int exit_code = -1; static bool fatal_atexit; -extern "C" { - void set_fatal_atexit(bool); - void set_exit_code(int); -} +__BEGIN_DECLS + +void set_fatal_atexit(bool); +void set_exit_code(int); + +__END_DECLS void set_fatal_atexit(bool fexit) From nobody Sat Jul 25 21:04:26 2026 X-Original-To: dev-commits-src-main@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 4h6y624qWGz6m6ZS for ; Sat, 25 Jul 2026 21:04:26 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6y624BN2z3vmD for ; Sat, 25 Jul 2026 21:04:26 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785013466; 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=nwqyYGVmI1sdLR0kd3+5lJpl0G191Qmg8X83GCj0994=; b=FwbtcuKQgq3klNyTj5+dfOMe4YW3qG2EeIjq/FerQ6+w4rlliafLQn5AHs2j5CMKSH1Chh 2R5mZ0sBoVj8GNNVeod9bshMdiNaRqfuigIVpPdvP2IdUhFpnP0Dhnu6oEFp69M6SCzIMJ atvq6iVeO8n9jhzlkQVCMw1nJisjcbP0fecXzweKZdzt9OFLCT1aDExC3hShl5DuKhVEMQ jR2r1DsFuzTKckPVDFYh6H1AZLbwyRdPJmzD0b13mGbRslxZojnxHUgzUfpTN1zLeEcUb6 1mZtyn/B5ThLz0R3MlPLRIGlv23NXRCaEjwJhximkYtkj6KosirXOxSLof/S4Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785013466; a=rsa-sha256; cv=none; b=ifzL6hVWU36rYzzWrP/7Qxu2/rjoZZmJlgDp/MemG8aFRNIO+0scVv4Y3OFbiyV8xL8EZA 6qFiJAjisZT+14+LNoM38wpW5k0Bls+tHwQutX1TPK3Cb5GGzGdLZ5lmnznpKfL9Vv5CG/ KhuA1GqWG3GdUm/D2JFf9lXw+XdZuUa1xzjrhuqob5xpMXh+6TjExgUF9U0NbxaAVDJK/+ cUfluSZkLLH9eXaWHX76kBVMWte6/1pN+i2hMnb28ZWiw6i8UxYSzfV94YcjpXnFwWCVsM Zoc3QTI/N62oeaLklviBKTlFHOzfdzyynDoJ2X2ffXavWcxmx1ogamvAFGTy7A== 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=1785013466; 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=nwqyYGVmI1sdLR0kd3+5lJpl0G191Qmg8X83GCj0994=; b=SNfsk3j9wN/8Cga8X8FN6y8cN+FlNWXxvSkioDltVCRXyQMtB6hrrSvUUhqAWZx/dtRMOH 2sFJgbd0SpZ6PW9BM5jR/OPiQpo39Sq9PRPAkMkd7Uc8cCUHVzf0VvYr8oloiR7NwYdIst u/R4ruGEXcU6cjYLfBRdCn8tdxHsMkN/FbyOhSS7CoZbXjPCN9u9y8TIHFY8BYVoh97T1F Ib0lffxwBG3wYGL6vwgNsVNGyLBCjJkVgc7kkwHMHzvgfLV0OwG/vlQm/YM9745Oc2rPWE wL1G3EqgyKDsnpw4SoIV6vH3yB8Rlf2kZSJQn+BiJv8lbKmsYkIQWh/LGblDnw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6y622WdYzt1n for ; Sat, 25 Jul 2026 21:04:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 41983 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 25 Jul 2026 21:04:26 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 0bd6a167c156 - main - e1000: Defer link-up notification until after TSO reset List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0bd6a167c1561f01c227b1c428a3d8adf0e38833 Auto-Submitted: auto-generated Date: Sat, 25 Jul 2026 21:04:26 +0000 Message-Id: <6a6524da.41983.8c6cef9@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=0bd6a167c1561f01c227b1c428a3d8adf0e38833 commit 0bd6a167c1561f01c227b1c428a3d8adf0e38833 Author: Kevin Bowling AuthorDate: 2026-07-25 21:00:10 +0000 Commit: Kevin Bowling CommitDate: 2026-07-25 21:00:10 +0000 e1000: Defer link-up notification until after TSO reset em_automask_tso() changes the enabled TSO capabilities when the link moves between 10/100 and 1000 Mb/s. A running interface must be reinitialized to apply the new capability set. Do not publish LINK_STATE_UP until the requested iflib reset has completed. Replace link_active with an explicit state machine that distinguishes the physical link, its publication to iflib, and an outstanding reset barrier. Preserve that barrier across a link flap with DOWN_RESET_PENDING, and only publish DOWN if UP was previously published. Only request a reset for a running interface or for an initialization while the interface is administratively up. In other states the next initialization will apply the capability changes, avoiding a reset request that iflib's admin task could discard. Reviewed by: Faraz Vahedi Fixes: 2ddf24f8f525 ("e1000: Automask TSO on lem(4)/em(4) 10/100 Ethernet") MFC after: 1 week --- sys/dev/e1000/if_em.c | 79 +++++++++++++++++++++++++++++++++++++++------------ sys/dev/e1000/if_em.h | 10 ++++++- 2 files changed, 70 insertions(+), 19 deletions(-) diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c index 3118b27e8122..5547c4ec8614 100644 --- a/sys/dev/e1000/if_em.c +++ b/sys/dev/e1000/if_em.c @@ -1562,6 +1562,10 @@ em_if_init(if_ctx_t ctx) /* Initialize the hardware */ em_reset(ctx); + /* Re-arm a link-up transition deferred for this reset. */ + if (sc->link_state == EM_LINK_STATE_DOWN_RESET_PENDING || + sc->link_state == EM_LINK_STATE_UP_RESET_PENDING) + sc->link_state = EM_LINK_STATE_DOWN; em_if_update_admin_status(ctx); for (i = 0, tx_que = sc->tx_queues; i < sc->tx_num_queues; @@ -1999,7 +2003,8 @@ em_if_media_status(if_ctx_t ctx, struct ifmediareq *ifmr) ifmr->ifm_status = IFM_AVALID; ifmr->ifm_active = IFM_ETHER; - if (!sc->link_active) { + if (sc->link_state == EM_LINK_STATE_DOWN || + sc->link_state == EM_LINK_STATE_DOWN_RESET_PENDING) { return; } @@ -2219,7 +2224,7 @@ em_if_update_admin_status(if_ctx_t ctx) struct e1000_hw *hw = &sc->hw; device_t dev = iflib_get_dev(ctx); u32 link_check, thstat, ctrl; - bool automasked = false; + bool reset_requested = false; link_check = thstat = ctrl = 0; /* Get the cached link value or read phy for real */ @@ -2262,7 +2267,13 @@ em_if_update_admin_status(if_ctx_t ctx) } /* Now check for a transition */ - if (link_check && (sc->link_active == 0)) { + if (link_check && + (sc->link_state == EM_LINK_STATE_DOWN || + sc->link_state == EM_LINK_STATE_DOWN_RESET_PENDING)) { + bool reset_pending; + + reset_pending = + sc->link_state == EM_LINK_STATE_DOWN_RESET_PENDING; e1000_get_speed_and_duplex(hw, &sc->link_speed, &sc->link_duplex); /* Check if we must disable SPEED_MODE bit on PCI-E */ @@ -2279,7 +2290,7 @@ em_if_update_admin_status(if_ctx_t ctx) sc->link_speed, ((sc->link_duplex == FULL_DUPLEX) ? "Full Duplex" : "Half Duplex")); - sc->link_active = 1; + sc->link_state = EM_LINK_STATE_UP; sc->smartspeed = 0; if ((ctrl & E1000_CTRL_EXT_LINK_MODE_MASK) == E1000_CTRL_EXT_LINK_MODE_GMII && @@ -2299,17 +2310,33 @@ em_if_update_admin_status(if_ctx_t ctx) } /* Only do TSO on gigabit for older chips due to errata */ if (hw->mac.type < igb_mac_min) - automasked = em_automask_tso(ctx); + reset_requested = em_automask_tso(ctx); - /* Automasking resets the interface so don't mark it up yet */ - if (!automasked) + if (reset_pending || reset_requested) { + /* + * The PHY is up, but publish it only after the TSO + * capability-change reset. + */ + sc->link_state = EM_LINK_STATE_UP_RESET_PENDING; + } else { iflib_link_state_change(ctx, LINK_STATE_UP, IF_Mbps(sc->link_speed)); - } else if (!link_check && (sc->link_active == 1)) { + } + } else if (!link_check && + (sc->link_state == EM_LINK_STATE_UP || + sc->link_state == EM_LINK_STATE_UP_RESET_PENDING)) { + bool link_was_published; + bool reset_pending; + + link_was_published = sc->link_state == EM_LINK_STATE_UP; + reset_pending = + sc->link_state == EM_LINK_STATE_UP_RESET_PENDING; sc->link_speed = 0; sc->link_duplex = 0; - sc->link_active = 0; - iflib_link_state_change(ctx, LINK_STATE_DOWN, 0); + sc->link_state = reset_pending ? + EM_LINK_STATE_DOWN_RESET_PENDING : EM_LINK_STATE_DOWN; + if (link_was_published) + iflib_link_state_change(ctx, LINK_STATE_DOWN, 0); } em_update_stats_counters(sc); @@ -2758,7 +2785,9 @@ lem_smartspeed(struct e1000_softc *sc) { u16 phy_tmp; - if (sc->link_active || (sc->hw.phy.type != e1000_phy_igp) || + if (sc->link_state == EM_LINK_STATE_UP || + sc->link_state == EM_LINK_STATE_UP_RESET_PENDING || + (sc->hw.phy.type != e1000_phy_igp) || sc->hw.mac.autoneg == 0 || (sc->hw.phy.autoneg_advertised & ADVERTISE_1000_FULL) == 0) return; @@ -4342,6 +4371,8 @@ em_automask_tso(if_ctx_t ctx) struct e1000_softc *sc = iflib_get_softc(ctx); if_softc_ctx_t scctx = iflib_get_softc_ctx(ctx); if_t ifp = iflib_get_ifp(ctx); + bool reset_needed; + int drvflags; if (!em_unsupported_tso && sc->link_speed && sc->link_speed != SPEED_1000 && @@ -4351,20 +4382,32 @@ em_automask_tso(if_ctx_t ctx) sc->tso_automasked = scctx->isc_capenable & IFCAP_TSO; scctx->isc_capenable &= ~IFCAP_TSO; if_setcapenablebit(ifp, 0, IFCAP_TSO); - /* iflib_init_locked handles ifnet hwassistbits */ - iflib_request_reset(ctx); - return true; } else if (sc->link_speed == SPEED_1000 && sc->tso_automasked) { device_printf(sc->dev, "Re-enabling TSO for GbE.\n"); scctx->isc_capenable |= sc->tso_automasked; if_setcapenablebit(ifp, sc->tso_automasked, 0); sc->tso_automasked = 0; - /* iflib_init_locked handles ifnet hwassistbits */ - iflib_request_reset(ctx); - return true; + } else { + return (false); } - return false; + /* + * Reset a running interface, or one being initialized while + * administratively up. OACTIVE remains set after iflib_stop(), so + * it alone cannot distinguish initialization from an interface that + * is down. In other states, the next initialization will apply the + * updated capabilities. + */ + drvflags = if_getdrvflags(ifp); + reset_needed = (drvflags & IFF_DRV_RUNNING) != 0 || + ((drvflags & IFF_DRV_OACTIVE) != 0 && + (if_getflags(ifp) & IFF_UP) != 0); + if (!reset_needed) + return (false); + + /* iflib_init_locked handles ifnet hwassistbits */ + iflib_request_reset(ctx); + return (true); } /* diff --git a/sys/dev/e1000/if_em.h b/sys/dev/e1000/if_em.h index 4c80c7696952..56c28597fa22 100644 --- a/sys/dev/e1000/if_em.h +++ b/sys/dev/e1000/if_em.h @@ -469,6 +469,14 @@ struct em_rx_queue { struct if_irq que_irq; }; +/* Driver-observed link state and its publication barrier. */ +enum em_link_state { + EM_LINK_STATE_DOWN = 0, + EM_LINK_STATE_DOWN_RESET_PENDING, + EM_LINK_STATE_UP, + EM_LINK_STATE_UP_RESET_PENDING, +}; + /* Our softc structure */ struct e1000_softc { struct e1000_hw hw; @@ -530,7 +538,7 @@ struct e1000_softc { u32 shadow_vfta[EM_VFTA_SIZE]; /* Info about the interface */ - u16 link_active; + enum em_link_state link_state; u16 fc; u16 link_speed; u16 link_duplex; From nobody Sat Jul 25 21:29:44 2026 X-Original-To: dev-commits-src-main@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 4h6ygD6xvZz6m8Lw for ; Sat, 25 Jul 2026 21:29:44 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6ygD6Mf5z3ymW for ; Sat, 25 Jul 2026 21:29:44 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785014984; 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=F+pgG8PoxCMd4kecOQkKU/biK7ddh6WW0dyU+llkoHA=; b=l+rpch4DZnX9ogLiaTTSWZcwk8ebQD3uUPbIO7ujV0f2eEA66UJjfHoW28kkbHqpakkBD2 f9dr1ERfTb9vUu2iP3ZWi6taY/EkxQGbgl36V33WIMyZl3E2ENYKSIoRVULRqtN3yNoPNU nLB2vRvvJv95xQIX4wInLlYNk9mfNGwfuvoUWST/+pS2EccdsTLQEoXGXDiEgPKHYNCpr+ k8mGI1jUCnBBCTZZYj7ow2FpHpOGJgagoPsqdSjekF0H9vK6Sdhd15Nvk1zLQbb1gymuA1 4goiYKlOyDzCFU6Lw1oC8Xhwkxis4r6bZsCYfS9yqM5ImFYfyN9L2boQpnQTeg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785014984; a=rsa-sha256; cv=none; b=Yx4azXTdicPayXlS2ynlUywCHMhbukzxNjK6hCVHWLiMG3nNtQczAZeZPEDyIuzlJy9n0P whfhhnBKX8KR+Q2ni+GYNhBpU2uicwPbNgaTPsJRKyWm85ZhTeDmuJ5G95oPeVbl/8q9B+ xvZGdYQPFmT9pOLDaGrPLsw0OXB/DGB8gCR5sOWUTh8CJw3I8EhKlTZenTu6SMbWCHnIbE wBPetU3FPpdEsYkxu8Q5rbKqvcHcL0JnzSgOQIn115g4UKyKzQyjh5SSPs6rDj9yp+oQQD o0EGiWTp7lh/KBFE70n7CxqIGoOm23QadiD5hTzj01TMyrwxcRKJwBicU7T0ow== 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=1785014984; 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=F+pgG8PoxCMd4kecOQkKU/biK7ddh6WW0dyU+llkoHA=; b=AdFIiIsrw7In+XXYiDm2DDpEGQ7ZD+edTYT6/8hy7nOdAXsyRhDctj0WFC2xAMTza0BC+s oYwKFMpVLPlNSGSwwHSbfmmpAJRZ9zIKZaMAvyYrpocswtY2jfP1WhufX5RiHABuMtz9PN 8GlsEUYzgEiEab7VpmFhkeLnPeLIl4GbgUo6WuoB+VXbI2dpQQGS0YXPKglLq2gAYNgMrg Jipg8F+UwjshvPcYuLZekISU0ROQTJBVefvOpcG0UPEGKcwFb4LTWnx6qhTLpCD7UA20ER 2D0Ljfb2B3bsAu2VVfREv23UWofYKEqB15mydVtKEIIA6TH0t5j3RggkJuGXBQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6ygD5BpQzt4n for ; Sat, 25 Jul 2026 21:29:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 43823 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 25 Jul 2026 21:29:44 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 941113a0097e - main - e1000: fix 82574 MSI-X interrupt throttling List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 941113a0097ea047bd493f7f78b384718249779d Auto-Submitted: auto-generated Date: Sat, 25 Jul 2026 21:29:44 +0000 Message-Id: <6a652ac8.43823.679927a9@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=941113a0097ea047bd493f7f78b384718249779d commit 941113a0097ea047bd493f7f78b384718249779d Author: Kevin Bowling AuthorDate: 2026-07-25 10:43:28 +0000 Commit: Kevin Bowling CommitDate: 2026-07-25 21:27:51 +0000 e1000: fix 82574 MSI-X interrupt throttling em_newitr() and the per-queue interrupt_rate sysctl both tested que->msix to decide whether an 82574 is running in MSI-X mode. 0 is a valid MSI-X vector so queue 0 was misclassified as legacy/MSI. Test sc->intr_type == IFLIB_INTR_MSIX instead. While here, index the tx EITR read by tque->msix rather than tque->me so it matches the register em_newitr() actually writes; the two differ once tx_num_queues exceeds rx_num_queues. Also seed que->itr_setting in em_initialize_receive_unit() with the rate the hardware was just programmed with. Otherwise an itr_setting left over from AIM across an interface re-init makes the change detection in em_newitr() suppress the write that would restore it, leaving the hardware at the default rate while software believes otherwise. Fixes: 3e501ef89667 ("e1000: Re-add AIM") MFC after: 3 days --- sys/dev/e1000/if_em.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c index 5547c4ec8614..1e54d5ea998d 100644 --- a/sys/dev/e1000/if_em.c +++ b/sys/dev/e1000/if_em.c @@ -1792,7 +1792,8 @@ em_set_next_itr: if (newitr != que->itr_setting) { que->itr_setting = newitr; - if (hw->mac.type == e1000_82574 && que->msix) { + if (hw->mac.type == e1000_82574 && + sc->intr_type == IFLIB_INTR_MSIX) { E1000_WRITE_REG(hw, E1000_EITR_82574(que->msix), que->itr_setting); @@ -3834,6 +3835,19 @@ em_initialize_receive_unit(if_ctx_t ctx) /* Set the default interrupt throttling rate */ E1000_WRITE_REG(hw, E1000_ITR, EM_INTS_TO_ITR(em_max_interrupt_rate)); + + /* + * The 82574 MSI-X EITR registers are programmed + * with the same value further below. Either way + * the hardware now holds the default rate, so seed + * the software copy to match; otherwise a stale + * itr_setting left over from AIM makes em_newitr() + * skip the write that would restore it. + */ + for (i = 0, que = sc->rx_queues; i < sc->rx_num_queues; + i++, que++) + que->itr_setting = + EM_INTS_TO_ITR(em_max_interrupt_rate); } /* XXX TEMPORARY WORKAROUND: on some systems with 82573 @@ -4957,8 +4971,9 @@ em_sysctl_interrupt_rate_handler(SYSCTL_HANDLER_ARGS) hw = &tque->sc->hw; if (hw->mac.type >= igb_mac_min) reg = E1000_READ_REG(hw, E1000_EITR(tque->me)); - else if (hw->mac.type == e1000_82574 && tque->msix) - reg = E1000_READ_REG(hw, E1000_EITR_82574(tque->me)); + else if (hw->mac.type == e1000_82574 && + tque->sc->intr_type == IFLIB_INTR_MSIX) + reg = E1000_READ_REG(hw, E1000_EITR_82574(tque->msix)); else reg = E1000_READ_REG(hw, E1000_ITR); } else { @@ -4966,7 +4981,8 @@ em_sysctl_interrupt_rate_handler(SYSCTL_HANDLER_ARGS) hw = &rque->sc->hw; if (hw->mac.type >= igb_mac_min) reg = E1000_READ_REG(hw, E1000_EITR(rque->msix)); - else if (hw->mac.type == e1000_82574 && rque->msix) + else if (hw->mac.type == e1000_82574 && + rque->sc->intr_type == IFLIB_INTR_MSIX) reg = E1000_READ_REG(hw, E1000_EITR_82574(rque->msix)); else From nobody Sat Jul 25 21:36:49 2026 X-Original-To: dev-commits-src-main@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 4h6yqP5wpnz6m8r6 for ; Sat, 25 Jul 2026 21:36:49 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h6yqP52P0z41l6 for ; Sat, 25 Jul 2026 21:36:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785015409; 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=JRVevtCCcQyqOA9/ZTb5hjMbiOMvK+LopFzbTQKQdSU=; b=mJtmjEqLl7sU4jBnP12p9xYOEmHOln4qTBbTBE1aLJsG1S9pYwEkOEFBbsEu0DR037uuhx H34tqjq9TGZcyZmzlwtDaWnezsAnR/hN3rXS4Na7BodsFT6OBEUMPm7/eSLB+MBQfQ/Guv 8RNRURve1HNlWawl98uYR6kDWkOYAAdXL7BhwbJ5oGR0vUnZp2OMdNV3K9GzNsE0oJY03Q 3OBOTwNO1XkoP3v2VARhhV+6BQWzvOoKR57T6pVVismdDK6Rf95/ZFE0LiWrpgXb6uy3Jz 3lXLtuVu92vTicJzSRi1d0PhVwe0la7XHDPrv9QGA+IwDvFBTGY2A0jwqMXmQg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785015409; a=rsa-sha256; cv=none; b=hkWL50DhP7kQQUiFa7TXSuGeHTf9+/Fk94uL9bdr69fqsYNWyHAKzJXKE6p9t50HRu9o1q afSepLgXJ1/Qt8lZcpAGR3FKuTb7GLQwoK/0nQE9nDputnPYHx/moJbqgD5IdkV2faTlG/ 9MyhM/Nvxm6jTVUiPnHroCIVFGYXQzgxqsftK8SUM14C5N44FyjLSVSawxNNkqTFJILtLe mC4LH3/Gr9v5+4buLooW8APFD8TAEQiPlR4qtJnVB1NU1P5f9yazcGjHYAnH/XfLh+4hhl eTX/G7anwNrymY5cm+5iR6GCwGpqjLG1aLtzweSYECK/Hang5VUeppp3AL00CA== 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=1785015409; 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=JRVevtCCcQyqOA9/ZTb5hjMbiOMvK+LopFzbTQKQdSU=; b=TfO7SfMH5NMrKi4RjPSyC6y7KU7jB+kahQS9F1G7lPONF/UxHvVCl5zLICNZEFJOHr6vZ1 /5xHfU/oC2WW4m1IlvkAE1OVDx2K2v+aQF9/kwKCd3O7laRGzqKdX2zUws1MnkSmnMTJna 6PmbNmrqK2bkotyPO8r5vTm3JDuOxYJ8fT2Pg9qGiVDRYMOfq1gdRFpDAQxTZl0CtUS5JP jDyk9C55+3NvPS5mjhPBtmtN/SjBSmHjpD0YJQ1HxHnhYi4Qatj+7YzdxDlBq068bJUnfc 5LDjgcukhvlnq9L+pZpjO26iEMaSXRqQMsWu4gHVmcy2SsWnAvztyvAR7aderQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h6yqP3VxfzssZ for ; Sat, 25 Jul 2026 21:36:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 43139 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 25 Jul 2026 21:36:49 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 41a46c2d46aa - main - e1000: fix rx accounting for multi-descriptor packets List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 41a46c2d46aa4078c597ce3a0d19323cab988277 Auto-Submitted: auto-generated Date: Sat, 25 Jul 2026 21:36:49 +0000 Message-Id: <6a652c71.43139.60a2f8ab@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=41a46c2d46aa4078c597ce3a0d19323cab988277 commit 41a46c2d46aa4078c597ce3a0d19323cab988277 Author: Kevin Bowling AuthorDate: 2026-07-25 11:02:36 +0000 Commit: Kevin Bowling CommitDate: 2026-07-25 21:36:18 +0000 e1000: fix rx accounting for multi-descriptor packets The receive paths accumulate ri->iri_len across the descriptors making up a packet, then add that running total to rxr->rx_bytes on every iteration of the loop. A packet spanning descriptors of length l1, l2 and l3 thus contributes 3*l1 + 2*l2 + l3 instead of l1 + l2 + l3. Single descriptor packets, the common case, are accounted correctly, so this only shows up on jumbo frames. Add the per descriptor length instead. iflib memsets the if_rxd_info before each isc_rxd_pkt_get() call, so summing len gives the same total as the final iri_len, and the frame error path that returns without incrementing rx_packets keeps counting bytes exactly as before. MFC after: 1 week --- sys/dev/e1000/em_txrx.c | 4 ++-- sys/dev/e1000/igb_txrx.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sys/dev/e1000/em_txrx.c b/sys/dev/e1000/em_txrx.c index b86222e363e9..f2b48d6518f7 100644 --- a/sys/dev/e1000/em_txrx.c +++ b/sys/dev/e1000/em_txrx.c @@ -679,7 +679,7 @@ lem_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri) len = le16toh(rxd->length); ri->iri_len += len; - rxr->rx_bytes += ri->iri_len; + rxr->rx_bytes += len; eop = (status & E1000_RXD_STAT_EOP) != 0; @@ -745,7 +745,7 @@ em_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri) len = le16toh(rxd->wb.upper.length); ri->iri_len += len; - rxr->rx_bytes += ri->iri_len; + rxr->rx_bytes += len; eop = (staterr & E1000_RXD_STAT_EOP) != 0; diff --git a/sys/dev/e1000/igb_txrx.c b/sys/dev/e1000/igb_txrx.c index e01bc72cdc55..fc690dcfc100 100644 --- a/sys/dev/e1000/igb_txrx.c +++ b/sys/dev/e1000/igb_txrx.c @@ -458,7 +458,7 @@ igb_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri) le32toh(rxd->wb.lower.lo_dword.data) & IGB_PKTTYPE_MASK; ri->iri_len += len; - rxr->rx_bytes += ri->iri_len; + rxr->rx_bytes += len; rxd->wb.upper.status_error = 0; eop = ((staterr & E1000_RXD_STAT_EOP) == E1000_RXD_STAT_EOP); From nobody Sun Jul 26 01:01:08 2026 X-Original-To: dev-commits-src-main@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 4h73M86S2pz6mQPn for ; Sun, 26 Jul 2026 01:01:08 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h73M85254z3Lql for ; Sun, 26 Jul 2026 01:01:08 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785027668; 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=lAmqId1VNrBXur11G34x215/HwUxpgYekyCGz7J++vA=; b=lr5eu9msr6lisi4pjptlrkuH4zxQuoJcoUkh6ljgFnLAAOHyzR2Jj+nZ83y3OIlhzBAL0w 5PImR4RAsiZUGOyg1k8IND8sTDPPgDHeQEbMisRpeS87susuwuDcYvuhcPaocooG7ckbZa Fp8Bjik0SyIq3AaSH3mVQR+cu8/AcfgYS4XlzUnewlrxD6N9HtgvP+lyYEr34iOn62Otvo zmYTUM0uCLwIMym/xI7lB8wvMvKz4573wD0qlnw1R9jX10bIZa9BYFrEJ77LDMzo0d0xWW ogEsmz3vSNImumt9RWs+yjzThazuACZ/nh4YTqE+D08mFCtV/t8mx2pIof/YwQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785027668; a=rsa-sha256; cv=none; b=P4ycu3Krew/0YLCz24jE7x3ZVMWzEL/B9vewc+bRw9AYO5/2EMXamINpFq12ZXHJPFUWnh SqkI+qE0qe1OwLQtxCHskPvRJsEL4znVKwcfkAGyyR8Ex/Ms+PMvTMwGeS5RJDt6kFTTjY TA6KE3vPuEjdsnV5e02EjQLO2BYnzxOqbOsaHobdENxhqqSGwxjm6axgzZs13aBKvl0Gzv edvhxspV/ZAmRhYF6wk0feBhTWXsyvVTpf92bM3EWF8nLu8Oq2KRqG09NWEgYp+4Crm7eO 0E8JSInkRauY/aTvkt6xdWJ9NA2gtpeaC/5AMnm6oLTvOYuHJFterpcMS12rxA== 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=1785027668; 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=lAmqId1VNrBXur11G34x215/HwUxpgYekyCGz7J++vA=; b=ZRh3+Tqg7WR/gie20+ZwphGSe6AKKqlqNzBTOUiRFTZvQp8WFW/IPwrgzb1iBaFzuHixu3 n+w400BSQ8woXlYc+SdxpKTBWpFbaSYQzBhN/XeNUIKcvSxQulCVScxzUpF3kbIaRFQ4GX m56cGRcMDEhfEzyhcTiLrqKcOa4AYhR7T7RdBBTJWAwVNSTu99fi9Sp4bmITw87Rv5JjKw 7xx5cDBhjvsuN/+o5k9FMmh8fuJ1lJZb6qsh5vcEv5EFdem0k8Yk+2I1zsemvY+uwbroYs dwBkqSyfFAKHipPatN+ltP9bW1Rz0PYxwr4sOB9PFvU7+DpB2CqqZCHlpSB61w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h73M83m3Wz10gv for ; Sun, 26 Jul 2026 01:01:08 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 32b06 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Jul 2026 01:01:08 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: bc5e7b0cbbb5 - main - e1000: make AIM counter sampling coherent List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: bc5e7b0cbbb555ffebc7d73b273c421f9ee24c23 Auto-Submitted: auto-generated Date: Sun, 26 Jul 2026 01:01:08 +0000 Message-Id: <6a655c54.32b06.5a1d84b2@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=bc5e7b0cbbb555ffebc7d73b273c421f9ee24c23 commit bc5e7b0cbbb555ffebc7d73b273c421f9ee24c23 Author: Kevin Bowling AuthorDate: 2026-07-25 23:48:15 +0000 Commit: Kevin Bowling CommitDate: 2026-07-26 01:00:02 +0000 e1000: make AIM counter sampling coherent Sample free-running counters by delta instead of clearing them from the interrupt filter, which can race their producers. Publish byte and packet counts together at the TX and RX doorbells so each sample is coherent. Aggregate every TX ring assigned to the interrupt vector so unequal RX and TX queue counts are safe. Count RX bytes only after a frame is accepted. MFC after: 1 week --- sys/dev/e1000/em_txrx.c | 8 +++- sys/dev/e1000/if_em.c | 97 +++++++++++++++++++++++++++++++++++------------- sys/dev/e1000/if_em.h | 46 +++++++++++++++++++++-- sys/dev/e1000/igb_txrx.c | 4 +- 4 files changed, 123 insertions(+), 32 deletions(-) diff --git a/sys/dev/e1000/em_txrx.c b/sys/dev/e1000/em_txrx.c index f2b48d6518f7..6ac41816b043 100644 --- a/sys/dev/e1000/em_txrx.c +++ b/sys/dev/e1000/em_txrx.c @@ -476,6 +476,8 @@ em_isc_txd_flush(void *arg, uint16_t txqid, qidx_t pidx) struct tx_ring *txr = &que->txr; E1000_WRITE_REG(&sc->hw, E1000_TDT(txr->me), pidx); + if (sc->hw.mac.type >= e1000_82540) + em_aim_publish(txr); } static int @@ -601,6 +603,8 @@ em_isc_rxd_flush(void *arg, uint16_t rxqid, uint8_t flid __unused, struct rx_ring *rxr = &que->rxr; E1000_WRITE_REG(&sc->hw, E1000_RDT(rxr->me), pidx); + if (sc->hw.mac.type >= e1000_82540) + em_aim_publish_rx(rxr); } static int @@ -679,7 +683,6 @@ lem_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri) len = le16toh(rxd->length); ri->iri_len += len; - rxr->rx_bytes += len; eop = (status & E1000_RXD_STAT_EOP) != 0; @@ -701,6 +704,7 @@ lem_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri) i++; } while (!eop); + rxr->rx_bytes += ri->iri_len; rxr->rx_packets++; if (scctx->isc_capenable & IFCAP_RXCSUM) @@ -745,7 +749,6 @@ em_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri) len = le16toh(rxd->wb.upper.length); ri->iri_len += len; - rxr->rx_bytes += len; eop = (staterr & E1000_RXD_STAT_EOP) != 0; @@ -766,6 +769,7 @@ em_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri) i++; } while (!eop); + rxr->rx_bytes += ri->iri_len; rxr->rx_packets++; if (scctx->isc_capenable & IFCAP_RXCSUM) diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c index 1e54d5ea998d..3fa5a7ed9a5b 100644 --- a/sys/dev/e1000/if_em.c +++ b/sys/dev/e1000/if_em.c @@ -462,7 +462,7 @@ static int em_get_rs(SYSCTL_HANDLER_ARGS); static void em_print_debug_info(struct e1000_softc *); static int em_is_valid_ether_addr(u8 *); static void em_newitr(struct e1000_softc *, struct em_rx_queue *, - struct tx_ring *, struct rx_ring *); + struct rx_ring *); static bool em_automask_tso(if_ctx_t); static int em_sysctl_tso_tcp_flags_mask(SYSCTL_HANDLER_ARGS); static int em_sysctl_int_delay(SYSCTL_HANDLER_ARGS); @@ -1641,6 +1641,47 @@ em_if_init(if_ctx_t ctx) } } +/* + * RX publishes its byte and packet counters as one snapshot when iflib + * returns descriptors to hardware. This also covers watchdog-driven RX + * processing, which can run while the interrupt vector is unmasked. + */ +static __inline void +em_aim_rx_delta(struct rx_ring *rxr, u32 *bytes, u32 *packets) +{ + uint64_t snapshot; + u32 now_bytes, now_packets; + + snapshot = atomic_load_acq_64(&rxr->rx_aim_snapshot); + now_bytes = snapshot >> 32; + now_packets = (u32)snapshot; + *bytes = now_bytes - rxr->rx_bytes_last; + *packets = now_packets - rxr->rx_packets_last; + rxr->rx_bytes_last = now_bytes; + rxr->rx_packets_last = now_packets; +} + +/* + * TX publishes its byte and packet counters as one snapshot at the doorbell, + * because encapsulation can overlap the interrupt filter. The two halves + * remain independent free running u32 counters, so their deltas are correct + * across wrap. + */ +static __inline void +em_aim_tx_delta(struct tx_ring *txr, u32 *bytes, u32 *packets) +{ + uint64_t snapshot; + u32 now_bytes, now_packets; + + snapshot = atomic_load_acq_64(&txr->tx_aim_snapshot); + now_bytes = snapshot >> 32; + now_packets = (u32)snapshot; + *bytes = now_bytes - txr->tx_bytes_last; + *packets = now_packets - txr->tx_packets_last; + txr->tx_bytes_last = now_bytes; + txr->tx_packets_last = now_packets; +} + enum itr_latency_target { itr_latency_disabled = 0, itr_latency_lowest = 1, @@ -1654,16 +1695,32 @@ enum itr_latency_target { *********************************************************************/ static void em_newitr(struct e1000_softc *sc, struct em_rx_queue *que, - struct tx_ring *txr, struct rx_ring *rxr) + struct rx_ring *rxr) { struct e1000_hw *hw = &sc->hw; - unsigned long bytes, bytes_per_packet, packets; - unsigned long rxbytes, rxpackets, txbytes, txpackets; + struct em_tx_queue *tx_que; + u32 bytes, bytes_per_packet, packets; + u32 ringbytes, ringpackets, rxbytes, rxpackets, txbytes, txpackets; u32 newitr; u8 nextlatency; + int i; - rxbytes = atomic_load_long(&rxr->rx_bytes); - txbytes = atomic_load_long(&txr->tx_bytes); + em_aim_rx_delta(rxr, &rxbytes, &rxpackets); + + /* + * A vector can service more than one TX ring when iflib is configured + * with unequal RX and TX queue counts. Sample every ring routed to + * this vector rather than treating the vector as a TX queue index. + */ + txbytes = txpackets = 0; + for (i = 0; i < sc->tx_num_queues; i++) { + tx_que = &sc->tx_queues[i]; + if (tx_que->msix != que->msix) + continue; + em_aim_tx_delta(&tx_que->txr, &ringbytes, &ringpackets); + txbytes += ringbytes; + txpackets += ringpackets; + } /* Idle, do nothing */ if (txbytes == 0 && rxbytes == 0) @@ -1686,15 +1743,13 @@ em_newitr(struct e1000_softc *sc, struct em_rx_queue *que, goto em_set_next_itr; } - bytes = bytes_per_packet = 0; + bytes = bytes_per_packet = packets = 0; /* Get largest values from the associated tx and rx ring */ - txpackets = atomic_load_long(&txr->tx_packets); if (txpackets != 0) { bytes = txbytes; bytes_per_packet = txbytes / txpackets; packets = txpackets; } - rxpackets = atomic_load_long(&rxr->rx_packets); if (rxpackets != 0) { bytes = lmax(bytes, rxbytes); bytes_per_packet = @@ -1816,7 +1871,6 @@ em_intr(void *arg) struct e1000_softc *sc = arg; struct e1000_hw *hw = &sc->hw; struct em_rx_queue *que = &sc->rx_queues[0]; - struct tx_ring *txr = &sc->tx_queues[0].txr; struct rx_ring *rxr = &que->rxr; if_ctx_t ctx = sc->ctx; u32 reg_icr; @@ -1855,13 +1909,7 @@ em_intr(void *arg) sc->rx_overruns++; if (hw->mac.type >= e1000_82540) - em_newitr(sc, que, txr, rxr); - - /* Reset state */ - txr->tx_bytes = 0; - txr->tx_packets = 0; - rxr->rx_bytes = 0; - rxr->rx_packets = 0; + em_newitr(sc, que, rxr); return (FILTER_SCHEDULE_THREAD); } @@ -1916,18 +1964,11 @@ em_msix_que(void *arg) { struct em_rx_queue *que = arg; struct e1000_softc *sc = que->sc; - struct tx_ring *txr = &sc->tx_queues[que->msix].txr; struct rx_ring *rxr = &que->rxr; ++que->irqs; - em_newitr(sc, que, txr, rxr); - - /* Reset state */ - txr->tx_bytes = 0; - txr->tx_packets = 0; - rxr->rx_bytes = 0; - rxr->rx_packets = 0; + em_newitr(sc, que, rxr); return (FILTER_SCHEDULE_THREAD); } @@ -3543,6 +3584,9 @@ em_if_tx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, /* Set up some basics */ struct tx_ring *txr = &que->txr; + KASSERT(__is_aligned(&txr->tx_aim_snapshot, sizeof(uint64_t)), + ("%s: misaligned TX AIM snapshot %p", __func__, + &txr->tx_aim_snapshot)); txr->sc = que->sc = sc; que->me = txr->me = i; @@ -3596,6 +3640,9 @@ em_if_rx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, for (i = 0, que = sc->rx_queues; i < nrxqsets; i++, que++) { /* Set up some basics */ struct rx_ring *rxr = &que->rxr; + KASSERT(__is_aligned(&rxr->rx_aim_snapshot, sizeof(uint64_t)), + ("%s: misaligned RX AIM snapshot %p", __func__, + &rxr->rx_aim_snapshot)); rxr->sc = que->sc = sc; rxr->que = que; que->me = rxr->me = i; diff --git a/sys/dev/e1000/if_em.h b/sys/dev/e1000/if_em.h index 56c28597fa22..007f5f42d5a7 100644 --- a/sys/dev/e1000/if_em.h +++ b/sys/dev/e1000/if_em.h @@ -408,8 +408,18 @@ struct tx_ring { /* Soft stats */ unsigned long tx_irq; - unsigned long tx_packets; - unsigned long tx_bytes; + + /* + * Free running AIM counters. The producer updates these while + * encapsulating packets, then publishes both together at the TX + * doorbell. The interrupt handler samples only the published value, + * so it cannot observe one counter without the other. + */ + u32 tx_packets; + u32 tx_bytes; + uint64_t tx_aim_snapshot __aligned(8); + u32 tx_packets_last; + u32 tx_bytes_last; /* Saved csum offloading context information */ int csum_flags; @@ -424,6 +434,15 @@ struct tx_ring { uint32_t csum_txd_lower; /* last field */ }; +static __inline void +em_aim_publish(struct tx_ring *txr) +{ + uint64_t snapshot; + + snapshot = ((uint64_t)txr->tx_bytes << 32) | txr->tx_packets; + atomic_store_rel_64(&txr->tx_aim_snapshot, snapshot); +} + /* * The Receive ring, one per rx queue */ @@ -443,13 +462,32 @@ struct rx_ring { /* Soft stats */ unsigned long rx_irq; unsigned long rx_discarded; - unsigned long rx_packets; - unsigned long rx_bytes; + + /* + * Free running AIM counters. RX publishes both together when iflib + * returns descriptors to hardware. The interrupt handler samples only + * the published value, so watchdog-driven RX processing cannot expose + * one counter without the other. + */ + u32 rx_packets; + u32 rx_bytes; + uint64_t rx_aim_snapshot __aligned(8); + u32 rx_packets_last; + u32 rx_bytes_last; /* Next requested ITR latency */ u8 rx_nextlatency; }; +static __inline void +em_aim_publish_rx(struct rx_ring *rxr) +{ + uint64_t snapshot; + + snapshot = ((uint64_t)rxr->rx_bytes << 32) | rxr->rx_packets; + atomic_store_rel_64(&rxr->rx_aim_snapshot, snapshot); +} + struct em_tx_queue { struct e1000_softc *sc; u32 msix; diff --git a/sys/dev/e1000/igb_txrx.c b/sys/dev/e1000/igb_txrx.c index fc690dcfc100..f6f462cfd577 100644 --- a/sys/dev/e1000/igb_txrx.c +++ b/sys/dev/e1000/igb_txrx.c @@ -304,6 +304,7 @@ igb_isc_txd_flush(void *arg, uint16_t txqid, qidx_t pidx) struct tx_ring *txr = &que->txr; E1000_WRITE_REG(&sc->hw, E1000_TDT(txr->me), pidx); + em_aim_publish(txr); } static int @@ -395,6 +396,7 @@ igb_isc_rxd_flush(void *arg, uint16_t rxqid, uint8_t flid __unused, struct rx_ring *rxr = &que->rxr; E1000_WRITE_REG(&sc->hw, E1000_RDT(rxr->me), pidx); + em_aim_publish_rx(rxr); } static int @@ -458,7 +460,6 @@ igb_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri) le32toh(rxd->wb.lower.lo_dword.data) & IGB_PKTTYPE_MASK; ri->iri_len += len; - rxr->rx_bytes += len; rxd->wb.upper.status_error = 0; eop = ((staterr & E1000_RXD_STAT_EOP) == E1000_RXD_STAT_EOP); @@ -487,6 +488,7 @@ igb_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri) i++; } while (!eop); + rxr->rx_bytes += ri->iri_len; rxr->rx_packets++; if ((scctx->isc_capenable & IFCAP_RXCSUM) != 0) From nobody Sun Jul 26 01:01:09 2026 X-Original-To: dev-commits-src-main@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 4h73MB0VPGz6mQPq for ; Sun, 26 Jul 2026 01:01:10 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h73M95lXZz3LWF for ; Sun, 26 Jul 2026 01:01:09 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785027669; 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=Lwr0j/YQo+99NO+UHWzuF+59Yyrwc3xzVS6+oal25DA=; b=Y1GMD2Fob3PTp8SXW9e0W2t8isgXLYnN5EGATyEqhKmkA29lERtiCDOgbfjYRZf0hyx/9x b+MJi/+Tk7i6CBvveEjz4oWu0lJHwDkK0+Zyati73yJbnldPqQpqEOfyZLjym2T8ugFLak GK4gAnxsLNZFOJGDWEKMLJpCNWA2OUjJkwiPWlvnw0rAb9bbUBhF4xYkl5oYwqgpDUt7Iq O1WcPEGnBJI+3VRVxs381VTe+HBz+z613CeiAxN6Oc9XtauWN4M0ZdP7d1Np37JqPkXyF0 FThplZFihnvnlZNtiQPwCrawWfgvhkR7odNc/ImF7MvhkrU4AimhLo+/uOKLLQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785027669; a=rsa-sha256; cv=none; b=n2D5TsPW/nbUi2uMokUGIhVzb+Gel/6k93412T8hlpxpatY7nZTzIYuYr5L2Tf4pgLZ+oI F5cFGe+OOwnF4v8vCIc/Umm1d5EXmCEjIxn1LNH+0BDNGN/c9b7QRUzZkkXKW439SfRvVs PtZLaTX/MshlF9DHZQupo3JjQMv5sPeCfcpZraXiPyldf/v/D+dQWEUtUwSYE+VBhjKpJV JPlQECGN5dcelk+e30snI9BZULVB6JEpgFNewRzdBLAmDjx3uzBbdS+vtpI1kDlp04iOof LoLaMZRZKSIUGzFYVSlh2Moj8mA1gBL3dyPFvbtgCew5G29V8BpewfjTEicNzg== 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=1785027669; 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=Lwr0j/YQo+99NO+UHWzuF+59Yyrwc3xzVS6+oal25DA=; b=wdkdghaGR8aIHFo0LFCc3St+zbD4JYFk1vWUxoSY4t6bFZLvMOUd+dgcx+lcnifO39sXBe 4scsL3agAT/eaWNvKGjVhHXt46XlZLgwy5quLOdLr5vhJ1GFyQjfhy/FfKVZSJ4DtKzW50 h8KyG1XNDrl1KGle94DeFlZcfpIMDhfkUtWnf1Bsj7pjM2gQUmshHbJTJCIAASHKo4TbO9 bzmDIp40TuWOLDSl0Mg26TxpWPsg1tTZQilfjUiC/HLfqIGrGCKF6fQi81yTYZWONQ9XdS SwlL2h8v/sgwZEhiJT2gKppZirXk6+k+TW37O5viGJ5MbhAsbS6bTVHwoDR2rA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h73M94btzzyvC for ; Sun, 26 Jul 2026 01:01:09 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 31fec by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Jul 2026 01:01:09 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 6ef368a29b11 - main - e1000: synchronize interrupt moderation state List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6ef368a29b11ebc769e7929566809b75ae2c1e90 Auto-Submitted: auto-generated Date: Sun, 26 Jul 2026 01:01:09 +0000 Message-Id: <6a655c55.31fec.4025fc65@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=6ef368a29b11ebc769e7929566809b75ae2c1e90 commit 6ef368a29b11ebc769e7929566809b75ae2c1e90 Author: Kevin Bowling AuthorDate: 2026-07-25 23:49:03 +0000 Commit: Kevin Bowling CommitDate: 2026-07-26 01:00:02 +0000 e1000: synchronize interrupt moderation state Keep the saved EITR and PBA values synchronized with hardware across reinitialization. Correct EITR encoding, decoding, and MSI-X register selection, and reject nonpositive fallback rates. Treat only sub-gigabit links as sub-gigabit and apply the packet-buffer fallback without permanently disabling AIM. MFC after: 1 week --- sys/dev/e1000/if_em.c | 56 +++++++++++++++++++++++++++++++++------------------ sys/dev/e1000/if_em.h | 6 ++++-- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c index 3fa5a7ed9a5b..40a5e9f75de9 100644 --- a/sys/dev/e1000/if_em.c +++ b/sys/dev/e1000/if_em.c @@ -496,6 +496,7 @@ static int em_get_regs(SYSCTL_HANDLER_ARGS); static void lem_smartspeed(struct e1000_softc *); static void igb_configure_queues(struct e1000_softc *); +static void igb_initialize_interrupt_rate(struct e1000_softc *); static void em_flush_desc_rings(struct e1000_softc *); @@ -968,6 +969,13 @@ em_if_attach_pre(if_ctx_t ctx) dev = iflib_get_dev(ctx); sc = iflib_get_softc(ctx); + if (em_max_interrupt_rate <= 0) { + device_printf(dev, + "Invalid max_interrupt_rate %d; using default %d\n", + em_max_interrupt_rate, EM_INTS_DEFAULT); + em_max_interrupt_rate = EM_INTS_DEFAULT; + } + sc->ctx = sc->osdep.ctx = ctx; sc->dev = sc->osdep.dev = dev; scctx = sc->shared = iflib_get_softc_ctx(ctx); @@ -1622,6 +1630,8 @@ em_if_init(if_ctx_t ctx) /* Set up queue routing */ igb_configure_queues(sc); } + if (sc->hw.mac.type >= igb_mac_min) + igb_initialize_interrupt_rate(sc); /* this clears any pending interrupts */ E1000_READ_REG(&sc->hw, E1000_ICR); @@ -1732,14 +1742,13 @@ em_newitr(struct e1000_softc *sc, struct em_rx_queue *que, nextlatency = rxr->rx_nextlatency; /* Use half default (4K) ITR if sub-gig */ - if (sc->link_speed != 1000) { + if (sc->link_speed < SPEED_1000) { newitr = EM_INTS_4K; goto em_set_next_itr; } /* Want at least enough packet buffer for two frames to AIM */ if (sc->shared->isc_max_frame_size * 2 > (sc->pba << 10)) { newitr = em_max_interrupt_rate; - sc->enable_aim = 0; goto em_set_next_itr; } @@ -2627,7 +2636,7 @@ igb_configure_queues(struct e1000_softc *sc) struct e1000_hw *hw = &sc->hw; struct em_rx_queue *rx_que; struct em_tx_queue *tx_que; - u32 tmp, ivar = 0, newitr = 0; + u32 tmp, ivar = 0; /* First turn on RSS capability */ if (hw->mac.type != e1000_82575) @@ -2751,22 +2760,28 @@ igb_configure_queues(struct e1000_softc *sc) break; } - /* Set the igb starting interrupt rate */ - if (em_max_interrupt_rate > 0) { - newitr = IGB_INTS_TO_EITR(em_max_interrupt_rate); + return; +} - if (hw->mac.type == e1000_82575) - newitr |= newitr << 16; - else - newitr |= E1000_EITR_CNT_IGNR; +static void +igb_initialize_interrupt_rate(struct e1000_softc *sc) +{ + struct e1000_hw *hw = &sc->hw; + struct em_rx_queue *rx_que; + u32 newitr; - for (int i = 0; i < sc->rx_num_queues; i++) { - rx_que = &sc->rx_queues[i]; - E1000_WRITE_REG(hw, E1000_EITR(rx_que->msix), newitr); - } - } + newitr = IGB_INTS_TO_EITR(em_max_interrupt_rate); + if (hw->mac.type == e1000_82575) + newitr |= newitr << 16; + else + newitr |= E1000_EITR_CNT_IGNR; - return; + for (int i = 0; i < sc->rx_num_queues; i++) { + rx_que = &sc->rx_queues[i]; + rx_que->itr_setting = newitr; + E1000_WRITE_REG(hw, E1000_EITR(rx_que->msix), + rx_que->itr_setting); + } } static void @@ -3300,9 +3315,10 @@ em_reset(if_ctx_t ctx) hw->fc.refresh_time = 0xFFFF; /* Jumbos need adjusted PBA */ if (if_getmtu(ifp) > ETHERMTU) - E1000_WRITE_REG(hw, E1000_PBA, 12); + pba = E1000_PBA_12K; else - E1000_WRITE_REG(hw, E1000_PBA, 26); + pba = E1000_PBA_26K; + E1000_WRITE_REG(hw, E1000_PBA, pba); break; case e1000_82575: case e1000_82576: @@ -5017,7 +5033,7 @@ em_sysctl_interrupt_rate_handler(SYSCTL_HANDLER_ARGS) tque = oidp->oid_arg1; hw = &tque->sc->hw; if (hw->mac.type >= igb_mac_min) - reg = E1000_READ_REG(hw, E1000_EITR(tque->me)); + reg = E1000_READ_REG(hw, E1000_EITR(tque->msix)); else if (hw->mac.type == e1000_82574 && tque->sc->intr_type == IFLIB_INTR_MSIX) reg = E1000_READ_REG(hw, E1000_EITR_82574(tque->msix)); @@ -5044,7 +5060,7 @@ em_sysctl_interrupt_rate_handler(SYSCTL_HANDLER_ARGS) } else { usec = (reg & IGB_QVECTOR_MASK); if (usec > 0) - rate = IGB_INTS_TO_EITR(usec); + rate = IGB_EITR_TO_INTS(usec); else rate = 0; } diff --git a/sys/dev/e1000/if_em.h b/sys/dev/e1000/if_em.h index 007f5f42d5a7..594399498db3 100644 --- a/sys/dev/e1000/if_em.h +++ b/sys/dev/e1000/if_em.h @@ -253,8 +253,10 @@ #define IGB_EITR_DIVIDEND 1000000 #define IGB_EITR_SHIFT 2 #define IGB_QVECTOR_MASK 0x7FFC -#define IGB_INTS_TO_EITR(i) (((IGB_EITR_DIVIDEND/i) & IGB_QVECTOR_MASK) << \ - IGB_EITR_SHIFT) +#define IGB_INTS_TO_EITR(i) \ + (((IGB_EITR_DIVIDEND / (i)) << IGB_EITR_SHIFT) & IGB_QVECTOR_MASK) +#define IGB_EITR_TO_INTS(i) ((IGB_EITR_DIVIDEND << IGB_EITR_SHIFT) / \ + ((i) & IGB_QVECTOR_MASK)) #define IGB_LINK_ITR 2000 #define I210_LINK_DELAY 1000 From nobody Sun Jul 26 01:01:10 2026 X-Original-To: dev-commits-src-main@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 4h73MC62Q7z6mQYl for ; Sun, 26 Jul 2026 01:01:11 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h73MB6v2Bz3LqC for ; Sun, 26 Jul 2026 01:01:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785027671; 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=VYF4OWuWx6rHX67jmpVR2Xhy9FjG0GR4CGvNRH8P+Ec=; b=xzyiRTorE6YDE3ts1dm4A4sQe7zJfD0zV4D9WO7lCjXaxxm8qL737pKpX9W+6wlHRbcws1 Z1VbEghD7hnVS/7/F8GYTsCY1eZtIY1fdiEWJ33La5VxADUmhuRtGO/QBTlPdftmlwLQMY 3NFZj188gV5jZgXRM9zvCjHC3S5AhWwhuiZyiJi2463oe6fTy+kN2ZijmO+5AmbaCKDoYK aLQx9DRCuzyhcLc4FpS6dci2UdT2cmS6l6lb0H8lMSJcKZky2m9OdOpzJW25Lt/HmTGcYj zsDHnbVZ4WPJm2e/1T66XZeCMQkglHxMcF/NHJLKqTm3YGyLJyy3YtfyPNTxrA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785027671; a=rsa-sha256; cv=none; b=KxEingAnwBqtSIIeP5lg6Wy86pujkkLmsD/ZDqDOF66Eimg9R9QDxm/HtdP1/coDJbncFp 3gA7LTHYEz6AI0ZXSyz6wYhXxs8nAcCkSlyaOJOclXHfwcpj95LCz/qSr3M9ExP6goDp28 mthPD4iwemaklkJG4ROGkQzywLkdJXqtx3OH2RwtNV7kgYaaZ1DY42m40hP9NQVeKWs1iU 85fH2KCLtX1EvcGIogZMRrpFpEULoE6DZQb9jXu8Iy76pRSakTlkPf31tnSrOVo9zfulrD KP6cZbRTWBGY2QEPs97SjszbjHZ/fFQERMDRsELW68AGGoWgiW2IbRfsA883uw== 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=1785027671; 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=VYF4OWuWx6rHX67jmpVR2Xhy9FjG0GR4CGvNRH8P+Ec=; b=msgPYQNcuH4L48JuKGlloW+5hlyzRee+Rv6F23k9+oTADnUL53zusYiun6vtqnnGuxaFIY zN6grC9nwJ/O1pbMg1LpzOZCxL3Vy/+GJJ+dR1MkoipFF2oNU5pF2aD0CVgg+MCNxe6s/G cwuI1c2wEZ3QP+ADjBIgcHBzEbzCS6I5/yR63et4WVqyFWP+luLUsEO7xs56CHbZRaYeMf DloTm6ha8U/R1xSoR00LaTj/7fT2mlYg7ty97OhdCYPANiQQZ3TgEtCq1HmACcEDqQdhtO 4SDfnToqS8YTG0/rKO+qsFiVavMzqAAubjXXgunLu9jHG/9C5ewYf5+3MvQ6hQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h73MB5QySzyvF for ; Sun, 26 Jul 2026 01:01:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 32e36 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Jul 2026 01:01:10 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: dc4a5087b160 - main - e1000: restore packet-size AIM List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: dc4a5087b160c1a94d135ab636642defe2c71c20 Auto-Submitted: auto-generated Date: Sun, 26 Jul 2026 01:01:10 +0000 Message-Id: <6a655c56.32e36.3041c7cc@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=dc4a5087b160c1a94d135ab636642defe2c71c20 commit dc4a5087b160c1a94d135ab636642defe2c71c20 Author: Kevin Bowling AuthorDate: 2026-07-25 23:49:31 +0000 Commit: Kevin Bowling CommitDate: 2026-07-26 01:00:02 +0000 e1000: restore packet-size AIM Restore the packet-size calculation introduced in a69ed8dfb381 and used by igb(4) until the iflib conversion in f2d6ace4a684. It derives interrupt holdoff from average packet size, so RSS queue count does not change its behavior. The calculation follows the pre-iflib code. Retain the current normal and low-latency rate caps, and keep the current setting when an interval has no usable sample. Fixes: 3e501ef89667 ("e1000: Re-add AIM") MFC after: 1 week --- sys/dev/e1000/if_em.c | 170 +++++++++++++++++++------------------------------- sys/dev/e1000/if_em.h | 11 +++- 2 files changed, 73 insertions(+), 108 deletions(-) diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c index 40a5e9f75de9..e447008eafff 100644 --- a/sys/dev/e1000/if_em.c +++ b/sys/dev/e1000/if_em.c @@ -1692,12 +1692,60 @@ em_aim_tx_delta(struct tx_ring *txr, u32 *bytes, u32 *packets) txr->tx_packets_last = now_packets; } -enum itr_latency_target { - itr_latency_disabled = 0, - itr_latency_lowest = 1, - itr_latency_low = 2, - itr_latency_bulk = 3 -}; +/********************************************************************* + * + * Do Adaptive Interrupt Moderation: + * - Calculate based on average size over the last interval + * + * Returns interrupts per second rather than a register value, so that the + * caller's EM_INTS_TO_ITR()/IGB_INTS_TO_EITR() conversion applies, or zero + * if the interval carried no packet to measure. + * + *********************************************************************/ +static u32 +em_ring_itr(struct e1000_softc *sc, u32 rxbytes, u32 rxpackets, u32 txbytes, + u32 txpackets) +{ + u32 newitr = 0; + + if (txbytes && txpackets) + newitr = txbytes / txpackets; + if (rxbytes && rxpackets) + newitr = max(newitr, rxbytes / rxpackets); + + /* + * No packet was observed, so there is no size to work from. Report no + * observation and let the caller keep the rate it already has. + */ + if (newitr == 0) + return (0); + + newitr += 24; /* account for hardware frame, crc */ + /* set an upper boundary */ + newitr = min(newitr, 3000); + /* Be nice to the mid range */ + if ((newitr > 300) && (newitr < 1200)) + newitr = (newitr / 3); + else + newitr = (newitr / 2); + + /* The value above was written straight to EITR; make it a rate */ + newitr = EM_AIM_DIVIDEND / newitr; + + /* + * Cap the rate: enable_aim=1 is the normal setting, enable_aim=2 opts + * into the low latency end. The original was unbounded and would ask + * for ~95k ints/s on minimum sized frames. There is deliberately no + * floor, so jumbo traffic settles near 2.7k ints/s. + */ + if (sc->enable_aim == 1) + newitr = min(newitr, EM_INTS_20K); + else + newitr = min(newitr, EM_INTS_70K); + + return (newitr); +} + /********************************************************************* * * Helper to calculate next (E)ITR value for AIM @@ -1709,10 +1757,8 @@ em_newitr(struct e1000_softc *sc, struct em_rx_queue *que, { struct e1000_hw *hw = &sc->hw; struct em_tx_queue *tx_que; - u32 bytes, bytes_per_packet, packets; u32 ringbytes, ringpackets, rxbytes, rxpackets, txbytes, txpackets; u32 newitr; - u8 nextlatency; int i; em_aim_rx_delta(rxr, &rxbytes, &rxpackets); @@ -1736,108 +1782,22 @@ em_newitr(struct e1000_softc *sc, struct em_rx_queue *que, if (txbytes == 0 && rxbytes == 0) return; - newitr = 0; - - if (sc->enable_aim) { - nextlatency = rxr->rx_nextlatency; - + if (sc->enable_aim == 0) { + newitr = em_max_interrupt_rate; + } else if (sc->link_speed < SPEED_1000) { /* Use half default (4K) ITR if sub-gig */ - if (sc->link_speed < SPEED_1000) { - newitr = EM_INTS_4K; - goto em_set_next_itr; - } - /* Want at least enough packet buffer for two frames to AIM */ - if (sc->shared->isc_max_frame_size * 2 > (sc->pba << 10)) { - newitr = em_max_interrupt_rate; - goto em_set_next_itr; - } - - bytes = bytes_per_packet = packets = 0; - /* Get largest values from the associated tx and rx ring */ - if (txpackets != 0) { - bytes = txbytes; - bytes_per_packet = txbytes / txpackets; - packets = txpackets; - } - if (rxpackets != 0) { - bytes = lmax(bytes, rxbytes); - bytes_per_packet = - lmax(bytes_per_packet, rxbytes / rxpackets); - packets = lmax(packets, rxpackets); - } - - /* Latency state machine */ - switch (nextlatency) { - case itr_latency_disabled: /* Bootstrapping */ - nextlatency = itr_latency_low; - break; - case itr_latency_lowest: /* 70k ints/s */ - /* TSO and jumbo frames */ - if (bytes_per_packet > 8000) - nextlatency = itr_latency_bulk; - else if ((packets < 5) && (bytes > 512)) - nextlatency = itr_latency_low; - break; - case itr_latency_low: /* 20k ints/s */ - if (bytes > 10000) { - /* Handle TSO */ - if (bytes_per_packet > 8000) - nextlatency = itr_latency_bulk; - else if ((packets < 10) || - (bytes_per_packet > 1200)) - nextlatency = itr_latency_bulk; - else if (packets > 35) - nextlatency = itr_latency_lowest; - } else if (bytes_per_packet > 2000) { - nextlatency = itr_latency_bulk; - } else if (packets < 3 && bytes < 512) { - nextlatency = itr_latency_lowest; - } - break; - case itr_latency_bulk: /* 4k ints/s */ - if (bytes > 25000) { - if (packets > 35) - nextlatency = itr_latency_low; - } else if (bytes < 1500) - nextlatency = itr_latency_low; - break; - default: - nextlatency = itr_latency_low; - device_printf(sc->dev, - "Unexpected newitr transition %d\n", nextlatency); - break; - } - - /* Trim itr_latency_lowest for default AIM setting */ - if (sc->enable_aim == 1 && nextlatency == itr_latency_lowest) - nextlatency = itr_latency_low; - - /* Request new latency */ - rxr->rx_nextlatency = nextlatency; - } else { - /* We may have toggled to AIM disabled */ - nextlatency = itr_latency_disabled; - rxr->rx_nextlatency = nextlatency; - } - - /* ITR state machine */ - switch(nextlatency) { - case itr_latency_lowest: - newitr = EM_INTS_70K; - break; - case itr_latency_low: - newitr = EM_INTS_20K; - break; - case itr_latency_bulk: newitr = EM_INTS_4K; - break; - case itr_latency_disabled: - default: + } else if (sc->shared->isc_max_frame_size * 2 > (sc->pba << 10)) { + /* Want at least enough packet buffer for two frames to AIM */ newitr = em_max_interrupt_rate; - break; + } else { + newitr = em_ring_itr(sc, rxbytes, rxpackets, txbytes, + txpackets); + /* No usable observation; leave the rate where it is */ + if (newitr == 0) + return; } -em_set_next_itr: if (hw->mac.type >= igb_mac_min) { newitr = IGB_INTS_TO_EITR(newitr); diff --git a/sys/dev/e1000/if_em.h b/sys/dev/e1000/if_em.h index 594399498db3..9dfe23453428 100644 --- a/sys/dev/e1000/if_em.h +++ b/sys/dev/e1000/if_em.h @@ -258,6 +258,14 @@ #define IGB_EITR_TO_INTS(i) ((IGB_EITR_DIVIDEND << IGB_EITR_SHIFT) / \ ((i) & IGB_QVECTOR_MASK)) +/* + * The average packet size calculation in em_ring_itr() yields an EITR + * interval field value. That field is quarter microsecond granular (see + * IGB_EITR_SHIFT), so an interval of V is 1000000 / (V / 4) interrupts per + * second. + */ +#define EM_AIM_DIVIDEND (IGB_EITR_DIVIDEND << IGB_EITR_SHIFT) + #define IGB_LINK_ITR 2000 #define I210_LINK_DELAY 1000 @@ -476,9 +484,6 @@ struct rx_ring { uint64_t rx_aim_snapshot __aligned(8); u32 rx_packets_last; u32 rx_bytes_last; - - /* Next requested ITR latency */ - u8 rx_nextlatency; }; static __inline void From nobody Sun Jul 26 01:01:11 2026 X-Original-To: dev-commits-src-main@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 4h73MD5Y2Mz6mQ3r for ; Sun, 26 Jul 2026 01:01:12 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h73MD3Fgmz3LWW for ; Sun, 26 Jul 2026 01:01:12 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785027672; 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=BCzzaBHPEf7IUHvlOz9Xyyk122g+WP6kwaj5tfgPHiE=; b=jsdsUmsbLl3NXhZCjJkUIogbOID2ziz4Y6jFGBUaW3jAWDwFxajLA48kKen5XOEnXXqIx4 0HL/ai1RdssTVlmUd7hx9tqgghHHSVx8kZZdE4SECADLy1av6pwoJ7DAB+P6Ah9QlkZMHa ddLWqPqJnDjDMFo5FCc8ApfcdgUHM12JXcxJUt3w5jhsvAYltJrpncu6Xzwl4nOXKdlBHO l7r7QPfY99vF2OwQdrKinzCnSbYNshbaJMczxoRM1dMbMlD3qAukxR26OdWYpgaQOdf8Z4 nP56tob6Zs0Py9FE0ulHpDHwP5sDb0DmcWrsfgxN0eksLHdajOdi7Ny2dP+rew== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785027672; a=rsa-sha256; cv=none; b=QebCVEir60L9Mp3p0UvjVMrpLCLWYPGrDS6MlXxaVa/o2DxPbQgLKBMTup9728dZXpjnKG OE02PeJDnzIvrBjPFBYqVvuD2DSEawCsUTW4+/eHgPIP+tnASND+qTeo/1s1KMbEISOhUF ahL2/XXy6cC+VrzyKVyk8vYp8nkHdVJzBA4cE5bsWk2fh0Gh99Vbayot3YSqaFvz87FFjJ cd003mlL35owRq/J+x8Sa1pjiMlGzxNdWgOXyIcylQhfcK9rpvOi2bvD6XftbSotZN0tz1 8fR3Lg2NLD1116FSg/4QB5J50W4I4+EOMkC6K0cHFI/TiuBp3SWilaI5+Yoauw== 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=1785027672; 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=BCzzaBHPEf7IUHvlOz9Xyyk122g+WP6kwaj5tfgPHiE=; b=kyKLjBXMIFWt9z584ZqDhOkTJhrfcmlyS3xEaVAulUyy52aQIxOttlC86CIkCOsDC2GGnT Xbyfn6wE5hO13AkqcmZAoxL6v/ILPOr5/Ve6mz7HjLus6DV+A34Ujm4GJ3v9wBJNbqJ2DG 4I7m+NahRHqghzG6rEtseD+ERAYIqELRTOxZqGN1+6iwvDD5n9VitmD6jLOYBwPxDHrFSV vwTU1PtOP1Fdeznm7z3WpSgilwRLQZMqWNzBs0HuxeLNLfu4ryT+4kKlymIy6zt3ynWcal XwbAN2vi+JXSG6QtZp5VYSGSe1Nw2i8rIdD1Fyt45KdAjK4ydrL8gXMdc6nDXg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h73MC6DvdzyvG for ; Sun, 26 Jul 2026 01:01:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 32e3a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Jul 2026 01:01:11 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 072e0983d7bc - main - e1000: count TSO wire segments in the AIM counters List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 072e0983d7bce80356740324973993393e77023a Auto-Submitted: auto-generated Date: Sun, 26 Jul 2026 01:01:11 +0000 Message-Id: <6a655c57.32e3a.4118efce@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=072e0983d7bce80356740324973993393e77023a commit 072e0983d7bce80356740324973993393e77023a Author: Kevin Bowling AuthorDate: 2026-07-25 12:33:38 +0000 Commit: Kevin Bowling CommitDate: 2026-07-26 01:00:02 +0000 e1000: count TSO wire segments in the AIM counters The transmit paths billed one packet of ipi_len bytes per request. For TSO that is the whole unsegmented payload, up to 64KB, so the average size the moderation calculation sees is not a size that appears on the wire. Count the segments the hardware will put on the wire and the header each of them carries. Non-TSO accounting is unchanged. MFC after: 1 week --- sys/dev/e1000/em_txrx.c | 21 +++++++++++++++++++-- sys/dev/e1000/igb_txrx.c | 21 +++++++++++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/sys/dev/e1000/em_txrx.c b/sys/dev/e1000/em_txrx.c index 6ac41816b043..b2a515027479 100644 --- a/sys/dev/e1000/em_txrx.c +++ b/sys/dev/e1000/em_txrx.c @@ -461,10 +461,27 @@ em_isc_txd_encap(void *arg, if_pkt_info_t pi) first, pidx_last, i); pi->ipi_new_pidx = i; - /* Sent data accounting for AIM */ + /* + * Sent data accounting for AIM. For TSO, ipi_len is the whole + * unsegmented payload, which is not a size the moderation + * calculation can use. Count the segments the hardware will put on + * the wire and the header each of them carries, so that the average + * it sees is a wire packet. + */ + if (do_tso && pi->ipi_tso_segsz != 0) { + u32 hdrlen, segs; + + hdrlen = pi->ipi_ehdrlen + pi->ipi_ip_hlen + pi->ipi_tcp_hlen; + if (pi->ipi_len > hdrlen) { + segs = howmany(pi->ipi_len - hdrlen, pi->ipi_tso_segsz); + txr->tx_bytes += pi->ipi_len + (segs - 1) * hdrlen; + txr->tx_packets += segs; + return (0); + } + } + txr->tx_bytes += pi->ipi_len; ++txr->tx_packets; - return (0); } diff --git a/sys/dev/e1000/igb_txrx.c b/sys/dev/e1000/igb_txrx.c index f6f462cfd577..57f098d2266d 100644 --- a/sys/dev/e1000/igb_txrx.c +++ b/sys/dev/e1000/igb_txrx.c @@ -289,10 +289,27 @@ igb_isc_txd_encap(void *arg, if_pkt_info_t pi) txd->read.cmd_type_len |= htole32(E1000_TXD_CMD_EOP | txd_flags); pi->ipi_new_pidx = i; - /* Sent data accounting for AIM */ + /* + * Sent data accounting for AIM. For TSO, ipi_len is the whole + * unsegmented payload, which is not a size the moderation calculation + * can use. Count the segments the hardware will put on the wire and + * the header each of them carries, so that the average it sees is a + * wire packet. + */ + if ((pi->ipi_csum_flags & CSUM_TSO) && pi->ipi_tso_segsz != 0) { + u32 hdrlen, segs; + + hdrlen = pi->ipi_ehdrlen + pi->ipi_ip_hlen + pi->ipi_tcp_hlen; + if (pi->ipi_len > hdrlen) { + segs = howmany(pi->ipi_len - hdrlen, pi->ipi_tso_segsz); + txr->tx_bytes += pi->ipi_len + (segs - 1) * hdrlen; + txr->tx_packets += segs; + return (0); + } + } + txr->tx_bytes += pi->ipi_len; ++txr->tx_packets; - return (0); } From nobody Sun Jul 26 01:01:12 2026 X-Original-To: dev-commits-src-main@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 4h73MF6Mkmz6mQj3 for ; Sun, 26 Jul 2026 01:01:13 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h73MF1xDFz3Lbl for ; Sun, 26 Jul 2026 01:01:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785027673; 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=NDhU27i/hQjDBD1wrn6qUkaO+LIvMICdvV+SaYldYPg=; b=d3vJRzRab+nFfDHa0P1mcMUsevDzxATlL5mr0Y5UIZhHTXSLUyChl5RbYDyGcNDAvnG1kF r9PzdFljYUJRtVZsSvKE4RNVQ/5N6kXr0utVA/INcFks8tmyku8mlHcoIBG9RLElMpu0TQ XKNdCIc/ZkPYqVBmkhTIk0+qbaWxlWC/Wg5glmYit5J6H+TadSKJLp896FKkZlJxzTaEvw fl9+zk+ZNJ6gdlEJurW+NrTlAXRF5yixaKEO7lMMO0xVp5gMa6QXvIzg12VY10Gv8/BtUj Bt0Ilr45SBD4PmjbTPz1r5kjRz7akT6OIURaaV0FSrUhcQkfEKivhV342KzJLw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785027673; a=rsa-sha256; cv=none; b=Qv27HgPAvcBnBf/UlCQEgoHkxiInMI+jrgKlRgYUSC6gW9z4M8tMQx1em3iO7TMvwu/I5g mV4iZAHqa+77TbQpas8CVhNGQslNISdEjUV9F18NTtKl6B4PLEJdlmR2MfxQNoxf7orWr6 MQyq2v7iQW+5D6iQr5VDO1au4ERcscsjUzmawa1vi+Ed5fQkoK0QHwF7DbNkRA5ddzqytN XcKVdNm1rl5TA0rElPuZTvhsvGxMedq56L/MfOngkhjatUxYmC//Ff4ksYywx2Ujqk25mQ +p+RLfudosTHhKTrhwTGu6sezmWG69fTIy4dhb0ov1qflirUz1qXvnWwo/fz5w== 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=1785027673; 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=NDhU27i/hQjDBD1wrn6qUkaO+LIvMICdvV+SaYldYPg=; b=HJenNTlFo1JiD+3Z0qcXPSGhEW10JpycUpAHqJmPnJN10uWZHLecd4DOSUT1pYkUDFp65f bQz/ILfduxsEQQ6ixPt5Gil8ruXwtCubv3XY00GWnfHs8qGT0jhZSXJZoKPY0DwT2h8vwX mx+gsm461agRO14OwTvaSMakKUgIO3clXvRb8Zn1fL3BZzpiMtB90WmsnYcFiF94aYXbjv dWCSFosr4UIeKgUcRMZDdWu7eSq2oFdBXViVRh6RuEd7HGfwL+OEK5vf7GqjMqhTW+WbMy OVH+t28oOPhjXlr/pVqTOmMqm0cKz+Ec0aTviJJv9wCeoyR+ZDbyiqMX3/pWYA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h73MD71tgz10Lp for ; Sun, 26 Jul 2026 01:01:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 31bc0 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Jul 2026 01:01:12 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: b6b379b94781 - main - em(4): document adaptive interrupt moderation List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b6b379b94781da5d4328f6f57273fbe7bd9dc687 Auto-Submitted: auto-generated Date: Sun, 26 Jul 2026 01:01:12 +0000 Message-Id: <6a655c58.31bc0.232cf28f@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=b6b379b94781da5d4328f6f57273fbe7bd9dc687 commit b6b379b94781da5d4328f6f57273fbe7bd9dc687 Author: Kevin Bowling AuthorDate: 2026-07-25 22:09:48 +0000 Commit: Kevin Bowling CommitDate: 2026-07-26 01:00:02 +0000 em(4): document adaptive interrupt moderation Describe the disabled, adaptive, and low-latency settings and their interrupt-rate tradeoffs. MFC after: 1 week --- share/man/man4/em.4 | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/share/man/man4/em.4 b/share/man/man4/em.4 index 0e9c08560545..4835d41320b2 100644 --- a/share/man/man4/em.4 +++ b/share/man/man4/em.4 @@ -272,6 +272,20 @@ interrupt is generated. .It Va hw.em.max_interrupt_rate Maximum interrupts per second. The default value is 8000. +This is the rate used when adaptive interrupt moderation is disabled, and +the fallback when it has no usable measurement. +.It Va hw.em.enable_aim +Adaptive interrupt moderation. +The interrupt rate is derived from the average size of the packets seen +since the previous interrupt, so that bulk traffic is coalesced while small +packet traffic keeps its latency. +A value of 0 disables it and pins the rate to +.Va hw.em.max_interrupt_rate , +1 selects the normal range, and 2 selects the low-latency range. +The default value is 1. +Setting 2 raises the interrupt rate substantially on small packet workloads +and is rarely a win; prefer the default unless latency has been measured to +matter more than the additional interrupt load. .It Va hw.em.rx_process_limit Maximum number of received packets to process at a time, -1 means unlimited. The default value is 100. From nobody Sun Jul 26 01:01:15 2026 X-Original-To: dev-commits-src-main@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 4h73MH5HTXz6mQTg for ; Sun, 26 Jul 2026 01:01:15 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h73MH2Xn3z3Lrg for ; Sun, 26 Jul 2026 01:01:15 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785027675; 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=GjZXaGMf4h3WE2l70yPREmAzYupmv9o6GeK0nrgwURc=; b=vZQzO58pJ+Xt2efVCYhZnigMc44DpQrHLUxlvzEAGxK/ApeaA28mmppqpLnqLridHlEIuC Ul0Z+kcTpOaoPoRGKTr0niW1fdYEdiem5tpFtqHzc+NzNu7PBy0IQF4I+NDp7xPaY2Vk31 w4cobkF6Sm0VqIxO0X1m13G+s7iXY05175lIDNv33ekfsyx1a68N+EOjitc3896RI0LR6O VmJXE5Lu2Kps/sqfbMwmsH291uSIPmN4OOWDtSU+o4xk9lExd0uQO1IR2lI4KqTCYW17Av 84pGF0mnb1VC3S61hzr7WC5tiL8wycBUow0DRgKi6gfwxygWXpe2BUkvnjzs8w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785027675; a=rsa-sha256; cv=none; b=B7can+Px+qRV3bqOfRSrYy/KqOBfcQ9dLLyI0JMOb0Ex52HrQegb3qanaVwHM6AkUwgUnE pLOUHWbtALEQXvbTp5TusVKdmSszDukMu2qeasEQuRTjE4VdlJoi/C3D0q/iVlinceB8se khn7lchSOAeZ4i8wM5ntL59uK8dYtENrP6Joxprm3f1svko9rucyVnz6ZelhmPhWd+CKGD OxmZ5VTus0mbMDIHSv2wdYnVEucWQb5omyff9yWkWH+huEu+aFWECorMjXK0tTu2/tVgsQ m5oKvWdW9JS1JzeIMzmumwfCGYO14/Y39jLZY58hFAb7LhPJM24JLaSB6QniLw== 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=1785027675; 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=GjZXaGMf4h3WE2l70yPREmAzYupmv9o6GeK0nrgwURc=; b=O8RHW0+L6UgaauFm9fKltSRBvlz+IRbrlgWLdBvEKFx+ZRGs1puf+Tg29126++4VLQLyCL dKQtF+EuHHIHa9Zn6mw2nNOmJXF6ITq+l+OE6qjc3EVgtey5+lQUB+ioZG8F/FslpQr5fZ 9FmZpD34g/x/kqPKQUlHdqxWaujrCA18OjYDudGO1RVYw1p6IxeQr5KXuzfL9Az9gKV1TY oVdbokCl5Q2UYsMsfvxMo77zf9siQ5pDItprfgziKNmea5JR71Gk+uWmY2SbS01OSAiLRZ iZUIAeIPUhU3tyrYxOIftoWA4EifcknEhM7MhX9wfUy+64nK68My5QtxLW4byw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h73MH1FjLz10CL for ; Sun, 26 Jul 2026 01:01:15 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 309f4 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Jul 2026 01:01:15 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 2290ea7f4311 - main - igc: make AIM counter sampling coherent List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2290ea7f4311e899019fe77bf7c7775033af6b24 Auto-Submitted: auto-generated Date: Sun, 26 Jul 2026 01:01:15 +0000 Message-Id: <6a655c5b.309f4.8899d15@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=2290ea7f4311e899019fe77bf7c7775033af6b24 commit 2290ea7f4311e899019fe77bf7c7775033af6b24 Author: Kevin Bowling AuthorDate: 2026-07-25 23:57:42 +0000 Commit: Kevin Bowling CommitDate: 2026-07-26 01:00:02 +0000 igc: make AIM counter sampling coherent Sample free-running counters by delta instead of clearing them from the interrupt filter, which can race their producers. Publish byte and packet counts together at the TX and RX doorbells so each sample is coherent. Aggregate every TX ring assigned to the interrupt vector so unequal RX and TX queue counts are safe. Count RX bytes only after a frame is accepted. MFC after: 1 week --- sys/dev/igc/if_igc.c | 97 +++++++++++++++++++++++++++++++++++++------------- sys/dev/igc/if_igc.h | 45 ++++++++++++++++++++--- sys/dev/igc/igc_txrx.c | 4 ++- 3 files changed, 116 insertions(+), 30 deletions(-) diff --git a/sys/dev/igc/if_igc.c b/sys/dev/igc/if_igc.c index a4e5de2ae82a..d0e9ad3b7a8d 100644 --- a/sys/dev/igc/if_igc.c +++ b/sys/dev/igc/if_igc.c @@ -143,7 +143,7 @@ static int igc_get_rs(SYSCTL_HANDLER_ARGS); static void igc_print_debug_info(struct igc_softc *); static int igc_is_valid_ether_addr(u8 *); static void igc_neweitr(struct igc_softc *, struct igc_rx_queue *, - struct tx_ring *, struct rx_ring *); + struct rx_ring *); static int igc_sysctl_tso_tcp_flags_mask(SYSCTL_HANDLER_ARGS); /* Management and WOL Support */ static void igc_get_hw_control(struct igc_softc *); @@ -892,6 +892,47 @@ igc_if_init(if_ctx_t ctx) igc_set_eee_i225(&sc->hw, true, true, true); } +/* + * RX publishes its byte and packet counters as one snapshot when iflib + * returns descriptors to hardware. This also covers watchdog-driven RX + * processing, which can run while the interrupt vector is unmasked. + */ +static __inline void +igc_aim_rx_delta(struct rx_ring *rxr, u32 *bytes, u32 *packets) +{ + uint64_t snapshot; + u32 now_bytes, now_packets; + + snapshot = atomic_load_acq_64(&rxr->rx_aim_snapshot); + now_bytes = snapshot >> 32; + now_packets = (u32)snapshot; + *bytes = now_bytes - rxr->rx_bytes_last; + *packets = now_packets - rxr->rx_packets_last; + rxr->rx_bytes_last = now_bytes; + rxr->rx_packets_last = now_packets; +} + +/* + * TX publishes its byte and packet counters as one snapshot at the doorbell, + * because encapsulation can overlap the interrupt filter. The two halves + * remain independent free running u32 counters, so their deltas are correct + * across wrap. + */ +static __inline void +igc_aim_tx_delta(struct tx_ring *txr, u32 *bytes, u32 *packets) +{ + uint64_t snapshot; + u32 now_bytes, now_packets; + + snapshot = atomic_load_acq_64(&txr->tx_aim_snapshot); + now_bytes = snapshot >> 32; + now_packets = (u32)snapshot; + *bytes = now_bytes - txr->tx_bytes_last; + *packets = now_packets - txr->tx_packets_last; + txr->tx_bytes_last = now_bytes; + txr->tx_packets_last = now_packets; +} + enum eitr_latency_target { eitr_latency_disabled = 0, eitr_latency_lowest = 1, @@ -905,16 +946,32 @@ enum eitr_latency_target { *********************************************************************/ static void igc_neweitr(struct igc_softc *sc, struct igc_rx_queue *que, - struct tx_ring *txr, struct rx_ring *rxr) + struct rx_ring *rxr) { struct igc_hw *hw = &sc->hw; - unsigned long bytes, bytes_per_packet, packets; - unsigned long rxbytes, rxpackets, txbytes, txpackets; + struct igc_tx_queue *tx_que; + u32 bytes, bytes_per_packet, packets; + u32 ringbytes, ringpackets, rxbytes, rxpackets, txbytes, txpackets; u32 neweitr; u8 nextlatency; + int i; - rxbytes = atomic_load_long(&rxr->rx_bytes); - txbytes = atomic_load_long(&txr->tx_bytes); + igc_aim_rx_delta(rxr, &rxbytes, &rxpackets); + + /* + * A vector can service more than one TX ring when iflib is configured + * with unequal RX and TX queue counts. Sample every ring routed to + * this vector rather than treating the vector as a TX queue index. + */ + txbytes = txpackets = 0; + for (i = 0; i < sc->tx_num_queues; i++) { + tx_que = &sc->tx_queues[i]; + if (tx_que->msix != que->msix) + continue; + igc_aim_tx_delta(&tx_que->txr, &ringbytes, &ringpackets); + txbytes += ringbytes; + txpackets += ringpackets; + } /* Idle, do nothing */ if (txbytes == 0 && rxbytes == 0) @@ -937,15 +994,13 @@ igc_neweitr(struct igc_softc *sc, struct igc_rx_queue *que, goto igc_set_next_eitr; } - bytes = bytes_per_packet = 0; + bytes = bytes_per_packet = packets = 0; /* Get largest values from the associated tx and rx ring */ - txpackets = atomic_load_long(&txr->tx_packets); if (txpackets != 0) { bytes = txbytes; bytes_per_packet = txbytes / txpackets; packets = txpackets; } - rxpackets = atomic_load_long(&rxr->rx_packets); if (rxpackets != 0) { bytes = lmax(bytes, rxbytes); bytes_per_packet = @@ -1047,7 +1102,6 @@ igc_intr(void *arg) struct igc_softc *sc = arg; struct igc_hw *hw = &sc->hw; struct igc_rx_queue *que = &sc->rx_queues[0]; - struct tx_ring *txr = &sc->tx_queues[0].txr; struct rx_ring *rxr = &que->rxr; if_ctx_t ctx = sc->ctx; u32 reg_icr; @@ -1080,13 +1134,7 @@ igc_intr(void *arg) if (reg_icr & IGC_ICR_RXO) sc->rx_overruns++; - igc_neweitr(sc, que, txr, rxr); - - /* Reset state */ - txr->tx_bytes = 0; - txr->tx_packets = 0; - rxr->rx_bytes = 0; - rxr->rx_packets = 0; + igc_neweitr(sc, que, rxr); return (FILTER_SCHEDULE_THREAD); } @@ -1121,18 +1169,11 @@ igc_msix_que(void *arg) { struct igc_rx_queue *que = arg; struct igc_softc *sc = que->sc; - struct tx_ring *txr = &sc->tx_queues[que->msix].txr; struct rx_ring *rxr = &que->rxr; ++que->irqs; - igc_neweitr(sc, que, txr, rxr); - - /* Reset state */ - txr->tx_bytes = 0; - txr->tx_packets = 0; - rxr->rx_bytes = 0; - rxr->rx_packets = 0; + igc_neweitr(sc, que, rxr); return (FILTER_SCHEDULE_THREAD); } @@ -2022,6 +2063,9 @@ igc_if_tx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, /* Set up some basics */ struct tx_ring *txr = &que->txr; + KASSERT(__is_aligned(&txr->tx_aim_snapshot, sizeof(uint64_t)), + ("%s: misaligned TX AIM snapshot %p", __func__, + &txr->tx_aim_snapshot)); txr->sc = que->sc = sc; que->me = txr->me = i; @@ -2074,6 +2118,9 @@ igc_if_rx_queues_alloc(if_ctx_t ctx, caddr_t *vaddrs, uint64_t *paddrs, for (i = 0, que = sc->rx_queues; i < nrxqsets; i++, que++) { /* Set up some basics */ struct rx_ring *rxr = &que->rxr; + KASSERT(__is_aligned(&rxr->rx_aim_snapshot, sizeof(uint64_t)), + ("%s: misaligned RX AIM snapshot %p", __func__, + &rxr->rx_aim_snapshot)); rxr->sc = que->sc = sc; rxr->que = que; que->me = rxr->me = i; diff --git a/sys/dev/igc/if_igc.h b/sys/dev/igc/if_igc.h index 236a16c4add3..d8d5d5b251fa 100644 --- a/sys/dev/igc/if_igc.h +++ b/sys/dev/igc/if_igc.h @@ -232,9 +232,18 @@ struct tx_ring { /* Soft stats */ unsigned long tx_irq; - unsigned long tx_packets; - unsigned long tx_bytes; + /* + * Free running AIM counters. The producer updates these while + * encapsulating packets, then publishes both together at the TX + * doorbell. The interrupt handler samples only the published value, + * so it cannot observe one counter without the other. + */ + u32 tx_packets; + u32 tx_bytes; + uint64_t tx_aim_snapshot __aligned(8); + u32 tx_packets_last; + u32 tx_bytes_last; /* Saved csum offloading context information */ int csum_flags; @@ -249,6 +258,15 @@ struct tx_ring { uint32_t csum_txd_lower; /* last field */ }; +static __inline void +igc_aim_publish(struct tx_ring *txr) +{ + uint64_t snapshot; + + snapshot = ((uint64_t)txr->tx_bytes << 32) | txr->tx_packets; + atomic_store_rel_64(&txr->tx_aim_snapshot, snapshot); +} + /* * The Receive ring, one per rx queue */ @@ -267,13 +285,32 @@ struct rx_ring { /* Soft stats */ unsigned long rx_irq; unsigned long rx_discarded; - unsigned long rx_packets; - unsigned long rx_bytes; + + /* + * Free running AIM counters. RX publishes both together when iflib + * returns descriptors to hardware. The interrupt handler samples only + * the published value, so watchdog-driven RX processing cannot expose + * one counter without the other. + */ + u32 rx_packets; + u32 rx_bytes; + uint64_t rx_aim_snapshot __aligned(8); + u32 rx_packets_last; + u32 rx_bytes_last; /* Next requested EITR latency */ u8 rx_nextlatency; }; +static __inline void +igc_aim_publish_rx(struct rx_ring *rxr) +{ + uint64_t snapshot; + + snapshot = ((uint64_t)rxr->rx_bytes << 32) | rxr->rx_packets; + atomic_store_rel_64(&rxr->rx_aim_snapshot, snapshot); +} + struct igc_tx_queue { struct igc_softc *sc; u32 msix; diff --git a/sys/dev/igc/igc_txrx.c b/sys/dev/igc/igc_txrx.c index 526631528f51..12b6f2c43c39 100644 --- a/sys/dev/igc/igc_txrx.c +++ b/sys/dev/igc/igc_txrx.c @@ -332,6 +332,7 @@ igc_isc_txd_flush(void *arg, uint16_t txqid, qidx_t pidx) struct tx_ring *txr = &que->txr; IGC_WRITE_REG(&sc->hw, IGC_TDT(txr->me), pidx); + igc_aim_publish(txr); } static int @@ -423,6 +424,7 @@ igc_isc_rxd_flush(void *arg, uint16_t rxqid, uint8_t flid __unused, struct rx_ring *rxr = &que->rxr; IGC_WRITE_REG(&sc->hw, IGC_RDT(rxr->me), pidx); + igc_aim_publish_rx(rxr); } static int @@ -486,7 +488,6 @@ igc_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri) le32toh(rxd->wb.lower.lo_dword.data) & IGC_PKTTYPE_MASK; ri->iri_len += len; - rxr->rx_bytes += len; rxd->wb.upper.status_error = 0; eop = ((staterr & IGC_RXD_STAT_EOP) == IGC_RXD_STAT_EOP); @@ -514,6 +515,7 @@ igc_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri) i++; } while (!eop); + rxr->rx_bytes += ri->iri_len; rxr->rx_packets++; if ((scctx->isc_capenable & IFCAP_RXCSUM) != 0) From nobody Sun Jul 26 01:01:14 2026 X-Original-To: dev-commits-src-main@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 4h73MG5xpzz6mQfs for ; Sun, 26 Jul 2026 01:01:14 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h73MG1dNjz3LgC for ; Sun, 26 Jul 2026 01:01:14 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785027674; 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=DupIqfH6+6tUiXJTPhEux3ZrDrw6y4ogqDUF9/s+TzQ=; b=TIITh7O8jMmDvW6uza1KSdcPHdCZDw4+3DuEtA/3njsvw4CEdfKpu3ajzjzOd5PCYaHMnv aOpZqzVN8D7VH1sNmPzHhNFYBmVJnASd+Qll36gsJ7FqxSEc3NKVtMz3g73+WVIzJxvUxi 6dZKP1d6p2MN+LTNxExBEIDmPg5Gi6o4q30/mLWVrIpHquPkNpvhnrTRFhkbui0BbBlIYY C6+ciPVf8eS3pEhQ9T2NbnrvGOti+CZufwyI12XhsAOOZtlBFJ/PZipZhvXqvB5S/H/DEU K/egdoQ9DiwS0GJlx5bvKIOtt9pgzA6/8VF6cF8wE4T6rcXLt6b8YNtERGoMAg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785027674; a=rsa-sha256; cv=none; b=r0viDTTIV24KhO9nAF8veJAaHVuv3z+1zrShR7I3s4d2ftCbBEXHO9wQ9XRhRqAQhEC42h 6B7OCpz0f+HvmOTa2iL007bZoHc9LDe1nWww94BlZafNBmYOsG0TUPnf36+hnFayt2LXwy hnEBOmsiPlL2gV2cyBPipuCzVS66RHv4sCHW7oPWr1Zbz//UCUewe2cIKt5vAwqEhZrnVY HuMLZqmJAOTTqyoeNBylJ7gWToiGiSsxUF2lU6wba55YizNkX+Ocq3AwOH6Pw31WWy4DXK H6RWXHEe4omTFeFR5zbGbJYaq5g92VSFVY5u9NxnPQjfQNP2TgqTqnWY/DtfDA== 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=1785027674; 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=DupIqfH6+6tUiXJTPhEux3ZrDrw6y4ogqDUF9/s+TzQ=; b=uxhp9RgBPlk4ANB6u8cX1stL29ymQfG92C+Af1TVCBlNXLXc1VQl/uP2mehUWrZDzoY9TL vIid0zOiGyHyk2rDy5taZ1JcJcrv3JZF1QU67pE9h9UPmPxWYCROElOgmiUiWdbOIh+uVB CNdGAcvTHwAiFtFsg/z6g0tWzLTvwYK2O5brqhaj1EvGouBgQajo7yAKqmfy8cZBC1AQgG 8PURGAcMOn0qcJWiFZzVBozy0hu3tkkJpYSsVQsXvxI1b7SABjNHzJLhNgUoiquKoxDk0v +PkQkQNwEB5fWJRZcS2F9oXS5NryVjoIyRnQUDUDp7rbSkxDvAopuUvfUGk70g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h73MG0cTxzyvJ for ; Sun, 26 Jul 2026 01:01:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 32f97 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Jul 2026 01:01:14 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: bbf0372feeb3 - main - igc: fix RX accounting for multi-descriptor packets List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: bbf0372feeb321a5bfeff7b1e79576ab01240441 Auto-Submitted: auto-generated Date: Sun, 26 Jul 2026 01:01:14 +0000 Message-Id: <6a655c5a.32f97.76bb2afc@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=bbf0372feeb321a5bfeff7b1e79576ab01240441 commit bbf0372feeb321a5bfeff7b1e79576ab01240441 Author: Kevin Bowling AuthorDate: 2026-07-25 23:56:29 +0000 Commit: Kevin Bowling CommitDate: 2026-07-26 01:00:02 +0000 igc: fix RX accounting for multi-descriptor packets The receive path adds the running packet length to rx_bytes for every descriptor. A packet spanning descriptors of length l1, l2, and l3 is therefore counted as 3*l1 + 2*l2 + l3. Add each descriptor length once. Single-descriptor accounting remains unchanged. MFC after: 1 week --- sys/dev/igc/igc_txrx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/igc/igc_txrx.c b/sys/dev/igc/igc_txrx.c index 7ab09078d8f4..526631528f51 100644 --- a/sys/dev/igc/igc_txrx.c +++ b/sys/dev/igc/igc_txrx.c @@ -486,7 +486,7 @@ igc_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri) le32toh(rxd->wb.lower.lo_dword.data) & IGC_PKTTYPE_MASK; ri->iri_len += len; - rxr->rx_bytes += ri->iri_len; + rxr->rx_bytes += len; rxd->wb.upper.status_error = 0; eop = ((staterr & IGC_RXD_STAT_EOP) == IGC_RXD_STAT_EOP); From nobody Sun Jul 26 01:01:17 2026 X-Original-To: dev-commits-src-main@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 4h73ML0qd4z6mQR9 for ; Sun, 26 Jul 2026 01:01:18 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h73MK41h1z3LvF for ; Sun, 26 Jul 2026 01:01:17 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785027677; 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=ucfxPjqSEyoQUGob6ZjPd6+H6yih03C/2nZCFjwGMYg=; b=xZSloDDRIJ9dpnvkpI5KU1OKX5nQLiLjZoYyhGZ0fsEp3RBKYZsGNCjyOkEQeM5kmUjqIB JrzpacqhOz+/M5ABYSXco6QBbl0dzxSzV7JwgwgaN4MCSR018J2Wm0Qng6AkwnY3fKMDpA 9cImLh5aeYWVsicZEHc3zw0FJZCTTEvzwqp02RSnFPhE5+tsWrSyiee0UPnCG1T5YEdb3H ZOMgdfG8XmHzjqOyebmWTvADYckSHGCLHb6itUntHd5EcIUDpNGtogiCPhzDTPB16OJEU6 an37PKt2Clw0mAxu/JR8RKgjIaQDrW/+KInUHBp67rl7lAOxwjxYY0QUMrpssw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785027677; a=rsa-sha256; cv=none; b=PtEMDPwJJFXF5awHU+r3YMTsaFBOlrCUu4hRK8nYqmgJUnSlUh1nKf+WTuPb5p1LuCXD+s 4FsTDKRjwAQbaDyldzK74gE825gZGowRE7Q+PP9fNxTqSmhAMbXiL0zvAndr1GESMIdqFu 5xcNXQooohVjT+IPdxx2DAx0rLOBJ+9e/7LsR671w3LdbtuK3jSV2SIJg0i5V44x4Vsnwr ajlYYOnwL903DetZEQeWcr2UWlPpEaf7Ipx8OqvfvnUXU6ikdhCULuEkdXYA2w12co9svI tbke7fjXgqh3HNc5qB8UGRX6Iz8w6lWrdGA2/87MS0jxXEzO/McQNiZGvzV+5Q== 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=1785027677; 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=ucfxPjqSEyoQUGob6ZjPd6+H6yih03C/2nZCFjwGMYg=; b=TrDzqKn2L/y6NqyvavGZsVQ00ZQ3Ktz9/AUAOboDUJ/28Smnrf8BUnVqDHMeo9W5Fe6U7C zvLhamkDTdkmJAeD1/B+0G2iUcSjupyf7QxrhpVT1Ny1LgEjMUT5pOeCKL3FxhGe80Tjc4 sirqkq+ZNimPtrlh8oz0SKMUNiUlJmuR2XXopPTkorxCHPdFjHczfo8EdK8vMEOSqGFHZ9 cnZlugMgws5xgqhX6qR+NRugWLPi8yvLCKhIVpgM3Ps65FISwzU0gyj8LTTUcSWw4PsU5x 4emtWtrpkEKdsFTtYQAnv86gZRB1G58eKXoSWhW+i4N+WQ7dVb3P+5hfatpL3Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h73MK2XwJz10WZ for ; Sun, 26 Jul 2026 01:01:17 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3333e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Jul 2026 01:01:17 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 01e7acd38d41 - main - igc: use packet-size AIM List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 01e7acd38d411c78caba1c4078bb3683f586e1c2 Auto-Submitted: auto-generated Date: Sun, 26 Jul 2026 01:01:17 +0000 Message-Id: <6a655c5d.3333e.49baf5d7@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=01e7acd38d411c78caba1c4078bb3683f586e1c2 commit 01e7acd38d411c78caba1c4078bb3683f586e1c2 Author: Kevin Bowling AuthorDate: 2026-07-26 00:00:22 +0000 Commit: Kevin Bowling CommitDate: 2026-07-26 01:00:02 +0000 igc: use packet-size AIM Use the packet-size calculation introduced for igb(4) in a69ed8dfb381 and retained there until the iflib conversion in f2d6ace4a684. It derives interrupt holdoff from average packet size, so RSS queue count does not change its behavior. The calculation follows the pre-iflib igb code. Retain igc's normal and low-latency rate caps, and keep the current setting when an interval has no usable sample. MFC after: 1 week --- sys/dev/igc/if_igc.c | 171 ++++++++++++++++++++------------------------------- sys/dev/igc/if_igc.h | 11 +++- 2 files changed, 73 insertions(+), 109 deletions(-) diff --git a/sys/dev/igc/if_igc.c b/sys/dev/igc/if_igc.c index 3e4c0228619a..6dcb55ed6475 100644 --- a/sys/dev/igc/if_igc.c +++ b/sys/dev/igc/if_igc.c @@ -942,12 +942,60 @@ igc_aim_tx_delta(struct tx_ring *txr, u32 *bytes, u32 *packets) txr->tx_packets_last = now_packets; } -enum eitr_latency_target { - eitr_latency_disabled = 0, - eitr_latency_lowest = 1, - eitr_latency_low = 2, - eitr_latency_bulk = 3 -}; +/********************************************************************* + * + * Do Adaptive Interrupt Moderation: + * - Calculate based on average size over the last interval + * + * Returns interrupts per second rather than a register value, so that the + * caller's IGC_INTS_TO_EITR() conversion applies, or zero if the interval + * carried no packet to measure. + * + *********************************************************************/ +static u32 +igc_ring_itr(struct igc_softc *sc, u32 rxbytes, u32 rxpackets, u32 txbytes, + u32 txpackets) +{ + u32 newitr = 0; + + if (txbytes && txpackets) + newitr = txbytes / txpackets; + if (rxbytes && rxpackets) + newitr = max(newitr, rxbytes / rxpackets); + + /* + * No packet was observed, so there is no size to work from. Report no + * observation and let the caller keep the rate it already has. + */ + if (newitr == 0) + return (0); + + newitr += 24; /* account for hardware frame, crc */ + /* set an upper boundary */ + newitr = min(newitr, 3000); + /* Be nice to the mid range */ + if ((newitr > 300) && (newitr < 1200)) + newitr = (newitr / 3); + else + newitr = (newitr / 2); + + /* The value above was written straight to EITR; make it a rate */ + newitr = IGC_AIM_DIVIDEND / newitr; + + /* + * Cap the rate: enable_aim=1 is the normal setting, enable_aim=2 opts + * into the low latency end. The original was unbounded and would ask + * for ~95k ints/s on minimum sized frames. There is deliberately no + * floor, so jumbo traffic settles near 2.7k ints/s. + */ + if (sc->enable_aim == 1) + newitr = min(newitr, IGC_INTS_20K); + else + newitr = min(newitr, IGC_INTS_70K); + + return (newitr); +} + /********************************************************************* * * Helper to calculate next EITR value for AIM @@ -959,10 +1007,8 @@ igc_neweitr(struct igc_softc *sc, struct igc_rx_queue *que, { struct igc_hw *hw = &sc->hw; struct igc_tx_queue *tx_que; - u32 bytes, bytes_per_packet, packets; u32 ringbytes, ringpackets, rxbytes, rxpackets, txbytes, txpackets; u32 neweitr; - u8 nextlatency; int i; igc_aim_rx_delta(rxr, &rxbytes, &rxpackets); @@ -986,109 +1032,22 @@ igc_neweitr(struct igc_softc *sc, struct igc_rx_queue *que, if (txbytes == 0 && rxbytes == 0) return; - neweitr = 0; - - if (sc->enable_aim) { - nextlatency = rxr->rx_nextlatency; - + if (sc->enable_aim == 0) { + neweitr = igc_max_interrupt_rate; + } else if (sc->link_speed < SPEED_1000) { /* Use half default (4K) ITR if sub-gig */ - if (sc->link_speed < 1000) { - neweitr = IGC_INTS_4K; - goto igc_set_next_eitr; - } - /* Want at least enough packet buffer for two frames to AIM */ - if (sc->shared->isc_max_frame_size * 2 > (sc->pba << 10)) { - neweitr = igc_max_interrupt_rate; - goto igc_set_next_eitr; - } - - bytes = bytes_per_packet = packets = 0; - /* Get largest values from the associated tx and rx ring */ - if (txpackets != 0) { - bytes = txbytes; - bytes_per_packet = txbytes / txpackets; - packets = txpackets; - } - if (rxpackets != 0) { - bytes = lmax(bytes, rxbytes); - bytes_per_packet = - lmax(bytes_per_packet, rxbytes / rxpackets); - packets = lmax(packets, rxpackets); - } - - /* Latency state machine */ - switch (nextlatency) { - case eitr_latency_disabled: /* Bootstrapping */ - nextlatency = eitr_latency_low; - break; - case eitr_latency_lowest: /* 70k ints/s */ - /* TSO and jumbo frames */ - if (bytes_per_packet > 8000) - nextlatency = eitr_latency_bulk; - else if ((packets < 5) && (bytes > 512)) - nextlatency = eitr_latency_low; - break; - case eitr_latency_low: /* 20k ints/s */ - if (bytes > 10000) { - /* Handle TSO */ - if (bytes_per_packet > 8000) - nextlatency = eitr_latency_bulk; - else if ((packets < 10) || - (bytes_per_packet > 1200)) - nextlatency = eitr_latency_bulk; - else if (packets > 35) - nextlatency = eitr_latency_lowest; - } else if (bytes_per_packet > 2000) { - nextlatency = eitr_latency_bulk; - } else if (packets < 3 && bytes < 512) { - nextlatency = eitr_latency_lowest; - } - break; - case eitr_latency_bulk: /* 4k ints/s */ - if (bytes > 25000) { - if (packets > 35) - nextlatency = eitr_latency_low; - } else if (bytes < 1500) - nextlatency = eitr_latency_low; - break; - default: - nextlatency = eitr_latency_low; - device_printf(sc->dev, - "Unexpected neweitr transition %d\n", - nextlatency); - break; - } - - /* Trim itr_latency_lowest for default AIM setting */ - if (sc->enable_aim == 1 && nextlatency == eitr_latency_lowest) - nextlatency = eitr_latency_low; - - /* Request new latency */ - rxr->rx_nextlatency = nextlatency; - } else { - /* We may have toggled to AIM disabled */ - nextlatency = eitr_latency_disabled; - rxr->rx_nextlatency = nextlatency; - } - - /* ITR state machine */ - switch(nextlatency) { - case eitr_latency_lowest: - neweitr = IGC_INTS_70K; - break; - case eitr_latency_low: - neweitr = IGC_INTS_20K; - break; - case eitr_latency_bulk: neweitr = IGC_INTS_4K; - break; - case eitr_latency_disabled: - default: + } else if (sc->shared->isc_max_frame_size * 2 > (sc->pba << 10)) { + /* Want at least enough packet buffer for two frames to AIM */ neweitr = igc_max_interrupt_rate; - break; + } else { + neweitr = igc_ring_itr(sc, rxbytes, rxpackets, txbytes, + txpackets); + /* No usable observation; leave the rate where it is */ + if (neweitr == 0) + return; } -igc_set_next_eitr: neweitr = IGC_INTS_TO_EITR(neweitr); neweitr |= IGC_EITR_CNT_IGNR; diff --git a/sys/dev/igc/if_igc.h b/sys/dev/igc/if_igc.h index 4af08e03fedb..a090eeb12247 100644 --- a/sys/dev/igc/if_igc.h +++ b/sys/dev/igc/if_igc.h @@ -176,6 +176,14 @@ #define IGC_EITR_TO_INTS(i) ((IGC_EITR_DIVIDEND << IGC_EITR_SHIFT) / \ ((i) & IGC_QVECTOR_MASK)) +/* + * The average packet size calculation in igc_ring_itr() yields an EITR + * interval field value. That field is quarter microsecond granular (see + * IGC_EITR_SHIFT), so an interval of V is 1000000 / (V / 4) interrupts per + * second. + */ +#define IGC_AIM_DIVIDEND (IGC_EITR_DIVIDEND << IGC_EITR_SHIFT) + /* * TDBA/RDBA should be aligned on 16 byte boundary. But TDLEN/RDLEN should be * multiple of 128 bytes. So we align TDBA/RDBA on 128 byte boundary. This will @@ -299,9 +307,6 @@ struct rx_ring { uint64_t rx_aim_snapshot __aligned(8); u32 rx_packets_last; u32 rx_bytes_last; - - /* Next requested EITR latency */ - u8 rx_nextlatency; }; static __inline void From nobody Sun Jul 26 01:01:16 2026 X-Original-To: dev-commits-src-main@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 4h73MK1KXlz6mQTn for ; Sun, 26 Jul 2026 01:01: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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h73MJ336Jz3Lwl for ; Sun, 26 Jul 2026 01:01:16 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785027676; 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=hU37wfDFUGY57AkXB+jr5K+avYEXgw61vNFxCrULjaU=; b=jvuqcHGzgYFsnlu1UkP04jw7GDlMnEYR+9IhQw5li6pHIjN+dkAAxKxHzoRPHLD+UCgOvr nsk6KfI3Et4s0gYEnTLcTU7xwT52Y4Y7y3259aM1Mwo+a6NCSDAFS0usbg0khIKJZv1Apw TnqPv0jkcS/ZsrlJkcchwxmxf1aJBsGz8nXP8jt/ZP/3lUlM20VYdNd2EEr60X3nkNI7Op 0P6YDyQQhNmBnQV8vAn1IRB5nbze6RE4uwhldUtUdw1zQ6i1QtN6WRf1GcVHycPCPdKX64 cnyMKhFWSUzS4HpUBeC0bDhDa//0Fiy/J+2suCQTDhZDskR7bfFH2WL7iDCO+Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785027676; a=rsa-sha256; cv=none; b=Q2PQ2gyt/ujPNJneINgYbWWNzvyH2iEF9qrZcrOITe0cep5O2r/J+CoDU6olBShzOnwaN9 g5hNHsay4G0aIePelrqHP1Hb9LVpAR4X573gFjdDgKRniRPmtFYK82IWj4PonGtdBgLLTI ZVdhq1siwRul9H9iPE19wnJey6KJmvZzvu3/QXTlJ+wFgeVKYwMS+ea3bMrFL6YOfvJ9D7 n427USMwAzGd6Tkr23651rSGzNzVP5/5fj4J0un1/X0Vs2XyihKbY/3scER77gUrt45tY9 soSzk7AiNJhZ5Fktp01SzpTSFfiuUotigIENut45koZLC2wb5US3i+Em75U1Yg== 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=1785027676; 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=hU37wfDFUGY57AkXB+jr5K+avYEXgw61vNFxCrULjaU=; b=AY9uzi2LSYjCH+Zso0GRQXztLOs9N0GVxgf9/vMuqLF9E+jhpbi+OiuScKXtmRTfULYKY/ ZOfqYWpn+75X6+711t9AtV50Xkn3eYxeTwzTvDp39/hmydG/Qzo0Sv0hND7Y8QBIK/gc1d zFk/vJGSuig5iDHdz5IkhAl0kZ9sZsgHjq42vYUDu4tnLyuSkY6UORlAWATj4scsXQg8yt hp5tnl3R4DBtzqe7WuD+sjtQ0l03BVMHhcKM628RtO6IcfLZMS8XVMT/IWoRn2/DEt7xBG WN8x1GtnSk10Hfy/vr8IHKC+ekyd8AY0nnkk5ZAdBI60CRjvjSGaAiPIyFM5fg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h73MJ24Xdz10b9 for ; Sun, 26 Jul 2026 01:01:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 328a2 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Jul 2026 01:01:16 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: e35533457530 - main - igc: synchronize interrupt moderation state List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e35533457530bb9db655e6137c2eea790e18b97b Auto-Submitted: auto-generated Date: Sun, 26 Jul 2026 01:01:16 +0000 Message-Id: <6a655c5c.328a2.39d16193@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=e35533457530bb9db655e6137c2eea790e18b97b commit e35533457530bb9db655e6137c2eea790e18b97b Author: Kevin Bowling AuthorDate: 2026-07-25 23:58:58 +0000 Commit: Kevin Bowling CommitDate: 2026-07-26 01:00:02 +0000 igc: synchronize interrupt moderation state Keep the saved EITR value synchronized with hardware across reinitialization. Correct EITR encoding, decoding, and MSI-X register selection, and reject nonpositive fallback rates. Apply the packet-buffer fallback without permanently disabling AIM. MFC after: 1 week --- sys/dev/igc/if_igc.c | 35 +++++++++++++++++++++++++---------- sys/dev/igc/if_igc.h | 6 ++++-- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/sys/dev/igc/if_igc.c b/sys/dev/igc/if_igc.c index d0e9ad3b7a8d..3e4c0228619a 100644 --- a/sys/dev/igc/if_igc.c +++ b/sys/dev/igc/if_igc.c @@ -165,6 +165,7 @@ static int igc_sysctl_eee(SYSCTL_HANDLER_ARGS); static int igc_get_regs(SYSCTL_HANDLER_ARGS); static void igc_configure_queues(struct igc_softc *); +static void igc_initialize_interrupt_rate(struct igc_softc *); /********************************************************************* @@ -469,6 +470,13 @@ igc_if_attach_pre(if_ctx_t ctx) dev = iflib_get_dev(ctx); sc = iflib_get_softc(ctx); + if (igc_max_interrupt_rate <= 0) { + device_printf(dev, + "Invalid max_interrupt_rate %d; using default %d\n", + igc_max_interrupt_rate, IGC_INTS_DEFAULT); + igc_max_interrupt_rate = IGC_INTS_DEFAULT; + } + sc->ctx = sc->osdep.ctx = ctx; sc->dev = sc->osdep.dev = dev; scctx = sc->shared = iflib_get_softc_ctx(ctx); @@ -880,6 +888,7 @@ igc_if_init(if_ctx_t ctx) if (sc->intr_type == IFLIB_INTR_MSIX) /* Set up queue routing */ igc_configure_queues(sc); + igc_initialize_interrupt_rate(sc); /* this clears any pending interrupts */ IGC_READ_REG(&sc->hw, IGC_ICR); @@ -990,7 +999,6 @@ igc_neweitr(struct igc_softc *sc, struct igc_rx_queue *que, /* Want at least enough packet buffer for two frames to AIM */ if (sc->shared->isc_max_frame_size * 2 > (sc->pba << 10)) { neweitr = igc_max_interrupt_rate; - sc->enable_aim = 0; goto igc_set_next_eitr; } @@ -1640,7 +1648,7 @@ igc_configure_queues(struct igc_softc *sc) struct igc_hw *hw = &sc->hw; struct igc_rx_queue *rx_que; struct igc_tx_queue *tx_que; - u32 ivar = 0, newitr = 0; + u32 ivar = 0; /* First turn on RSS capability */ IGC_WRITE_REG(hw, IGC_GPIE, @@ -1683,18 +1691,25 @@ igc_configure_queues(struct igc_softc *sc) sc->link_mask = 1 << sc->linkvec; IGC_WRITE_REG(hw, IGC_IVAR_MISC, ivar); - /* Set the starting interrupt rate */ - if (igc_max_interrupt_rate > 0) - newitr = IGC_INTS_TO_EITR(igc_max_interrupt_rate); + return; +} + +static void +igc_initialize_interrupt_rate(struct igc_softc *sc) +{ + struct igc_hw *hw = &sc->hw; + struct igc_rx_queue *rx_que; + u32 newitr; + newitr = IGC_INTS_TO_EITR(igc_max_interrupt_rate); newitr |= IGC_EITR_CNT_IGNR; for (int i = 0; i < sc->rx_num_queues; i++) { rx_que = &sc->rx_queues[i]; - IGC_WRITE_REG(hw, IGC_EITR(rx_que->msix), newitr); + rx_que->eitr_setting = newitr; + IGC_WRITE_REG(hw, IGC_EITR(rx_que->msix), + rx_que->eitr_setting); } - - return; } static void @@ -2693,7 +2708,7 @@ igc_sysctl_interrupt_rate_handler(SYSCTL_HANDLER_ARGS) if (tx) { tque = oidp->oid_arg1; hw = &tque->sc->hw; - reg = IGC_READ_REG(hw, IGC_EITR(tque->me)); + reg = IGC_READ_REG(hw, IGC_EITR(tque->msix)); } else { rque = oidp->oid_arg1; hw = &rque->sc->hw; @@ -2702,7 +2717,7 @@ igc_sysctl_interrupt_rate_handler(SYSCTL_HANDLER_ARGS) usec = (reg & IGC_QVECTOR_MASK); if (usec > 0) - rate = IGC_INTS_TO_EITR(usec); + rate = IGC_EITR_TO_INTS(usec); else rate = 0; diff --git a/sys/dev/igc/if_igc.h b/sys/dev/igc/if_igc.h index d8d5d5b251fa..4af08e03fedb 100644 --- a/sys/dev/igc/if_igc.h +++ b/sys/dev/igc/if_igc.h @@ -171,8 +171,10 @@ #define IGC_EITR_DIVIDEND 1000000 #define IGC_EITR_SHIFT 2 #define IGC_QVECTOR_MASK 0x7FFC -#define IGC_INTS_TO_EITR(i) (((IGC_EITR_DIVIDEND/i) & IGC_QVECTOR_MASK) << \ - IGC_EITR_SHIFT) +#define IGC_INTS_TO_EITR(i) \ + (((IGC_EITR_DIVIDEND / (i)) << IGC_EITR_SHIFT) & IGC_QVECTOR_MASK) +#define IGC_EITR_TO_INTS(i) ((IGC_EITR_DIVIDEND << IGC_EITR_SHIFT) / \ + ((i) & IGC_QVECTOR_MASK)) /* * TDBA/RDBA should be aligned on 16 byte boundary. But TDLEN/RDLEN should be From nobody Sun Jul 26 01:01:18 2026 X-Original-To: dev-commits-src-main@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 4h73MM6bMxz6mQg1 for ; Sun, 26 Jul 2026 01:01:19 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h73ML4ZqGz3M7c for ; Sun, 26 Jul 2026 01:01:18 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785027678; 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=Dar3zIMLs6ibY5tjz5Ca+aKAM4zWZFqGd2SSjHQeOwA=; b=uuzw4ORPF8t3CJGab03bSHZuprzyQAmwi9cBmdCxsZ+Xb8tW40mtW8z6heABMFE240zG78 ExfCBd0v0IEDjaKyEhV7Zt+GlVLcQMGQJUjbOhbUlXTCDeHvIJc7Sp9vdR1PansyDgcmez yqkl8sFEyFruYtSSykqf9ulSiTMHkRBzeCHZMaFxL5ObrX4URIqONWQm93Uu1wCldHE4Rv V3LGtBobaQNgnKk4ZRbZifI7WKZnJXtO37K2twQxY6qU2I1NChVFLlo7u7tKIp6rVDvSIR x0O2VP5Z20qjSRiQ+JPVnPrhrypfPKIRb8S81m23lo1ks2GQKXyRjSpXzD75Ng== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785027678; a=rsa-sha256; cv=none; b=x29tOntPsWb4MDal3ETiKI2sq5h68sm2bMW3AvQLNTbVk5kruqtRIzayp2AGsRg/RzfcmY De36Zn2NerR493T1Cnuluf4wbVTrNwacjDc5tCKyKNyv1wDV89lBEMEOwrFCIxc4KmHOLs frrjUjHG5BRGiGXcx4RT9J0U2GbRIYqkCV6wByzHe2IUN6fTTsNtaJ7e5cPb48+i+nne+0 yiL0fpdXRUDvXK4aiyhMgjxw78JIFR72ukWtGMl4E2y9U6dWHK+At3vP1P23IuzOQWajU2 5vLr9VIXiTr8dYADr/19Un0BupcFISasJikCB16zgzXHyMCQjYRkPKNIf4Beiw== 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=1785027678; 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=Dar3zIMLs6ibY5tjz5Ca+aKAM4zWZFqGd2SSjHQeOwA=; b=nn3UJS5tUPFGd0fOy82Pq7YPqEqfVPBcaOauKM7qwPkApHeNJGFGcLxK0yTjafrS/492zR o/OshQWqiGV4jw7a4HNLUPtG2TqH+wFBiBmhvmd6z6Q9KGo8Sc8GEfbQr3P9yAK03oATYg XSD9Fgm1Y7//DUNBJtitY8hhXx5ZABukCNQQuwKmDXzfWasKApvkgjSHTjI+f2HPeChBc2 QOl0fdLueWBTNPMxjeaFNUygGduBjv18ZWBhrOSYUEfcmKPQAVw0rfjh24wLfHJbcGh634 dQ3ThD/Qdr5KiU+rHdEmv1HpYpjCwWvI6kkeBI8on+lJn6o1x22GcVR2w+/2+Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h73ML3M6Yz10h1 for ; Sun, 26 Jul 2026 01:01:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 32f9b by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Jul 2026 01:01:18 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: e389a05164cc - main - igc: count TSO wire segments in the AIM counters List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e389a05164ccb1dd41ee8d7f09203b475322dd72 Auto-Submitted: auto-generated Date: Sun, 26 Jul 2026 01:01:18 +0000 Message-Id: <6a655c5e.32f9b.6b98a342@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=e389a05164ccb1dd41ee8d7f09203b475322dd72 commit e389a05164ccb1dd41ee8d7f09203b475322dd72 Author: Kevin Bowling AuthorDate: 2026-07-26 00:01:06 +0000 Commit: Kevin Bowling CommitDate: 2026-07-26 01:00:02 +0000 igc: count TSO wire segments in the AIM counters The transmit path bills one packet of ipi_len bytes per request. For TSO that is the whole unsegmented payload, up to 64 KiB, rather than a packet size that appears on the wire. Count the segments the hardware emits and the header carried by each segment. Non-TSO accounting is unchanged. MFC after: 1 week --- sys/dev/igc/igc_txrx.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/sys/dev/igc/igc_txrx.c b/sys/dev/igc/igc_txrx.c index 12b6f2c43c39..0f88a0a5acd5 100644 --- a/sys/dev/igc/igc_txrx.c +++ b/sys/dev/igc/igc_txrx.c @@ -317,10 +317,27 @@ igc_isc_txd_encap(void *arg, if_pkt_info_t pi) txd->read.cmd_type_len |= htole32(IGC_ADVTXD_DCMD_EOP | txd_flags); pi->ipi_new_pidx = i; - /* Sent data accounting for AIM */ + /* + * Sent data accounting for AIM. For TSO, ipi_len is the whole + * unsegmented payload, which is not a size the moderation calculation + * can use. Count the segments the hardware will put on the wire and + * the header each of them carries, so that the average it sees is a + * wire packet. + */ + if ((pi->ipi_csum_flags & CSUM_TSO) && pi->ipi_tso_segsz != 0) { + u32 hdrlen, segs; + + hdrlen = pi->ipi_ehdrlen + pi->ipi_ip_hlen + pi->ipi_tcp_hlen; + if (pi->ipi_len > hdrlen) { + segs = howmany(pi->ipi_len - hdrlen, pi->ipi_tso_segsz); + txr->tx_bytes += pi->ipi_len + (segs - 1) * hdrlen; + txr->tx_packets += segs; + return (0); + } + } + txr->tx_bytes += pi->ipi_len; ++txr->tx_packets; - return (0); } From nobody Sun Jul 26 01:01:19 2026 X-Original-To: dev-commits-src-main@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 4h73MN1zzSz6mQRD for ; Sun, 26 Jul 2026 01:01:20 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h73MM53zcz3LvV for ; Sun, 26 Jul 2026 01:01:19 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785027679; 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=pj8MOfVM6BgOG9GCd9DQKrbLrEuTe2825VBzkgz4RfM=; b=qj0O0al4CpQWMmKSiWKtyY/H2Y63Gz9/t3MCqsmdO+1JCi21mjNBhh4jtxoz4y3Th8e8xf TlFcdbrwpPa1mSfmIlmOOmoEyGXxrmezBmui8U+CyflNuVNi45S6J5n4DIC6OJZJcWV8OG e1j3OFoiFuJoDAuc/68XfErHtO2Hyyzzrg7LPbplyemteyn43lKWQM9iH3fOr+qTzBe3gW umjCu+37PeXblaYIArc9l7a64n6Q0fuQxM9Z41ErRc8MjhTrQ34HFaaDwjx9QJavHP1GVv C4Iy+essnheYC+0rIhD8Yp8cLB5kcA30j+8bKIXkI2UMMN4UY+mS6IkFI6P5DQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785027679; a=rsa-sha256; cv=none; b=qFQLHASj+utg4pZIHHOuJw7EqllxaW5UrXn+jY1BWkzyXkqI/vFxrgNi5UW4l9jzOXI5Wo pNzj+NfV0Eig0u/aYmUf07333HLR3cLsaKyKyKotUjGll9whA4SAAtps7m1TdozuXKhfAn Y+ZdiC2zHUL2Q0V7Q+pVYVLQfRlXNAouBJ7Yg+l4kQJwwtsUmDSY7Jf+OtNQhn3B+VZuMB +Myh7I1QvZ4A6JICZ879nJc2ggEqATm3f0cG8z0mdzwN079cBmW3FyrVJMfOelJGnDiH7Z mINQKJWWc6W3rC21SGbdMrbQL6jbYHhbDDKKA2S+tqZ4ckBLaMRqzKM5aulUnw== 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=1785027679; 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=pj8MOfVM6BgOG9GCd9DQKrbLrEuTe2825VBzkgz4RfM=; b=tRUFpJ4al5hTwgaPIeyHN+G7B2Od9cV3CbudXgHFh4lw+DcicclXpCxxhcoAzTz+dlExaL D9myhdvtgaFNzh6adzgrgZxaarFnyzy5VDCZ23IWENIQJ/6QnPYov8fJEOPsa0R1EK+t4M KrCMsLW/ToeJP/EE8R2O3jXyKn7diEBc5W3TAMxp8QdXv5QR7X6d0ZRLYrPWzAF3rOCtoE uJhf3JLV9AebnOZb9VpbX0UxGcfzycnvPLjYCS2elTG4je4deCHoU7K6CH+3W1GRgxj4Re 6vXWWeNyGJW2nOsNDP6x4MmIXIJPBLI+nzJcOjhAf4l/CJ0uYjYFpupTQS2xrw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h73MM48pnzyvM for ; Sun, 26 Jul 2026 01:01:19 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 309f8 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Jul 2026 01:01:19 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 297394e995e5 - main - igc(4): document adaptive interrupt moderation List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 297394e995e5ea1ea9bc85e609ca116255d51e97 Auto-Submitted: auto-generated Date: Sun, 26 Jul 2026 01:01:19 +0000 Message-Id: <6a655c5f.309f8.74232b8@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=297394e995e5ea1ea9bc85e609ca116255d51e97 commit 297394e995e5ea1ea9bc85e609ca116255d51e97 Author: Kevin Bowling AuthorDate: 2026-07-26 00:10:38 +0000 Commit: Kevin Bowling CommitDate: 2026-07-26 01:00:03 +0000 igc(4): document adaptive interrupt moderation Describe the disabled, adaptive, and low-latency settings and their interrupt-rate tradeoffs. MFC after: 1 week --- share/man/man4/igc.4 | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/share/man/man4/igc.4 b/share/man/man4/igc.4 index 757c7dd4510d..3b92472e8355 100644 --- a/share/man/man4/igc.4 +++ b/share/man/man4/igc.4 @@ -125,6 +125,20 @@ Default 1 (disabled). .It Va hw.igc.max_interrupt_rate Maximum device interrupts per second. The default is 8000. +This is the rate used when adaptive interrupt moderation is disabled, and +the fallback when it has no usable measurement. +.It Va hw.igc.enable_aim +Adaptive interrupt moderation. +The interrupt rate is derived from the average size of the packets seen +since the previous interrupt, so that bulk traffic is coalesced while small +packet traffic keeps its latency. +A value of 0 disables it and pins the rate to +.Va hw.igc.max_interrupt_rate , +1 selects the normal range, and 2 selects the low-latency range. +The default value is 1. +Setting 2 raises the interrupt rate substantially on small packet workloads +and is rarely a win; prefer the default unless latency has been measured to +matter more than the additional interrupt load. .El .Sh DIAGNOSTICS .Bl -diag From nobody Sun Jul 26 21:27:47 2026 X-Original-To: dev-commits-src-main@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 4h7ZZX1V6sz6lvhv for ; Sun, 26 Jul 2026 21:27:48 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h7ZZX0v0Nz3hLd for ; Sun, 26 Jul 2026 21:27:48 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785101268; 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=7G59sYz8i3VzxJsd5LuvcpfzBMoSPmgRd3mZmrkxyeI=; b=jPuN5IcbDBYGqXg9qn+ZHY61wwTAaKdRQt3cEs76TjosrhBEoNueXrk7CvNQsGFj+OIoun mCtNz7F3OKaln+hfqXsAMMqsUL/2iHfT6J5AmU3YDhk8rFfEcN1UEAtDMwx4ZyQBUf4iU/ 21TEvTYyFdqXCl01wmRFD0qDF4ebgLmJ0aCpGkdQjw5/ywMoMcSQ3cVCjgnq8toT0pwv4c FtFdNae+vO1wqLxo3FE1LcLyBJDkAFxtccYjAEgr3U7L2IzEfCFSKvdvzZXYrX4s+GSjz8 ybC5G7zAqdoNcwwoUhAiQr+TViiTicYApaAZoI8lXKXRRUPnOz65q6Rb5s5GgQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785101268; a=rsa-sha256; cv=none; b=FYDKjvj9jyJS+IVWBc1v0IOHUpbgDU1OQZgd1jFgU91MfPAyE3qfhr/TOoB+yLkYrpGWo7 T1FzqsiiZbhB3ZI7ubisPKR1OoREKPgtUsS0AkoytIMf8x1WFruXE1WMpzxg+91ctfi7/6 kncITEJdvhyRquW3iUOVcRZSpBfCCX/0yAzu+zcN5RwoJGGWEApS5fskxu5/FU5lpknWhv +jtuIM8/02nenFnUuicQSOefahSu0WCAcS6VZz/L0UqeSIjIN8+c8ataZso75jKGlO4EJv dUhWsTnkUgdL+LNOOJ9maP6WR2rME3QXt0KD2RXY4c96K95A9bfA/7MAkxEU2g== 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=1785101268; 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=7G59sYz8i3VzxJsd5LuvcpfzBMoSPmgRd3mZmrkxyeI=; b=lq3LyuAM+v2gB5APD0AXqwTIIFLsto9yLeJ3jXX5b0YkJH/i5kA1fZ9zkSWDWG2XKfb+tQ FhiI4+rr2nmkqxrXLie6djAyztGZjgFJPJhHbU4ewjputVTMFnQdxHNtx3c0X5d00x3JoX D+rToDtrHvZhLKXc6cpQFwmu1YoaF+mVSD37cNJUMpwk6WJXyyeqPVRvO30lvvpHnPJja8 p7xWwjl47ErPZLw+O3owZp7xZC3sWGJLpNlJuYkIr7tbWlwoLbmMhmMpX1Ilclm6HtQ1p0 +fBkW/OWz1TPXYBlaxGIVUxtzFrDP7fsX/Blh/D6AM6K//pWpWmCtiOw8EPHdA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h7ZZW6nngzftn for ; Sun, 26 Jul 2026 21:27:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 426ed by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Jul 2026 21:27:47 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Joerg Wunsch Subject: git: 34ae0f7834d1 - main - cam/cd: avoid integer divide fault in cdstart() List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: joerg X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 34ae0f7834d1bd6bb765d1c12e57e01e32b3e060 Auto-Submitted: auto-generated Date: Sun, 26 Jul 2026 21:27:47 +0000 Message-Id: <6a667bd3.426ed.1ab5a52e@gitrepo.freebsd.org> The branch main has been updated by joerg: URL: https://cgit.FreeBSD.org/src/commit/?id=34ae0f7834d1bd6bb765d1c12e57e01e32b3e060 commit 34ae0f7834d1bd6bb765d1c12e57e01e32b3e060 Author: Joerg Wunsch AuthorDate: 2026-07-26 20:54:01 +0000 Commit: Joerg Wunsch CommitDate: 2026-07-26 21:25:53 +0000 cam/cd: avoid integer divide fault in cdstart() If something goes very badly (e.g. forcibly removing a medium while the OS tries to start it), this could end up in params.blksize being 0 (and params.disksize 1). Avoid an integer divide fault, panicking the kernel, by bailing out before. MFC after: 3 days --- sys/cam/scsi/scsi_cd.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sys/cam/scsi/scsi_cd.c b/sys/cam/scsi/scsi_cd.c index e622a96ec77e..1e8dc98d53f4 100644 --- a/sys/cam/scsi/scsi_cd.c +++ b/sys/cam/scsi/scsi_cd.c @@ -918,6 +918,16 @@ cdstart(struct cam_periph *periph, union ccb *start_ccb) return; } + if (softc->params.blksize == 0) { + /* + * Something went utterly wrong. + * Avoid integer divide fault below. + */ + biofinish(bp, NULL, ENXIO); + xpt_release_ccb(start_ccb); + return; + } + scsi_read_write(&start_ccb->csio, /*retries*/ cd_retry_count, /* cbfcnp */ cddone, From nobody Sun Jul 26 22:08:45 2026 X-Original-To: dev-commits-src-main@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 4h7bdX4By7z6m0Cv; Sun, 26 Jul 2026 22:15:28 +0000 (UTC) (envelope-from christos@FreeBSD.org) Received: from margiolis.net (mail.margiolis.net [95.179.159.8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA512) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4h7bdW4GxMz3mv0; Sun, 26 Jul 2026 22:15:27 +0000 (UTC) (envelope-from christos@FreeBSD.org) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=margiolis.net header.s=default header.b=G2SupCYA; spf=softfail (mx1.freebsd.org: 95.179.159.8 is neither permitted nor denied by domain of christos@FreeBSD.org) smtp.mailfrom=christos@FreeBSD.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=freebsd.org (policy=none) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; s=default; bh=xszIqra5Yers i5B6OqLSjr8qqNH+BAXSoEsuHWh+mYI=; h=in-reply-to:references:to:from: subject:cc:date; d=margiolis.net; b=G2SupCYAtr+zI5lycVLBfC6H+rls9YSAwf 1E4MqLzqmSUNq++VHTo6uCdJHVQYtGZk8jHZEb35NCilAW/2XqPLsK/EyAPA0/OmimWCuf W5Chy/8c/lO3qE3tJ5tPAHvBQyzOh7sYmj/tAxGuvOD7NvLkVrcno6pPxNyc8DYiMpU= Received: from localhost (109-178-193-69.pat.ren.cosmote.net [109.178.193.69]) by margiolis.net (OpenSMTPD) with ESMTPSA id 7d921be0 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Sun, 26 Jul 2026 16:08:47 -0600 (MDT) List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Mon, 27 Jul 2026 01:08:45 +0300 Message-Id: Cc: , , "Kevin Bowling" , Subject: Re: git: 967e86d1ef2a - main - sound: Scale PCM secondary buffers by byte rate From: "Christos Margiolis" To: "Ronald Klop" X-Mailer: aerc 0.21.0 References: <6a636fb1.26412.26a07c1d@gitrepo.freebsd.org> <20302724.1251.1784904383819@localhost> In-Reply-To: <20302724.1251.1784904383819@localhost> X-Spamd-Result: default: False [2.30 / 15.00]; SPAM_FLAG(5.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; MV_CASE(0.50)[]; R_DKIM_ALLOW(-0.20)[margiolis.net:s=default]; DMARC_POLICY_SOFTFAIL(0.10)[freebsd.org : No valid SPF, DKIM not aligned (relaxed),none]; MIME_GOOD(-0.10)[text/plain]; GREYLIST(0.00)[pass,body]; RCVD_TLS_ALL(0.00)[]; RECEIVED_HELO_LOCALHOST(0.00)[]; MIME_TRACE(0.00)[0:+]; DKIM_TRACE(0.00)[margiolis.net:+]; ARC_NA(0.00)[]; FROM_HAS_DN(0.00)[]; FREEFALL_USER(0.00)[christos]; TO_DN_SOME(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; R_SPF_SOFTFAIL(0.00)[~all:c]; FROM_EQ_ENVFROM(0.00)[]; RCVD_COUNT_ONE(0.00)[1]; MLMMJ_DEST(0.00)[dev-commits-src-all@FreeBSD.org,dev-commits-src-main@FreeBSD.org]; RCVD_VIA_SMTP_AUTH(0.00)[]; MID_RHS_MATCH_FROM(0.00)[]; ASN(0.00)[asn:20473, ipnet:95.179.144.0/20, country:US]; RCPT_COUNT_FIVE(0.00)[5] X-Rspamd-Queue-Id: 4h7bdW4GxMz3mv0 X-Spamd-Bar: ++ On Fri Jul 24, 2026 at 5:46 PM EEST, Ronald Klop wrote: > Is this a good candidate for > Relnotes: yes > in the commit message? I don't think so to be honest. > Regards, > Ronald. > > > =20 > Van: Christos Margiolis > Datum: vrijdag, 24 juli 2026 15:59 > Aan: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-com= mits-src-main@FreeBSD.org > CC: Kevin Bowling > Onderwerp: git: 967e86d1ef2a - main - sound: Scale PCM secondary buffers = by byte rate >>=20 >> The branch main has been updated by christos: >>=20 >> URL: https://cgit.FreeBSD.org/src/commit/?id=3D967e86d1ef2ac8711c0ae7be3= 53a9c08186f4e6f >>=20 >> commit 967e86d1ef2ac8711c0ae7be353a9c08186f4e6f >> Author: Kevin Bowling >> AuthorDate: 2026-07-24 13:57:27 +0000 >> Commit: Christos Margiolis >> CommitDate: 2026-07-24 13:58:14 +0000 >>=20 >> sound: Scale PCM secondary buffers by byte rate >> =20 >> The fixed 128 KiB secondary buffer cap dates from stereo-sized strea= ms. >> High channel-count or high sample-width OSS streams can consume most= of >> that budget in one graph quantum, leaving too little room for captur= e >> catch-up or playback headroom. >> =20 >> Keep 128 KiB as the low-rate floor, but derive the effective soft-ri= ng >> cap from the channel byte rate, clamped to 4 MiB. Use that per-chann= el >> cap when resizing the soft buffer and when clamping >> SNDCTL_DSP_SETFRAGMENT requests. >> =20 >> Also clamp SNDCTL_DSP_LOW_WATER to the current soft-buffer size so a= n >> impossible readiness threshold cannot make poll/select wait forever. >> =20 >> MFC after: 3 weeks >> Reviewed by: christos >> Differential Revision: https://reviews.freebsd.org/D58064 >> --- >> sys/dev/sound/pcm/channel.c | 62 +++++++++++++++++++++++++++++++++-----= ------- >> sys/dev/sound/pcm/channel.h | 30 +++++++++++++++++----- >> sys/dev/sound/pcm/dsp.c | 38 +++++++++++++++++++-------- >> 3 files changed, 96 insertions(+), 34 deletions(-) >>=20 >> diff --git a/sys/dev/sound/pcm/channel.c b/sys/dev/sound/pcm/channel.c >> index ff7620c772c3..21c223c61205 100644 >> --- a/sys/dev/sound/pcm/channel.c >> +++ b/sys/dev/sound/pcm/channel.c >> @@ -1657,15 +1657,30 @@ round_pow2(u_int32_t v) >> return ret; >> } >> =20 >> +u_int32_t >> +chn_2ndbufmaxsize(struct pcm_channel *c) >> +{ >> + struct snd_dbuf *bs; >> + uint64_t maxsize; >> + >> + CHN_LOCKASSERT(c); >> + >> + bs =3D c->bufsoft; >> + maxsize =3D (uint64_t)bs->align * bs->spd * CHN_2NDBUFTIME_MS / 1000= ; >> + RANGE(maxsize, CHN_2NDBUFSIZE_MIN, CHN_2NDBUFSIZE_MAX); >> + >> + return ((u_int32_t)maxsize); >> +} >> + >> static u_int32_t >> -round_blksz(u_int32_t v, int round) >> +round_blksz(u_int32_t v, int round, u_int32_t maxsize) >> { >> u_int32_t ret, tmp; >> =20 >> if (round < 1) >> round =3D 1; >> =20 >> - ret =3D min(round_pow2(v), CHN_2NDBUFMAXSIZE >> 1); >> + ret =3D min(round_pow2(v), maxsize >> 1); >> =20 >> if (ret > v && (ret >> 1) > 0 && (ret >> 1) >=3D ((v * 3) >> 2)) >> ret >>=3D 1; >> @@ -1780,14 +1795,16 @@ chn_calclatency(int dir, int latency, int bps, u= _int32_t datarate, >> if (latency < CHN_LATENCY_MIN || latency > CHN_LATENCY_MAX || >> bps < 1 || datarate < 1 || >> !(dir =3D=3D PCMDIR_PLAY || dir =3D=3D PCMDIR_REC)) { >> + if (max < CHN_2NDBUFSIZE_MIN) >> + max =3D CHN_2NDBUFSIZE_MIN; >> if (rblksz !=3D NULL) >> - *rblksz =3D CHN_2NDBUFMAXSIZE >> 1; >> + *rblksz =3D max >> 1; >> if (rblkcnt !=3D NULL) >> *rblkcnt =3D 2; >> printf("%s(): FAILED dir=3D%d latency=3D%d bps=3D%d " >> "datarate=3D%u max=3D%u\n", >> __func__, dir, latency, bps, datarate, max); >> - return CHN_2NDBUFMAXSIZE; >> + return max; >> } >> =20 >> lprofile =3D chn_latency_profile; >> @@ -1804,7 +1821,7 @@ chn_calclatency(int dir, int latency, int bps, u_i= nt32_t datarate, >> datarate)); >> if (bufsz > max) >> bufsz =3D max; >> - blksz =3D round_blksz(bufsz >> blkcnt, bps); >> + blksz =3D round_blksz(bufsz >> blkcnt, bps, max); >> =20 >> if (rblksz !=3D NULL) >> *rblksz =3D blksz; >> @@ -1821,6 +1838,7 @@ chn_resizebuf(struct pcm_channel *c, int latency, >> struct snd_dbuf *b, *bs, *pb; >> int sblksz, sblkcnt, hblksz, hblkcnt, limit =3D 0, nsblksz, nsblkcnt= ; >> int ret; >> + u_int32_t maxsize; >> =20 >> CHN_LOCKASSERT(c); >> =20 >> @@ -1843,14 +1861,15 @@ chn_resizebuf(struct pcm_channel *c, int latency= , >> =20 >> bs =3D c->bufsoft; >> b =3D c->bufhard; >> + maxsize =3D chn_2ndbufmaxsize(c); >> =20 >> if (!(blksz =3D=3D 0 || blkcnt =3D=3D -1) && >> (blksz < 16 || blksz < bs->align || blkcnt < 2 || >> - (blksz * blkcnt) > CHN_2NDBUFMAXSIZE)) >> + (uint64_t)blksz * blkcnt > maxsize)) >> return EINVAL; >> =20 >> chn_calclatency(c->direction, latency, bs->align, >> - bs->align * bs->spd, CHN_2NDBUFMAXSIZE, >> + bs->align * bs->spd, maxsize, >> &sblksz, &sblkcnt); >> =20 >> if (blksz =3D=3D 0 || blkcnt =3D=3D -1) { >> @@ -1871,7 +1890,7 @@ chn_resizebuf(struct pcm_channel *c, int latency, >> * defeat the purpose of having custom control. The least >> * we can do is round it to the nearest ^2 and align it. >> */ >> - sblksz =3D round_blksz(blksz, bs->align); >> + sblksz =3D round_blksz(blksz, bs->align, maxsize); >> sblkcnt =3D round_pow2(blkcnt); >> } >> =20 >> @@ -1890,18 +1909,28 @@ chn_resizebuf(struct pcm_channel *c, int latency= , >> sndbuf_xbytes(pb->blksz, pb, bs) * 2 : 0; >> } >> } else { >> + /* >> + * The byte-rate-scaled cap applies to the secondary buffer >> + * only. It exists to absorb userland scheduling latency, >> + * which the secondary buffer alone must cover; hardware >> + * buffer geometry keeps the historical cap, since enlarging >> + * it would change fragment sizes and interrupt cadence >> + * visible to drivers, and remains bounded by b->maxsize >> + * below. >> + */ >> hblkcnt =3D 2; >> if (c->flags & CHN_F_HAS_SIZE) { >> hblksz =3D round_blksz(sndbuf_xbytes(sblksz, bs, b), >> - b->align); >> + b->align, CHN_2NDBUFSIZE_MIN); >> hblkcnt =3D round_pow2(bs->blkcnt); >> } else >> chn_calclatency(c->direction, latency, >> b->align, b->align * b->spd, >> - CHN_2NDBUFMAXSIZE, &hblksz, &hblkcnt); >> + CHN_2NDBUFSIZE_MIN, &hblksz, &hblkcnt); >> =20 >> if ((hblksz << 1) > b->maxsize) >> - hblksz =3D round_blksz(b->maxsize >> 1, b->align); >> + hblksz =3D round_blksz(b->maxsize >> 1, b->align, >> + CHN_2NDBUFSIZE_MIN); >> =20 >> while ((hblksz * hblkcnt) > b->maxsize) { >> if (hblkcnt < 4) >> @@ -1922,7 +1951,8 @@ chn_resizebuf(struct pcm_channel *c, int latency, >> =20 >> if (!CHN_EMPTY(c, children)) { >> nsblksz =3D round_blksz( >> - sndbuf_xbytes(b->blksz, b, bs), bs->align); >> + sndbuf_xbytes(b->blksz, b, bs), bs->align, >> + maxsize); >> nsblkcnt =3D b->blkcnt; >> if (c->direction =3D=3D PCMDIR_PLAY) { >> do { >> @@ -1938,13 +1968,13 @@ chn_resizebuf(struct pcm_channel *c, int latency= , >> limit =3D sndbuf_xbytes(b->blksz, b, bs) * 2; >> } >> =20 >> - if (limit > CHN_2NDBUFMAXSIZE) >> - limit =3D CHN_2NDBUFMAXSIZE; >> + if ((u_int32_t)limit > maxsize) >> + limit =3D maxsize; >> =20 >> - while ((sblksz * sblkcnt) < limit) >> + while ((uint64_t)sblksz * sblkcnt < (uint64_t)limit) >> sblkcnt <<=3D 1; >> =20 >> - while ((sblksz * sblkcnt) > CHN_2NDBUFMAXSIZE) { >> + while ((uint64_t)sblksz * sblkcnt > maxsize) { >> if (sblkcnt < 4) >> sblksz >>=3D 1; >> else >> diff --git a/sys/dev/sound/pcm/channel.h b/sys/dev/sound/pcm/channel.h >> index c7f5bf93b8e5..c78c25dac13b 100644 >> --- a/sys/dev/sound/pcm/channel.h >> +++ b/sys/dev/sound/pcm/channel.h >> @@ -430,15 +430,31 @@ enum { >> #define CHN_TIMEOUT_MIN 1 >> #define CHN_TIMEOUT_MAX 10 >> =20 >> -/* >> - * This should be large enough to hold all pcm data between >> - * tsleeps in chn_{read,write} at the highest sample rate. >> - * (which is usually 48kHz * 16bit * stereo =3D 192000 bytes/sec) >> - */ >> +/* Default block size for the secondary buffer. */ >> #define CHN_2NDBUFBLKSIZE (2 * 1024) >> /* The total number of blocks per secondary bufhard. */ >> #define CHN_2NDBUFBLKNUM (32) >> -/* The size of a whole secondary bufhard. */ >> -#define CHN_2NDBUFMAXSIZE (131072) >> +/* >> + * The secondary buffer cap scales with the channel byte rate, targetin= g >> + * CHN_2NDBUFTIME_MS of stream so that all pcm data between tsleeps in >> + * chn_{read,write} fits, clamped to [CHN_2NDBUFSIZE_MIN, >> + * CHN_2NDBUFSIZE_MAX]. >> + * >> + * The floor is the historical secondary buffer size and preserves memo= ry >> + * use for low byte-rate streams; it holds ~680 ms at the once-typical >> + * 48kHz * 16bit * stereo rate (192000 bytes/sec), well above the targe= t >> + * (~38 KiB there). >> + * >> + * The ceiling bounds per-channel buffer memory. Buffers are allocated= at >> + * the derived size, so only streams that actually run at high byte rat= es >> + * approach it. It holds the full target through MADI-class streams >> + * (64ch * 32-bit * 48kHz, ~12.3 MB/s); beyond that, coverage shrinks >> + * proportionally (e.g. ~85 ms at 64ch * 32-bit * 192kHz). >> + */ >> +#define CHN_2NDBUFSIZE_MIN (131072) >> +#define CHN_2NDBUFSIZE_MAX (4 * 1024 * 1024) >> +#define CHN_2NDBUFTIME_MS 200 >> + >> +u_int32_t chn_2ndbufmaxsize(struct pcm_channel *); >> =20 >> #define CHANNEL_DECLARE(name) static DEFINE_CLASS(name, name ## _method= s, sizeof(struct kobj)) >> diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c >> index 0a5063410d24..f49df6e8a8c6 100644 >> --- a/sys/dev/sound/pcm/dsp.c >> +++ b/sys/dev/sound/pcm/dsp.c >> @@ -109,6 +109,25 @@ static int dsp_oss_setsong(struct pcm_channel *wrch= , struct pcm_channel *rdch, o >> static int dsp_oss_setname(struct pcm_channel *wrch, struct pcm_channel= *rdch, oss_longname_t *name); >> #endif >> =20 >> +static uint32_t >> +dsp_clamp_fragments(uint32_t maxfrags, uint32_t fragsz, uint32_t maxsiz= e) >> +{ >> + if (maxfrags =3D=3D 0) >> + maxfrags =3D maxsize / fragsz; >> + if (maxfrags < 2) >> + maxfrags =3D 2; >> + if ((uint64_t)maxfrags * fragsz > maxsize) >> + maxfrags =3D maxsize / fragsz; >> + return (maxfrags); >> +} >> + >> +static unsigned int >> +dsp_low_water(struct pcm_channel *ch, int lw) >> +{ >> + RANGE(lw, 1, ch->bufsoft->bufsize); >> + return ((unsigned int)lw); >> +} >> + >> int >> dsp_make_dev(device_t dev) >> { >> @@ -1244,18 +1263,13 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_= t arg, int mode, >> RANGE(fragln, 4, 16); >> fragsz =3D 1 << fragln; >> =20 >> - if (maxfrags =3D=3D 0) >> - maxfrags =3D CHN_2NDBUFMAXSIZE / fragsz; >> - if (maxfrags < 2) >> - maxfrags =3D 2; >> - if (maxfrags * fragsz > CHN_2NDBUFMAXSIZE) >> - maxfrags =3D CHN_2NDBUFMAXSIZE / fragsz; >> - >> DEB(printf("SNDCTL_DSP_SETFRAGMENT %d frags, %d sz\n", maxfr= ags, fragsz)); >> PCM_ACQUIRE_QUICK(d); >> if (rdch) { >> CHN_LOCK(rdch); >> - ret =3D chn_setblocksize(rdch, maxfrags, fragsz); >> + ret =3D chn_setblocksize(rdch, >> + dsp_clamp_fragments(maxfrags, fragsz, >> + chn_2ndbufmaxsize(rdch)), fragsz); >> r_maxfrags =3D rdch->bufsoft->blkcnt; >> r_fragsz =3D rdch->bufsoft->blksz; >> CHN_UNLOCK(rdch); >> @@ -1265,7 +1279,9 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_t = arg, int mode, >> } >> if (wrch && ret =3D=3D 0) { >> CHN_LOCK(wrch); >> - ret =3D chn_setblocksize(wrch, maxfrags, fragsz); >> + ret =3D chn_setblocksize(wrch, >> + dsp_clamp_fragments(maxfrags, fragsz, >> + chn_2ndbufmaxsize(wrch)), fragsz); >> maxfrags =3D wrch->bufsoft->blkcnt; >> fragsz =3D wrch->bufsoft->blksz; >> CHN_UNLOCK(wrch); >> @@ -1653,12 +1669,12 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_= t arg, int mode, >> */ >> if (wrch !=3D NULL) { >> CHN_LOCK(wrch); >> - wrch->lw =3D (*arg_i > 1) ? *arg_i : 1; >> + wrch->lw =3D dsp_low_water(wrch, *arg_i); >> CHN_UNLOCK(wrch); >> } >> if (rdch !=3D NULL) { >> CHN_LOCK(rdch); >> - rdch->lw =3D (*arg_i > 1) ? *arg_i : 1; >> + rdch->lw =3D dsp_low_water(rdch, *arg_i); >> CHN_UNLOCK(rdch); >> } >> break; >> =20 >>=20 >>=20 >>=20 > > =20 From nobody Sun Jul 26 22:18:38 2026 X-Original-To: dev-commits-src-main@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 4h7bjC2rsxz6m0Nf for ; Sun, 26 Jul 2026 22:18:39 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h7bjC2Tdwz3nP9 for ; Sun, 26 Jul 2026 22:18:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785104319; 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=yKunYl7jUMOHY5IWye3z4bQuzaGpK7sGDKQZDZsMARQ=; b=SXhZ4dq2BKJsWVX42BuR2zXINJzg0iWOfnUiUCW85RWALbiobQzL/TSjOnDubiKyehxAvl ru6/Hi23TBxGQiqmOB6l8owiapnnR9sJkRxxwYXX0HaGL3xic9ls48TuFgKfS07joOlkrW pd9gYi6M75ZTcLMUhS+tYtM2PDni8AuDeUWmE1uBAgsDLTdU+/oplSoFTJtC6blLzJOdfh 9xCTiNt700YMtSfQevmwhPB/ehraxTmMAMG+jWogfMwqCflK2MHREGBcL9TgAoAEociXUC tsqd3Wk0FpK2j9Yc+WPsh8qkJpIvN14P+QLeT1wjHESU/IkrUtE6nPdl9e0Org== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785104319; a=rsa-sha256; cv=none; b=GNuQs3Fi0k3ihBxpa67DjchxztxRxk+atV3fk9fqtO2ZJEi1DLChmxnAjNbKZL3/czT9Gn wdMROdj/+4nrwZlreCQsTKr6asgWOmh9Zt9iTzXIiDYZrymEOXsEyrkhNrTeTsfxOoRH3O KHLcUITE8hmcE6t9PYvmwZiXVRJeg2Z6Y6sunIWarbQBx0DbQQ2VOoTUJLSlRIgKA/1o0v qrrvi0EwoVESvzIDizJfgqfBJ+KPseVnP9ss4lcmslgOGMZJxNU+fE2IBUEY4DKS2VrR7a 4asGtCrF4kvhNPv3SenVsgL+phPIZ/qgfd5iYGs8qOaX1l/ItI5MnY7Zvcnz/w== 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=1785104319; 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=yKunYl7jUMOHY5IWye3z4bQuzaGpK7sGDKQZDZsMARQ=; b=idpuDMRQdvtKqNGVmPql5fJruZWWivqNutg1GIc0iU2+ii54Z4d+dzRZm1Z7jcUTnJqbLG w+PJGFeaM2HvY+82ft4qRL/k/FCigEDPCEh5FbWbZo3E/AYBjARAtIv8edPhtAlP8cqHbT kHw0dJIsJAKukBPtrQyYyMjGTgvAqSEBtfsY6uRVnoidjJ8WJgucRKZgtqTFo4Jh20wJu4 LA6kAip6YjNywZ0z9/0kR+VLjMQEEWFAT70R+G/ux6nXCrJjF89LTFQ0cQmsdUU4LQ1fe1 Uv8cg3J23vw/AJfKxsGl8qjyLnTs3EES4l/+oumAS6imX2alakjeE+9zb8he1A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h7bjC11TKzhY2 for ; Sun, 26 Jul 2026 22:18:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1863f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 26 Jul 2026 22:18:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Christos Margiolis Subject: git: 95439b803fce - main - sound: Stop using legacy u_int types List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: christos X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 95439b803fce86958e1db1927a8405bf939edda4 Auto-Submitted: auto-generated Date: Sun, 26 Jul 2026 22:18:38 +0000 Message-Id: <6a6687be.1863f.32620254@gitrepo.freebsd.org> The branch main has been updated by christos: URL: https://cgit.FreeBSD.org/src/commit/?id=95439b803fce86958e1db1927a8405bf939edda4 commit 95439b803fce86958e1db1927a8405bf939edda4 Author: Christos Margiolis AuthorDate: 2026-07-23 21:05:42 +0000 Commit: Christos Margiolis CommitDate: 2026-07-26 22:16:47 +0000 sound: Stop using legacy u_int types No functional change intended. Sponsored by: The FreeBSD Foundation MFC after: 1 week --- sys/dev/sound/macio/aoa.c | 26 ++--- sys/dev/sound/macio/davbus.c | 58 +++++----- sys/dev/sound/macio/i2s.c | 28 ++--- sys/dev/sound/macio/onyx.c | 10 +- sys/dev/sound/macio/snapper.c | 14 +-- sys/dev/sound/macio/tumbler.c | 14 +-- sys/dev/sound/pci/als4000.c | 92 ++++++++-------- sys/dev/sound/pci/cmi.c | 96 ++++++++--------- sys/dev/sound/pci/cs4281.c | 96 ++++++++--------- sys/dev/sound/pci/csa.c | 36 +++---- sys/dev/sound/pci/csamidi.c | 4 +- sys/dev/sound/pci/csapcm.c | 30 +++--- sys/dev/sound/pci/csareg.h | 4 +- sys/dev/sound/pci/csavar.h | 16 +-- sys/dev/sound/pci/emu10k1.c | 130 +++++++++++----------- sys/dev/sound/pci/emu10kx-pcm.c | 10 +- sys/dev/sound/pci/envy24.c | 214 ++++++++++++++++++------------------- sys/dev/sound/pci/envy24ht.c | 200 +++++++++++++++++----------------- sys/dev/sound/pci/fm801.c | 46 ++++---- sys/dev/sound/pci/hda/hdaa.c | 2 +- sys/dev/sound/pci/maestro3.c | 168 ++++++++++++++--------------- sys/dev/sound/pci/neomagic-coeff.h | 2 +- sys/dev/sound/pci/neomagic.c | 68 ++++++------ sys/dev/sound/pci/solo.c | 62 +++++------ sys/dev/sound/pci/spicds.c | 2 +- sys/dev/sound/pci/t4dwave.c | 82 +++++++------- sys/dev/sound/pci/via82c686.c | 32 +++--- sys/dev/sound/pci/vibes.c | 98 ++++++++--------- sys/dev/sound/pcm/ac97.c | 58 +++++----- sys/dev/sound/pcm/ac97.h | 18 ++-- sys/dev/sound/pcm/ac97_if.m | 6 +- sys/dev/sound/pcm/buffer.c | 22 ++-- sys/dev/sound/pcm/buffer.h | 30 +++--- sys/dev/sound/pcm/channel.c | 42 ++++---- sys/dev/sound/pcm/channel.h | 32 +++--- sys/dev/sound/pcm/channel_if.m | 28 ++--- sys/dev/sound/pcm/dsp.c | 2 +- sys/dev/sound/pcm/feeder.c | 34 +++--- sys/dev/sound/pcm/feeder.h | 8 +- sys/dev/sound/pcm/feeder_if.m | 4 +- sys/dev/sound/pcm/mixer.c | 56 +++++----- sys/dev/sound/pcm/mixer.h | 44 ++++---- sys/dev/sound/pcm/mixer_if.m | 4 +- sys/dev/sound/pcm/sound.h | 4 +- 44 files changed, 1016 insertions(+), 1016 deletions(-) diff --git a/sys/dev/sound/macio/aoa.c b/sys/dev/sound/macio/aoa.c index e0a6206c19a6..ff8f17224384 100644 --- a/sys/dev/sound/macio/aoa.c +++ b/sys/dev/sound/macio/aoa.c @@ -60,20 +60,20 @@ struct aoa_dma { bus_dma_tag_t tag; /* bus_dma tag */ struct pcm_channel *pcm; /* PCM channel */ struct snd_dbuf *buf; /* PCM buffer */ - u_int slots; /* # of slots */ - u_int slot; /* current slot */ - u_int bufsz; /* buffer size */ - u_int blksz; /* block size */ + unsigned int slots; /* # of slots */ + unsigned int slot; /* current slot */ + unsigned int bufsz; /* buffer size */ + unsigned int blksz; /* block size */ int running; }; static void aoa_dma_set_program(struct aoa_dma *dma) { - u_int32_t addr; + uint32_t addr; int i; - addr = (u_int32_t)dma->buf->buf_addr; + addr = (uint32_t)dma->buf->buf_addr; KASSERT(dma->bufsz == dma->buf->bufsize, ("bad size")); dma->slots = dma->bufsz / dma->blksz; @@ -144,8 +144,8 @@ aoa_dma_delete(struct aoa_dma *dma) free(dma, M_DEVBUF); } -static u_int32_t -aoa_chan_setblocksize(kobj_t obj, void *data, u_int32_t blocksz) +static uint32_t +aoa_chan_setblocksize(kobj_t obj, void *data, uint32_t blocksz) { struct aoa_dma *dma = data; int err, lz; @@ -188,7 +188,7 @@ aoa_chan_setblocksize(kobj_t obj, void *data, u_int32_t blocksz) } static int -aoa_chan_setformat(kobj_t obj, void *data, u_int32_t format) +aoa_chan_setformat(kobj_t obj, void *data, uint32_t format) { DPRINTF(("aoa_chan_setformat: format = %u\n", format)); @@ -198,15 +198,15 @@ aoa_chan_setformat(kobj_t obj, void *data, u_int32_t format) return (0); } -static u_int32_t -aoa_chan_setspeed(kobj_t obj, void *data, u_int32_t speed) +static uint32_t +aoa_chan_setspeed(kobj_t obj, void *data, uint32_t speed) { DPRINTF(("aoa_chan_setspeed: speed = %u\n", speed)); return (44100); } -static u_int32_t +static uint32_t aoa_chan_getptr(kobj_t obj, void *data) { struct aoa_dma *dma = data; @@ -336,7 +336,7 @@ aoa_interrupt(void *xsc) mtx_unlock(&dma->mutex); } -static u_int32_t sc_fmt[] = { +static uint32_t sc_fmt[] = { SND_FORMAT(AFMT_S16_BE, 2, 0), 0 }; diff --git a/sys/dev/sound/macio/davbus.c b/sys/dev/sound/macio/davbus.c index 8e9fe78317cb..de15806e6d5c 100644 --- a/sys/dev/sound/macio/davbus.c +++ b/sys/dev/sound/macio/davbus.c @@ -63,9 +63,9 @@ struct davbus_softc { struct resource *reg; struct mtx mutex; int device_id; - u_int output_mask; - u_int (*read_status)(struct davbus_softc *, u_int); - void (*set_outputs)(struct davbus_softc *, u_int); + unsigned int output_mask; + unsigned int (*read_status)(struct davbus_softc *, unsigned int); + void (*set_outputs)(struct davbus_softc *, unsigned int); }; static int davbus_probe(device_t); @@ -115,12 +115,12 @@ davbus_probe(device_t self) static int burgundy_init(struct snd_mixer *m); static int burgundy_uninit(struct snd_mixer *m); static int burgundy_reinit(struct snd_mixer *m); -static void burgundy_write_locked(struct davbus_softc *, u_int, u_int); -static void burgundy_set_outputs(struct davbus_softc *d, u_int mask); -static u_int burgundy_read_status(struct davbus_softc *d, u_int status); +static void burgundy_write_locked(struct davbus_softc *, unsigned int, unsigned int); +static void burgundy_set_outputs(struct davbus_softc *d, unsigned int mask); +static unsigned int burgundy_read_status(struct davbus_softc *d, unsigned int status); static int burgundy_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right); -static u_int32_t burgundy_setrecsrc(struct snd_mixer *m, u_int32_t src); +static uint32_t burgundy_setrecsrc(struct snd_mixer *m, uint32_t src); static kobj_method_t burgundy_mixer_methods[] = { KOBJMETHOD(mixer_init, burgundy_init), @@ -200,9 +200,9 @@ burgundy_reinit(struct snd_mixer *m) } static void -burgundy_write_locked(struct davbus_softc *d, u_int reg, u_int val) +burgundy_write_locked(struct davbus_softc *d, unsigned int reg, unsigned int val) { - u_int size, addr, offset, data, i; + unsigned int size, addr, offset, data, i; size = (reg & 0x00FF0000) >> 16; addr = (reg & 0x0000FF00) >> 8; @@ -226,9 +226,9 @@ burgundy_write_locked(struct davbus_softc *d, u_int reg, u_int val) /* Must be called with d->mutex held. */ static void -burgundy_set_outputs(struct davbus_softc *d, u_int mask) +burgundy_set_outputs(struct davbus_softc *d, unsigned int mask) { - u_int x = 0; + unsigned int x = 0; if (mask == d->output_mask) return; @@ -259,8 +259,8 @@ burgundy_set_outputs(struct davbus_softc *d, u_int mask) d->output_mask = mask; } -static u_int -burgundy_read_status(struct davbus_softc *d, u_int status) +static unsigned int +burgundy_read_status(struct davbus_softc *d, unsigned int status) { if (status & 0x4) return (1 << 1); @@ -298,8 +298,8 @@ burgundy_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right) return (0); } -static u_int32_t -burgundy_setrecsrc(struct snd_mixer *m, u_int32_t src) +static uint32_t +burgundy_setrecsrc(struct snd_mixer *m, uint32_t src) { return (0); } @@ -311,12 +311,12 @@ burgundy_setrecsrc(struct snd_mixer *m, u_int32_t src) static int screamer_init(struct snd_mixer *m); static int screamer_uninit(struct snd_mixer *m); static int screamer_reinit(struct snd_mixer *m); -static void screamer_write_locked(struct davbus_softc *, u_int, u_int); -static void screamer_set_outputs(struct davbus_softc *d, u_int mask); -static u_int screamer_read_status(struct davbus_softc *d, u_int status); +static void screamer_write_locked(struct davbus_softc *, unsigned int, unsigned int); +static void screamer_set_outputs(struct davbus_softc *d, unsigned int mask); +static unsigned int screamer_read_status(struct davbus_softc *d, unsigned int status); static int screamer_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right); -static u_int32_t screamer_setrecsrc(struct snd_mixer *m, u_int32_t src); +static uint32_t screamer_setrecsrc(struct snd_mixer *m, uint32_t src); static kobj_method_t screamer_mixer_methods[] = { KOBJMETHOD(mixer_init, screamer_init), @@ -372,9 +372,9 @@ screamer_reinit(struct snd_mixer *m) } static void -screamer_write_locked(struct davbus_softc *d, u_int reg, u_int val) +screamer_write_locked(struct davbus_softc *d, unsigned int reg, unsigned int val) { - u_int x; + unsigned int x; KASSERT(val == (val & 0xfff), ("bad val")); @@ -392,9 +392,9 @@ screamer_write_locked(struct davbus_softc *d, u_int reg, u_int val) /* Must be called with d->mutex held. */ static void -screamer_set_outputs(struct davbus_softc *d, u_int mask) +screamer_set_outputs(struct davbus_softc *d, unsigned int mask) { - u_int x; + unsigned int x; if (mask == d->output_mask) { return; @@ -430,8 +430,8 @@ screamer_set_outputs(struct davbus_softc *d, u_int mask) d->output_mask = mask; } -static u_int -screamer_read_status(struct davbus_softc *d, u_int status) +static unsigned int +screamer_read_status(struct davbus_softc *d, unsigned int status) { int headphones; @@ -483,8 +483,8 @@ screamer_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right) return (0); } -static u_int32_t -screamer_setrecsrc(struct snd_mixer *m, u_int32_t src) +static uint32_t +screamer_setrecsrc(struct snd_mixer *m, uint32_t src) { return (0); } @@ -539,7 +539,7 @@ davbus_attach(device_t self) bzero(compat, sizeof(compat)); OF_getprop(sc->soundnode, "compatible", compat, sizeof(compat)); - OF_getprop(sc->soundnode, "device-id", &sc->device_id, sizeof(u_int)); + OF_getprop(sc->soundnode, "device-id", &sc->device_id, sizeof(unsigned int)); mtx_init(&sc->mutex, "DAVbus", NULL, MTX_DEF); @@ -575,7 +575,7 @@ static void davbus_cint(void *ptr) { struct davbus_softc *d = ptr; - u_int reg, status, mask; + unsigned int reg, status, mask; mtx_lock(&d->mutex); diff --git a/sys/dev/sound/macio/i2s.c b/sys/dev/sound/macio/i2s.c index 2c134f8f97fe..327fbe5fc0bd 100644 --- a/sys/dev/sound/macio/i2s.c +++ b/sys/dev/sound/macio/i2s.c @@ -87,18 +87,18 @@ struct i2s_softc { phandle_t node; phandle_t soundnode; struct resource *reg; - u_int output_mask; + unsigned int output_mask; struct mtx port_mtx; }; static int i2s_probe(device_t); static int i2s_attach(device_t); static void i2s_postattach(void *); -static int i2s_setup(struct i2s_softc *, u_int, u_int, u_int); +static int i2s_setup(struct i2s_softc *, unsigned int, unsigned int, unsigned int); static void i2s_mute_headphone (struct i2s_softc *, int); static void i2s_mute_lineout (struct i2s_softc *, int); static void i2s_mute_speaker (struct i2s_softc *, int); -static void i2s_set_outputs(void *, u_int); +static void i2s_set_outputs(void *, unsigned int); static struct intr_config_hook *i2s_delayed_attach = NULL; @@ -425,8 +425,8 @@ aoagpio_attach(device_t gpio) /* Number of clock sources we can use. */ #define NCLKS 3 static const struct i2s_clksrc { - u_int cs_clock; - u_int cs_reg; + unsigned int cs_clock; + unsigned int cs_reg; } clksrc[NCLKS] = { {49152000, CLKSRC_49MHz}, {45158400, CLKSRC_45MHz}, @@ -440,11 +440,11 @@ static const struct i2s_clksrc { or greater to the number of bits per frame. */ static int -i2s_setup(struct i2s_softc *sc, u_int rate, u_int wordsize, u_int sclk_fs) +i2s_setup(struct i2s_softc *sc, unsigned int rate, unsigned int wordsize, unsigned int sclk_fs) { - u_int mclk, mdiv, sdiv; - u_int reg = 0, x, wordformat; - u_int i; + unsigned int mclk, mdiv, sdiv; + unsigned int reg = 0, x, wordformat; + unsigned int i; /* Make sure the settings are consistent... */ if ((wordsize * 2) > sclk_fs) @@ -592,7 +592,7 @@ of_find_firstchild_byname(phandle_t node, const char *req_name) return (-1); } -static u_int +static unsigned int gpio_read(enum gpio_ctrl ctrl) { struct aoagpio_softc *sc; @@ -604,10 +604,10 @@ gpio_read(enum gpio_ctrl ctrl) } static void -gpio_write(enum gpio_ctrl ctrl, u_int x) +gpio_write(enum gpio_ctrl ctrl, unsigned int x) { struct aoagpio_softc *sc; - u_int reg; + unsigned int reg; if ((sc = gpio_ctrls[ctrl]) == NULL) return; @@ -622,7 +622,7 @@ gpio_write(enum gpio_ctrl ctrl, u_int x) static void i2s_cint(struct i2s_softc *sc) { - u_int mask = 0; + unsigned int mask = 0; if (gpio_ctrls[HEADPHONE_DETECT] && gpio_ctrls[HEADPHONE_DETECT]->level) @@ -691,7 +691,7 @@ MUTE_CONTROL(headphone, HEADPHONE) MUTE_CONTROL(lineout, LINEOUT) static void -i2s_set_outputs(void *ptr, u_int mask) +i2s_set_outputs(void *ptr, unsigned int mask) { struct i2s_softc *sc = ptr; diff --git a/sys/dev/sound/macio/onyx.c b/sys/dev/sound/macio/onyx.c index 5ba22dd7c495..745f861790db 100644 --- a/sys/dev/sound/macio/onyx.c +++ b/sys/dev/sound/macio/onyx.c @@ -74,7 +74,7 @@ static int onyx_uninit(struct snd_mixer *m); static int onyx_reinit(struct snd_mixer *m); static int onyx_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right); -static u_int32_t onyx_setrecsrc(struct snd_mixer *m, u_int32_t src); +static uint32_t onyx_setrecsrc(struct snd_mixer *m, uint32_t src); static device_method_t onyx_methods[] = { /* Device interface. */ @@ -168,7 +168,7 @@ static const struct onyx_reg onyx_initdata = { static int onyx_write(struct onyx_softc *sc, uint8_t reg, const uint8_t value) { - u_int size; + unsigned int size; uint8_t buf[16]; struct iic_msg msg[] = { @@ -226,7 +226,7 @@ static int onyx_init(struct snd_mixer *m) { struct onyx_softc *sc; - u_int x = 0; + unsigned int x = 0; sc = device_get_softc(mix_getdevinfo(m)); @@ -289,8 +289,8 @@ onyx_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right) return (0); } -static u_int32_t -onyx_setrecsrc(struct snd_mixer *m, u_int32_t src) +static uint32_t +onyx_setrecsrc(struct snd_mixer *m, uint32_t src) { return (0); } diff --git a/sys/dev/sound/macio/snapper.c b/sys/dev/sound/macio/snapper.c index ed83990d563b..c68ce20ee0b6 100644 --- a/sys/dev/sound/macio/snapper.c +++ b/sys/dev/sound/macio/snapper.c @@ -100,7 +100,7 @@ static int snapper_uninit(struct snd_mixer *m); static int snapper_reinit(struct snd_mixer *m); static int snapper_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right); -static u_int32_t snapper_setrecsrc(struct snd_mixer *m, u_int32_t src); +static uint32_t snapper_setrecsrc(struct snd_mixer *m, uint32_t src); static device_method_t snapper_methods[] = { /* Device interface. */ @@ -289,7 +289,7 @@ static const char snapper_regsize[] = { }; /* dB = 20 * log (x) table. */ -static u_int snapper_volume_table[100] = { +static unsigned int snapper_volume_table[100] = { 0x00000148, 0x0000015C, 0x00000171, 0x00000186, // -46.0, -45.5, -45.0, -44.5, 0x0000019E, 0x000001B6, 0x000001D0, 0x000001EB, // -44.0, -43.5, -43.0, -42.5, 0x00000209, 0x00000227, 0x00000248, 0x0000026B, // -42.0, -41.5, -41.0, -40.5, @@ -320,7 +320,7 @@ static u_int snapper_volume_table[100] = { static int snapper_write(struct snapper_softc *sc, uint8_t reg, const void *data) { - u_int size; + unsigned int size; uint8_t buf[16]; struct iic_msg msg[] = { @@ -381,7 +381,7 @@ static int snapper_init(struct snd_mixer *m) { struct snapper_softc *sc; - u_int x = 0; + unsigned int x = 0; sc = device_get_softc(mix_getdevinfo(m)); @@ -436,7 +436,7 @@ static int snapper_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right) { struct snapper_softc *sc; - u_int l, r; + unsigned int l, r; u_char reg[6]; sc = device_get_softc(mix_getdevinfo(m)); @@ -464,8 +464,8 @@ snapper_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right) return (0); } -static u_int32_t -snapper_setrecsrc(struct snd_mixer *m, u_int32_t src) +static uint32_t +snapper_setrecsrc(struct snd_mixer *m, uint32_t src) { return (0); } diff --git a/sys/dev/sound/macio/tumbler.c b/sys/dev/sound/macio/tumbler.c index 89af4434e7fe..0bb619f2fd90 100644 --- a/sys/dev/sound/macio/tumbler.c +++ b/sys/dev/sound/macio/tumbler.c @@ -100,7 +100,7 @@ static int tumbler_uninit(struct snd_mixer *m); static int tumbler_reinit(struct snd_mixer *m); static int tumbler_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right); -static u_int32_t tumbler_setrecsrc(struct snd_mixer *m, u_int32_t src); +static uint32_t tumbler_setrecsrc(struct snd_mixer *m, uint32_t src); static device_method_t tumbler_methods[] = { /* Device interface. */ @@ -250,7 +250,7 @@ const char tumbler_regsize[] = { }; /* dB = 20 * log (x) table. */ -static u_int tumbler_volume_table[100] = { +static unsigned int tumbler_volume_table[100] = { 0x00000148, 0x0000015C, 0x00000171, 0x00000186, // -46.0, -45.5, -45.0, -44.5, 0x0000019E, 0x000001B6, 0x000001D0, 0x000001EB, // -44.0, -43.5, -43.0, -42.5, 0x00000209, 0x00000227, 0x00000248, 0x0000026B, // -42.0, -41.5, -41.0, -40.5, @@ -281,7 +281,7 @@ static u_int tumbler_volume_table[100] = { static int tumbler_write(struct tumbler_softc *sc, uint8_t reg, const void *data) { - u_int size; + unsigned int size; uint8_t buf[16]; struct iic_msg msg[] = { @@ -336,7 +336,7 @@ static int tumbler_init(struct snd_mixer *m) { struct tumbler_softc *sc; - u_int x = 0; + unsigned int x = 0; sc = device_get_softc(mix_getdevinfo(m)); @@ -383,7 +383,7 @@ static int tumbler_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right) { struct tumbler_softc *sc; - u_int l, r; + unsigned int l, r; u_char reg[6]; sc = device_get_softc(mix_getdevinfo(m)); @@ -411,8 +411,8 @@ tumbler_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right) return (0); } -static u_int32_t -tumbler_setrecsrc(struct snd_mixer *m, u_int32_t src) +static uint32_t +tumbler_setrecsrc(struct snd_mixer *m, uint32_t src) { return (0); } diff --git a/sys/dev/sound/pci/als4000.c b/sys/dev/sound/pci/als4000.c index c6cbd61c927c..0613f3ec2b97 100644 --- a/sys/dev/sound/pci/als4000.c +++ b/sys/dev/sound/pci/als4000.c @@ -65,9 +65,9 @@ struct sc_chinfo { struct sc_info *parent; struct pcm_channel *channel; struct snd_dbuf *buffer; - u_int32_t format, speed, phys_buf, bps; - u_int32_t dma_active:1, dma_was_active:1; - u_int8_t gcr_fifo_status; + uint32_t format, speed, phys_buf, bps; + uint32_t dma_active:1, dma_was_active:1; + uint8_t gcr_fifo_status; int dir; }; @@ -87,7 +87,7 @@ struct sc_info { /* Channel caps */ -static u_int32_t als_format[] = { +static uint32_t als_format[] = { SND_FORMAT(AFMT_U8, 1, 0), SND_FORMAT(AFMT_U8, 2, 0), SND_FORMAT(AFMT_S16_LE, 1, 0), @@ -104,7 +104,7 @@ static struct pcmchan_caps als_caps = { 4000, 44100, als_format, 0 }; /* ------------------------------------------------------------------------- */ /* Register Utilities */ -static u_int32_t +static uint32_t als_gcr_rd(struct sc_info *sc, int index) { bus_space_write_1(sc->st, sc->sh, ALS_GCR_INDEX, index); @@ -118,36 +118,36 @@ als_gcr_wr(struct sc_info *sc, int index, int data) bus_space_write_4(sc->st, sc->sh, ALS_GCR_DATA, data); } -static u_int8_t +static uint8_t als_intr_rd(struct sc_info *sc) { return bus_space_read_1(sc->st, sc->sh, ALS_SB_MPU_IRQ); } static void -als_intr_wr(struct sc_info *sc, u_int8_t data) +als_intr_wr(struct sc_info *sc, uint8_t data) { bus_space_write_1(sc->st, sc->sh, ALS_SB_MPU_IRQ, data); } -static u_int8_t -als_mix_rd(struct sc_info *sc, u_int8_t index) +static uint8_t +als_mix_rd(struct sc_info *sc, uint8_t index) { bus_space_write_1(sc->st, sc->sh, ALS_MIXER_INDEX, index); return bus_space_read_1(sc->st, sc->sh, ALS_MIXER_DATA); } static void -als_mix_wr(struct sc_info *sc, u_int8_t index, u_int8_t data) +als_mix_wr(struct sc_info *sc, uint8_t index, uint8_t data) { bus_space_write_1(sc->st, sc->sh, ALS_MIXER_INDEX, index); bus_space_write_1(sc->st, sc->sh, ALS_MIXER_DATA, data); } static void -als_esp_wr(struct sc_info *sc, u_int8_t data) +als_esp_wr(struct sc_info *sc, uint8_t data) { - u_int32_t tries, v; + uint32_t tries, v; tries = 1000; do { @@ -166,7 +166,7 @@ als_esp_wr(struct sc_info *sc, u_int8_t data) static int als_esp_reset(struct sc_info *sc) { - u_int32_t tries, u, v; + uint32_t tries, u, v; bus_space_write_1(sc->st, sc->sh, ALS_ESP_RST, 1); DELAY(10); @@ -191,10 +191,10 @@ als_esp_reset(struct sc_info *sc) return 1; } -static u_int8_t -als_ack_read(struct sc_info *sc, u_int8_t addr) +static uint8_t +als_ack_read(struct sc_info *sc, uint8_t addr) { - u_int8_t r = bus_space_read_1(sc->st, sc->sh, addr); + uint8_t r = bus_space_read_1(sc->st, sc->sh, addr); return r; } @@ -232,7 +232,7 @@ alschan_init(kobj_t obj, void *devinfo, } static int -alschan_setformat(kobj_t obj, void *data, u_int32_t format) +alschan_setformat(kobj_t obj, void *data, uint32_t format) { struct sc_chinfo *ch = data; @@ -240,8 +240,8 @@ alschan_setformat(kobj_t obj, void *data, u_int32_t format) return 0; } -static u_int32_t -alschan_setspeed(kobj_t obj, void *data, u_int32_t speed) +static uint32_t +alschan_setspeed(kobj_t obj, void *data, uint32_t speed) { struct sc_chinfo *ch = data, *other; struct sc_info *sc = ch->parent; @@ -258,8 +258,8 @@ alschan_setspeed(kobj_t obj, void *data, u_int32_t speed) return speed; } -static u_int32_t -alschan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize) +static uint32_t +alschan_setblocksize(kobj_t obj, void *data, uint32_t blocksize) { struct sc_chinfo *ch = data; struct sc_info *sc = ch->parent; @@ -271,7 +271,7 @@ alschan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize) return blocksize; } -static u_int32_t +static uint32_t alschan_getptr(kobj_t obj, void *data) { struct sc_chinfo *ch = data; @@ -314,10 +314,10 @@ als_set_speed(struct sc_chinfo *ch) #define ALS_16BIT_CMD(x, y) { (x), (y), DSP_DMA16, DSP_CMD_DMAPAUSE_16 } struct playback_command { - u_int32_t pcm_format; /* newpcm format */ - u_int8_t format_val; /* sb16 format value */ - u_int8_t dma_prog; /* sb16 dma program */ - u_int8_t dma_stop; /* sb16 stop register */ + uint32_t pcm_format; /* newpcm format */ + uint8_t format_val; /* sb16 format value */ + uint8_t dma_prog; /* sb16 dma program */ + uint8_t dma_stop; /* sb16 stop register */ } static const playback_cmds[] = { ALS_8BIT_CMD(SND_FORMAT(AFMT_U8, 1, 0), DSP_MODE_U8MONO), ALS_8BIT_CMD(SND_FORMAT(AFMT_U8, 2, 0), DSP_MODE_U8STEREO), @@ -326,9 +326,9 @@ struct playback_command { }; static const struct playback_command* -als_get_playback_command(u_int32_t format) +als_get_playback_command(uint32_t format) { - u_int32_t i, n; + uint32_t i, n; n = sizeof(playback_cmds) / sizeof(playback_cmds[0]); for (i = 0; i < n; i++) { @@ -346,7 +346,7 @@ als_playback_start(struct sc_chinfo *ch) { const struct playback_command *p; struct sc_info *sc = ch->parent; - u_int32_t buf, bufsz, count, dma_prog; + uint32_t buf, bufsz, count, dma_prog; buf = ch->buffer->buf_addr; bufsz = ch->buffer->bufsize; @@ -377,7 +377,7 @@ als_playback_stop(struct sc_chinfo *ch) { const struct playback_command *p; struct sc_info *sc = ch->parent; - u_int32_t active; + uint32_t active; active = ch->dma_active; if (active) { @@ -428,8 +428,8 @@ CHANNEL_DECLARE(alspchan); /* ------------------------------------------------------------------------- */ /* Capture channel implementation */ -static u_int8_t -als_get_fifo_format(struct sc_info *sc, u_int32_t format) +static uint8_t +als_get_fifo_format(struct sc_info *sc, uint32_t format) { switch (format) { case SND_FORMAT(AFMT_U8, 1, 0): @@ -449,7 +449,7 @@ static void als_capture_start(struct sc_chinfo *ch) { struct sc_info *sc = ch->parent; - u_int32_t buf, bufsz, count, dma_prog; + uint32_t buf, bufsz, count, dma_prog; buf = ch->buffer->buf_addr; bufsz = ch->buffer->bufsize; @@ -477,7 +477,7 @@ static int als_capture_stop(struct sc_chinfo *ch) { struct sc_info *sc = ch->parent; - u_int32_t active; + uint32_t active; active = ch->dma_active; if (active) { @@ -528,11 +528,11 @@ CHANNEL_DECLARE(alsrchan); */ struct sb16props { - u_int8_t lreg; - u_int8_t rreg; - u_int8_t bits; - u_int8_t oselect; - u_int8_t iselect; /* left input mask */ + uint8_t lreg; + uint8_t rreg; + uint8_t bits; + uint8_t oselect; + uint8_t iselect; /* left input mask */ } static const amt[SOUND_MIXER_NRDEVICES] = { [SOUND_MIXER_VOLUME] = { 0x30, 0x31, 5, 0x00, 0x00 }, [SOUND_MIXER_PCM] = { 0x32, 0x33, 5, 0x00, 0x00 }, @@ -551,7 +551,7 @@ struct sb16props { static int alsmix_init(struct snd_mixer *m) { - u_int32_t i, v; + uint32_t i, v; for (i = v = 0; i < SOUND_MIXER_NRDEVICES; i++) { if (amt[i].bits) v |= 1 << i; @@ -569,7 +569,7 @@ static int alsmix_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right) { struct sc_info *sc = mix_getdevinfo(m); - u_int32_t r, l, v, mask; + uint32_t r, l, v, mask; /* Fill upper n bits in mask with 1's */ mask = ((1 << amt[dev].bits) - 1) << (8 - amt[dev].bits); @@ -597,11 +597,11 @@ alsmix_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right) return 0; } -static u_int32_t -alsmix_setrecsrc(struct snd_mixer *m, u_int32_t src) +static uint32_t +alsmix_setrecsrc(struct snd_mixer *m, uint32_t src) { struct sc_info *sc = mix_getdevinfo(m); - u_int32_t i, l, r; + uint32_t i, l, r; for (i = l = r = 0; i < SOUND_MIXER_NRDEVICES; i++) { if (src & (1 << i)) { @@ -635,7 +635,7 @@ static void als_intr(void *p) { struct sc_info *sc = (struct sc_info *)p; - u_int8_t intr, sb_status; + uint8_t intr, sb_status; mtx_lock(&sc->lock); intr = als_intr_rd(sc); @@ -677,7 +677,7 @@ als_intr(void *p) static int als_init(struct sc_info *sc) { - u_int32_t i, v; + uint32_t i, v; /* Reset Chip */ if (als_esp_reset(sc)) { diff --git a/sys/dev/sound/pci/cmi.c b/sys/dev/sound/pci/cmi.c index 4ff58cb04b8e..58ab961b74e1 100644 --- a/sys/dev/sound/pci/cmi.c +++ b/sys/dev/sound/pci/cmi.c @@ -102,8 +102,8 @@ struct sc_chinfo { struct sc_info *parent; struct pcm_channel *channel; struct snd_dbuf *buffer; - u_int32_t fmt, spd, phys_buf, bps; - u_int32_t dma_active:1, dma_was_active:1; + uint32_t fmt, spd, phys_buf, bps; + uint32_t dma_active:1, dma_was_active:1; int dir; }; @@ -132,7 +132,7 @@ struct sc_info { /* Channel caps */ -static u_int32_t cmi_fmt[] = { +static uint32_t cmi_fmt[] = { SND_FORMAT(AFMT_U8, 1, 0), SND_FORMAT(AFMT_U8, 2, 0), SND_FORMAT(AFMT_S16_LE, 1, 0), @@ -145,7 +145,7 @@ static struct pcmchan_caps cmi_caps = {5512, 48000, cmi_fmt, 0}; /* ------------------------------------------------------------------------- */ /* Register Utilities */ -static u_int32_t +static uint32_t cmi_rd(struct sc_info *sc, int regno, int size) { switch (size) { @@ -162,7 +162,7 @@ cmi_rd(struct sc_info *sc, int regno, int size) } static void -cmi_wr(struct sc_info *sc, int regno, u_int32_t data, int size) +cmi_wr(struct sc_info *sc, int regno, uint32_t data, int size) { switch (size) { case 1: @@ -179,9 +179,9 @@ cmi_wr(struct sc_info *sc, int regno, u_int32_t data, int size) static void cmi_partial_wr4(struct sc_info *sc, - int reg, int shift, u_int32_t mask, u_int32_t val) + int reg, int shift, uint32_t mask, uint32_t val) { - u_int32_t r; + uint32_t r; r = cmi_rd(sc, reg, 4); r &= ~(mask << shift); @@ -190,9 +190,9 @@ cmi_partial_wr4(struct sc_info *sc, } static void -cmi_clr4(struct sc_info *sc, int reg, u_int32_t mask) +cmi_clr4(struct sc_info *sc, int reg, uint32_t mask) { - u_int32_t r; + uint32_t r; r = cmi_rd(sc, reg, 4); r &= ~mask; @@ -200,9 +200,9 @@ cmi_clr4(struct sc_info *sc, int reg, u_int32_t mask) } static void -cmi_set4(struct sc_info *sc, int reg, u_int32_t mask) +cmi_set4(struct sc_info *sc, int reg, uint32_t mask) { - u_int32_t r; + uint32_t r; r = cmi_rd(sc, reg, 4); r |= mask; @@ -219,7 +219,7 @@ static int cmi_rates[] = {5512, 8000, 11025, 16000, /* cmpci_rate_to_regvalue returns sampling freq selector for FCR1 * register - reg order is 5k,11k,22k,44k,8k,16k,32k,48k */ -static u_int32_t +static uint32_t cmpci_rate_to_regvalue(int rate) { int i, r; @@ -237,7 +237,7 @@ cmpci_rate_to_regvalue(int rate) } static int -cmpci_regvalue_to_rate(u_int32_t r) +cmpci_regvalue_to_rate(uint32_t r) { int i; @@ -251,14 +251,14 @@ cmpci_regvalue_to_rate(u_int32_t r) * playback or capture. We use ch0 for playback and ch1 for capture. */ static void -cmi_dma_prog(struct sc_info *sc, struct sc_chinfo *ch, u_int32_t base) +cmi_dma_prog(struct sc_info *sc, struct sc_chinfo *ch, uint32_t base) { - u_int32_t s, i, sz; + uint32_t s, i, sz; ch->phys_buf = ch->buffer->buf_addr; cmi_wr(sc, base, ch->phys_buf, 4); - sz = (u_int32_t)ch->buffer->bufsize; + sz = (uint32_t)ch->buffer->bufsize; s = sz / ch->bps - 1; cmi_wr(sc, base + 4, s, 2); @@ -279,10 +279,10 @@ cmi_ch0_start(struct sc_info *sc, struct sc_chinfo *ch) ch->dma_active = 1; } -static u_int32_t +static uint32_t cmi_ch0_stop(struct sc_info *sc, struct sc_chinfo *ch) { - u_int32_t r = ch->dma_active; + uint32_t r = ch->dma_active; cmi_clr4(sc, CMPCI_REG_INTR_CTRL, CMPCI_REG_CH0_INTR_ENABLE); cmi_clr4(sc, CMPCI_REG_FUNC_0, CMPCI_REG_CH0_ENABLE); @@ -304,10 +304,10 @@ cmi_ch1_start(struct sc_info *sc, struct sc_chinfo *ch) ch->dma_active = 1; } -static u_int32_t +static uint32_t cmi_ch1_stop(struct sc_info *sc, struct sc_chinfo *ch) { - u_int32_t r = ch->dma_active; + uint32_t r = ch->dma_active; cmi_clr4(sc, CMPCI_REG_INTR_CTRL, CMPCI_REG_CH1_INTR_ENABLE); cmi_clr4(sc, CMPCI_REG_FUNC_0, CMPCI_REG_CH1_ENABLE); @@ -319,7 +319,7 @@ cmi_ch1_stop(struct sc_info *sc, struct sc_chinfo *ch) static void cmi_spdif_speed(struct sc_info *sc, int speed) { - u_int32_t fcr1, lcr, mcr; *** 5721 LINES SKIPPED ***