From nobody Tue Oct 27 18:31:11 2026 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4jDfFq4fS7z6x6NT for ; Tue, 27 Oct 2026 18:31: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) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4jDfFq47zDz3Cp4 for ; Tue, 27 Oct 2026 18:31:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793125871; 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=CtTVV8VM7hMi1s1cVTgwyLuty/FyjAvRu8jTKjuLFvo=; b=OUdWKaSkI2ycMjW1sNN7N+JNYdVdSdg4sgKi8ECHBuYc2sPgH5uNealhbvXXx/F2Tf7iob pVgmZni3IeXVPA6dmdTjm64Akp57ZJ7nfWH/dLpgYMcuX6sRJ1q59YrD4J27Km8hZSpCS+ yGc3E9+Sxk0BV+7c2e8e3osHBGB3aPOk2Kl2rsljRdydBgdcSV4dpk56oPrITr702Q8u9c gBByjKmpDIOgQQtGtkUfiAwLgWzVgX5vjHLhknazjrO61ZlamlxLq7masap1K1NXaiiZO4 oxKSWbXjNiMb3BwvJi4oE9SrG+mMn/Z3vcEGGyjKtmmmMMonmi6MIBPwQ4IK4Q== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1793125871; b=riSDhH+nw7m0h0i7qltQBtWmpDcEmXGXfr7tikXncr6OXp+hryl377g9S2gGZy765Y4pjz y3DK49cGGkgLjrzG7dLahNDQYR+uHhjFGNoFJV4Nl6YmIDPf4cNJZIrSrsJUQE18gtumpx 7+BgajgpcvoqFNNl+fh3EHYMfPfjSmKp/K547TXvD8/1rJIgl8j3UO7pm50E5l+Z7GaQpE LyOPa9o+n8w3AoPTmGImsI1mZGYXBM60uKA8NJLkgNIZZdU37Cl/lGiY4J+pYcUln1qcMU Vu+NmwIaxLVezVMhE1afHehp3wVTgyFt5H59RGaUzYA+BlFTVZ9yl6eE1xZ1iw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793125871; 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=CtTVV8VM7hMi1s1cVTgwyLuty/FyjAvRu8jTKjuLFvo=; b=lJgIyMtlyaviqj7abmShu8BW0pwct3yiSwgLq1SGGiQBaXt0VuHzRhTM4ZoJUdGHnrbIFs S3CBNfjl4dd1PhVr/8tS0YAqJDoQltIe16hlW57FKBkIw46VOhCx6pWqQgfrjI8Tasj3Om NfLBZL+gzhRWJtOX6YoHesPBwUvANGbxhS0hj4Nnf4L8GxIDhPYpf21CLkQMWg5cSKE1MV UF6vm4xmqDNChgYxMnTJM4Zp+ZbBejhK6hJWOhmAPQm+mai9fBixFxs6D4ysoMtl05XtMr 6ucK/uIkl8W1xE60ca79fJLesc2dH52vTtLh0bxmPD8QSJBQaUpjZNH9sa4Yxg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4jDfFq3p4szYrb for ; Tue, 27 Oct 2026 18:31:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 34095 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 27 Oct 2026 18:31:11 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Alan Cox Subject: git: acab75276db8 - stable/15 - arm64: a local TLB invalidation suffices when enabling write access List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org List-Id: Commits to the stable branches of the FreeBSD src repository 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: alc X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: acab75276db8925883a2e71208a9e2d4f8392170 Auto-Submitted: auto-generated Date: Tue, 27 Oct 2026 18:31:11 +0000 Message-Id: <6ae0edef.34095.e3525c9@gitrepo.freebsd.org> The branch stable/15 has been updated by alc: URL: https://cgit.FreeBSD.org/src/commit/?id=acab75276db8925883a2e71208a9e2d4f8392170 commit acab75276db8925883a2e71208a9e2d4f8392170 Author: Alan Cox AuthorDate: 2026-10-06 04:53:00 +0000 Commit: Alan Cox CommitDate: 2026-10-27 18:29:45 +0000 arm64: a local TLB invalidation suffices when enabling write access When a PTE logically supports write access, as indicated by its DBM field, but write access is nonetheless blocked by the PTE's protection field, pmap_fault() can enable write access with only a local TLB invalidation. (cherry picked from commit 7dd9a8125f70f1fc40fd9907bdaae0d23c8586c9) --- sys/arm64/arm64/pmap.c | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c index 52afe723c354..60915c4afc71 100644 --- a/sys/arm64/arm64/pmap.c +++ b/sys/arm64/arm64/pmap.c @@ -1992,6 +1992,31 @@ pmap_s1_invalidate_page(pmap_t pmap, vm_offset_t va, bool final_only) isb(); } +/* + * Invalidates any cached final-level TLB entry for the specified virtual + * address in the given virtual address space, but only on the current + * processor. + * + * The pmap_multiple_tlbi errata only affect broadcast invalidations. + */ +static __inline void +pmap_s1_invalidate_page_local(pmap_t pmap, vm_offset_t va) +{ + uint64_t r; + + PMAP_ASSERT_STAGE1(pmap); + dsb(nshst); + r = TLBI_VA(va); + if (pmap == kernel_pmap) { + __asm __volatile("tlbi vaale1, %0" : : "r" (r)); + } else { + r |= ASID_TO_OPERAND(COOKIE_TO_ASID(pmap->pm_cookie)); + __asm __volatile("tlbi vale1, %0" : : "r" (r)); + } + dsb(nsh); + isb(); +} + static __inline void pmap_s2_invalidate_page(pmap_t pmap, vm_offset_t va, bool final_only) { @@ -9496,11 +9521,16 @@ pmap_fault(pmap_t pmap, uint64_t esr, uint64_t far) ptep = pmap_pte(pmap, far, &lvl); if (ptep != NULL && ((pte = pmap_load(ptep)) & ATTR_SW_DBM) != 0) { + /* + * A local invalidation suffices when enabling write + * access. At worst, a write using a stale read-only + * TLB entry on another processor triggers a fault, + * requiring its own local invalidation below. + */ if ((pte & ATTR_S1_AP_RW_BIT) == - ATTR_S1_AP(ATTR_S1_AP_RO)) { + ATTR_S1_AP(ATTR_S1_AP_RO)) pmap_clear_bits(ptep, ATTR_S1_AP_RW_BIT); - pmap_s1_invalidate_page(pmap, far, true); - } + pmap_s1_invalidate_page_local(pmap, far); rv = KERN_SUCCESS; } PMAP_UNLOCK(pmap);