From nobody Wed Apr 29 11:40:15 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4g5FjK5YGnz6bT39 for ; Wed, 29 Apr 2026 11:40:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4g5FjK44qdz3sSs for ; Wed, 29 Apr 2026 11:40:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777462821; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=XIA2h3TSmlZxLNDHx4hsjGN2jbH4GZ66leE5bQi5BOs=; b=VWM8jVJG7Hf880Eya8AqgqLorIwDic4ym3Plj9fbNq6v0R667ABOGpIpXnCs1piRzIzNvn MM9uX94uVYFH/CoIaCXmB94TmO2JiuyjCGTledX+7nC89emHqU5JEyE/nFqXeKlXiybkls dGlS3fkr7OCaDxPMTIAJToT/5QNFrXpyqivt9f/qWqmNVtYwUK0SATgDslhaymgqcvfl4F vvell4SBL8ZkH6j/La2cLgOZQpBRCrsuKBN1vk6bKnDQd1NCfO69bLDbMb/hUX0g6UO818 2W7WNe8LlM9ElqhUIYlSkW8r/+SS3f1g5/3MN18eY9oOzhZ2we2f1+HtPJp3tg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1777462821; a=rsa-sha256; cv=none; b=P5SGkOYZdXQJmePmZt4F2hPLzP/O7sMMHFGOZPKDKRPDLoZmfMrat4g5bHFYPnFnkCAqKo lyDvuNQSF11XI7tryDV1KBeyhN15gvqNYFn7+lurEJDBr3Npn+nUUMrKlyqS2lw1EwLUPG RlSsxlpiMyDmbb9yPYnfYrY8y7rucsrkHsGybX72BYi3Mh2OmMjTB1TAsCTqeEYvB4rmDR +ftV0KR0APst6Qk3GQkxpT6dRbrF/MJpVXS+uE/q39cCPGoCEsvsnJE42PmFoornNGkmj7 6mgB5PQiNhzo9Yy/+BCZaJW+d55S1OeGUW1+JBm1vZak6s8GakkDhYnHBXB9zQ== 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=1777462821; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=XIA2h3TSmlZxLNDHx4hsjGN2jbH4GZ66leE5bQi5BOs=; b=A937SmVEtW86qVg6FxZn5cK7G7fbaiyGQM4U8qbhIaiVG7OaqfRPuAaEOWahMYiVLWkUwX 2uLAgmMr+BzKP/DuUqC1Pb/+f9KfCKmW7hfGEN/nuh8UCJjF3gBJCXGa4T6ZfnYfiFCVE3 lMfsIbom9gM3tKnkdM/3vjK53LikW/1ueRMs6W//KTLx6ZQkMk5n/xpfh6pXUouVfYrTcg i8UtpnO4xV+HerAHzxdBAn04QARN6M2uGGb3QslltlbyZisiixXGFk27p3u7DCysZjHjiD 3rux3hNgiq1Cf3s1bT9xnHAvwV+zAJUN5m2BjY2wp/UHYmv7PfsruoLhApEUtw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g5FjJ0S20zfct for ; Wed, 29 Apr 2026 11:40:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 213a0 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 29 Apr 2026 11:40:15 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: 01ff0fa77d33 - main - arm64: Support some per-thread sctlr_el1 fields List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 01ff0fa77d33dde6b6f6a0ff83b0028f76243796 Auto-Submitted: auto-generated Date: Wed, 29 Apr 2026 11:40:15 +0000 Message-Id: <69f1ee1f.213a0.60ed88d1@gitrepo.freebsd.org> The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=01ff0fa77d33dde6b6f6a0ff83b0028f76243796 commit 01ff0fa77d33dde6b6f6a0ff83b0028f76243796 Author: Andrew Turner AuthorDate: 2026-04-29 11:34:39 +0000 Commit: Andrew Turner CommitDate: 2026-04-29 11:34:39 +0000 arm64: Support some per-thread sctlr_el1 fields This will be used to enable MTE from userspace. Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D55950 --- sys/arm64/arm64/exec_machdep.c | 1 + sys/arm64/arm64/pmap.c | 11 +++++++++++ sys/arm64/arm64/vm_machdep.c | 4 ++++ sys/arm64/include/armreg.h | 1 + sys/arm64/include/proc.h | 3 ++- 5 files changed, 19 insertions(+), 1 deletion(-) diff --git a/sys/arm64/arm64/exec_machdep.c b/sys/arm64/arm64/exec_machdep.c index 9f9b74e6a0e5..a2e1e42249b4 100644 --- a/sys/arm64/arm64/exec_machdep.c +++ b/sys/arm64/arm64/exec_machdep.c @@ -445,6 +445,7 @@ exec_setregs(struct thread *td, struct image_params *imgp, uintptr_t stack) else new_tcr = 0; td->td_proc->p_md.md_tcr = new_tcr; + td->td_md.md_sctlr = 0; /* TODO: should create a pmap function for this... */ tcr = READ_SPECIALREG(tcr_el1); diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c index 4ba2fb6f6678..595fba2da411 100644 --- a/sys/arm64/arm64/pmap.c +++ b/sys/arm64/arm64/pmap.c @@ -9325,6 +9325,7 @@ pmap_switch(struct thread *new) { pcpu_bp_harden bp_harden; struct pcb *pcb; + uint64_t sctlr; /* Store the new curthread */ PCPU_SET(curthread, new); @@ -9333,6 +9334,16 @@ pmap_switch(struct thread *new) pcb = new->td_pcb; PCPU_SET(curpcb, pcb); + if ((new->td_proc->p_flag & P_KPROC) == 0) { + sctlr = READ_SPECIALREG(sctlr_el1); + if ((sctlr & SCTLR_USER_MASK) != new->td_md.md_sctlr) { + sctlr &= ~SCTLR_USER_MASK; + sctlr |= new->td_md.md_sctlr; + WRITE_SPECIALREG(sctlr_el1, sctlr); + isb(); + } + } + /* * TODO: We may need to flush the cache here if switching * to a user process. diff --git a/sys/arm64/arm64/vm_machdep.c b/sys/arm64/arm64/vm_machdep.c index b46cb8793409..4cb87ca9856e 100644 --- a/sys/arm64/arm64/vm_machdep.c +++ b/sys/arm64/arm64/vm_machdep.c @@ -123,6 +123,8 @@ cpu_fork(struct thread *td1, struct proc *p2, struct thread *td2, int flags) /* Copy the TCR_EL1 value */ td2->td_proc->p_md.md_tcr = td1->td_proc->p_md.md_tcr; + td2->td_md.md_sctlr = td1->td_md.md_sctlr; + #if defined(PERTHREAD_SSP) /* Set the new canary */ arc4random_buf(&td2->td_md.md_canary, sizeof(td2->td_md.md_canary)); @@ -192,6 +194,8 @@ cpu_copy_thread(struct thread *td, struct thread *td0) td->td_md.md_spinlock_count = 1; td->td_md.md_saved_daif = PSR_DAIF_DEFAULT; + td->td_md.md_sctlr = td0->td_md.md_sctlr; + #if defined(PERTHREAD_SSP) /* Set the new canary */ arc4random_buf(&td->td_md.md_canary, sizeof(td->td_md.md_canary)); diff --git a/sys/arm64/include/armreg.h b/sys/arm64/include/armreg.h index 6447f0064d33..4233a01d143c 100644 --- a/sys/arm64/include/armreg.h +++ b/sys/arm64/include/armreg.h @@ -2803,6 +2803,7 @@ SCTLR_SA | \ SCTLR_C | \ SCTLR_M) +#define SCTLR_USER_MASK (SCTLR_ATA0 | SCTLR_TCF0_MASK) /* SCTLR_EL12 */ #define SCTLR_EL12_REG MRS_REG_ALT_NAME(SCTLR_EL12) diff --git a/sys/arm64/include/proc.h b/sys/arm64/include/proc.h index b40990e89385..d5879a794269 100644 --- a/sys/arm64/include/proc.h +++ b/sys/arm64/include/proc.h @@ -70,7 +70,8 @@ struct mdthread { int md_efirt_dis_pf; int md_reserved0; - uint64_t md_reserved[2]; + uint64_t md_sctlr; + uint64_t md_reserved1; }; struct mdproc {