From nobody Wed Feb 18 08:04:33 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 4fG8Dd6xxBz6QTqJ for ; Wed, 18 Feb 2026 08:04: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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fG8Dd49pzz45M5 for ; Wed, 18 Feb 2026 08:04:33 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1771401873; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4ONlSF8WffXAf21qme+p3Jn/gD17nw6bLJR+NV7pPuE=; b=PfhPArOOCFFhj8xMjYm8raD1nhSsdFYb+EfyE91wL5lkD7JO4fng4MrO1t5vM447bc2uSS Wo0Y5gwC4zlBE8BqYHA92GuiaMWOsoYYRKuZxhKAIAkW1OOyJs9193cggOCJ/ULaDXgkwE whu2vggW4EyGbaHvT6EcPHXW6RiDeIIleolyFh43iwYoc5xHsrmXmB1wsl2dALQM3B2rJF eQDreYtWcV02dw3Ntp9Mz2upOtOZl/ykghQ1E002eEZCPiU2KFLb+cTIpuSEJ7PpkWhWkM D0TlmOG4zik/J3SDIa3KOBQSuqNGJTFBqVrayDoZ27aqg0/IkefuYJcr/yTYbg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1771401873; a=rsa-sha256; cv=none; b=mMQYWj8PgSrE74AOBznxYRlooFONsEzeSLVNtFnPsdq4bslRrk+ZrVjdrWKFEb8lrwCtwH +Cb97MDyuY563Zyzssac2vlGSDkv6w37DzYlv6e7Tt+9RUHMs3FLACYFXbSED4WbIGYFIj HKVQ5O6fekBzpPp0NLcFYIzRdWmV/XqK999jb0ckn1vsqflSneRUUvrcrqT4h4ubKmC5yZ dtSK+FsD6Dckqv0sBpUmgdcIzDobRfBwebLutqE/nm8urncJBf6xLVNzIzl6+DL3U+2Bi9 ubaWLQWqchTqssPGoEFXR4h66Jk9VO8BIeOd55OZuYMw0oUcKRRlyUHCtCrNEw== 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=1771401873; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4ONlSF8WffXAf21qme+p3Jn/gD17nw6bLJR+NV7pPuE=; b=Y9R/uvRYP8ZXReM6iN2LiGTucgDVIKRihLV/Zq0P6LgfbJpw7PUBYkCiPA+5nvK3ReHxg3 BN9J3Jflh2aEnV10/lQoCxTwPHsrxv7ek09Rryp/Maa07liM+9Eo3XPPWF3qW5r1M/vh3Y QJSUY185gMWNbMvFkYMSkM/WO+gmt+eB/U9Lmp5QuhfQuvfOEELbPDOnZY5loreBnoeDD8 Y1xMAj4Er4rFa4uhV4uXwPNDRbe4qRxfoTqo4kw4heHlLO3J3OLPNiLsXzMgVZqE9stS/C eP+Gvj1kyWOw8QAUsJcY4wzxXcTCwjxW4/yiBIfQa4C82ABi52yMP/ZhCXOqfg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fG8Dd2rd2znr4 for ; Wed, 18 Feb 2026 08:04:33 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 44d50 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 18 Feb 2026 08:04:33 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 532c8d3f90b9 - stable/15 - amd64: add LASS support 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: kib X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 532c8d3f90b95fb13b320cdfdc89e3d7d08875db Auto-Submitted: auto-generated Date: Wed, 18 Feb 2026 08:04:33 +0000 Message-Id: <69957291.44d50.7ebebeca@gitrepo.freebsd.org> The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=532c8d3f90b95fb13b320cdfdc89e3d7d08875db commit 532c8d3f90b95fb13b320cdfdc89e3d7d08875db Author: Konstantin Belousov AuthorDate: 2024-10-24 02:12:25 +0000 Commit: Konstantin Belousov CommitDate: 2026-02-18 08:00:04 +0000 amd64: add LASS support (cherry picked from commit 89589b6d3fbac43eb7c6b3cdbdd6f077888b2142) --- sys/amd64/amd64/efirt_machdep.c | 4 ++++ sys/amd64/amd64/initcpu.c | 13 +++++++++++++ sys/amd64/amd64/machdep.c | 1 + sys/amd64/amd64/pmap.c | 9 +++++++++ sys/amd64/include/md_var.h | 1 + 5 files changed, 28 insertions(+) diff --git a/sys/amd64/amd64/efirt_machdep.c b/sys/amd64/amd64/efirt_machdep.c index fe5d60c978dd..203b2b264587 100644 --- a/sys/amd64/amd64/efirt_machdep.c +++ b/sys/amd64/amd64/efirt_machdep.c @@ -348,6 +348,8 @@ efi_arch_enter(void) */ if (!pmap_pcid_enabled) invltlb(); + if (lass_enabled) + load_cr4(rcr4() & ~CR4_LASS); return (0); } @@ -357,6 +359,8 @@ efi_arch_leave(void) pmap_t curpmap; uint64_t cr3; + if (lass_enabled) + load_cr4(rcr4() | CR4_LASS); curpmap = &curproc->p_vmspace->vm_pmap; cr3 = curpmap->pm_cr3; if (pmap_pcid_enabled) { diff --git a/sys/amd64/amd64/initcpu.c b/sys/amd64/amd64/initcpu.c index 7f317674907e..4c57c27596ad 100644 --- a/sys/amd64/amd64/initcpu.c +++ b/sys/amd64/amd64/initcpu.c @@ -290,6 +290,19 @@ initializecpu(void) if (cpu_stdext_feature2 & CPUID_STDEXT2_PKU) cr4 |= CR4_PKE; + /* + * Any CPU having Linear Address Space Separation (LASS) + * should have SMAP, but check it to be sure. Otherwise + * userspace accesses from kernel cannot work. + */ + if (IS_BSP() && (cpu_stdext_feature4 & CPUID_STDEXT4_LASS) != 0 && + (cpu_stdext_feature & CPUID_STDEXT_SMAP) != 0) { + lass_enabled = 1; + TUNABLE_INT_FETCH("hw.lass", &lass_enabled); + } + if (lass_enabled) + cr4 |= CR4_LASS; + /* * If SMEP is present, we only need to flush RSB (by default) * on context switches, to prevent cross-process ret2spec diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index e56de986ccba..20d221279bd3 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -204,6 +204,7 @@ int cold = 1; long Maxmem = 0; long realmem = 0; int late_console = 1; +int lass_enabled = 0; struct kva_md_info kmi; diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 243a6625bece..8695dd61316e 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -1737,6 +1737,7 @@ pmap_bootstrap_la57(vm_paddr_t *firstaddr) { void (*la57_tramp)(uint64_t pml5); pml5_entry_t *pt; + uint64_t cr4; if ((cpu_stdext_feature2 & CPUID_STDEXT2_LA57) == 0) return; @@ -1757,8 +1758,16 @@ pmap_bootstrap_la57(vm_paddr_t *firstaddr) KERNSTART + amd64_loadaddr()); printf("Calling la57 trampoline at %p, KPML5phys %#lx ...", la57_tramp, KPML5phys); + if (lass_enabled) { + cr4 = rcr4(); + load_cr4(cr4 & ~CR4_LASS); + } la57_tramp(KPML5phys); printf(" alive in la57 mode\n"); + if (lass_enabled) { + cr4 = rcr4(); + load_cr4(cr4 | CR4_LASS); + } } static void diff --git a/sys/amd64/include/md_var.h b/sys/amd64/include/md_var.h index 19eab48168f7..7bb8ace27061 100644 --- a/sys/amd64/include/md_var.h +++ b/sys/amd64/include/md_var.h @@ -45,6 +45,7 @@ extern int hw_ibrs_disable; extern int hw_ssb_disable; extern int nmi_flush_l1d_sw; extern int syscall_ret_l1d_flush_mode; +extern int lass_enabled; extern vm_paddr_t intel_graphics_stolen_base; extern vm_paddr_t intel_graphics_stolen_size;