From nobody Tue Sep 29 00:31:55 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 4htzdS4drWz6t4NN for ; Tue, 29 Sep 2026 00:31: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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4htzdS0KPFz4VmJ for ; Tue, 29 Sep 2026 00:31:56 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790641916; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=J3V8p9Ks1c6h3rB3Eh3bUsU6YdfrCyzzRxA0O8FwGXo=; b=ay0M0yltLd9uYyArx7hIfmaelKeXc/nc5XfSlwrg5Dhhi+08arbhPJzaAiP5Nqp37sLj5+ soRaD5yMYmU+m9k7H7z6JNKf+YeC9PzprxDRndzWhw/WN/TMLs16454nOOKT68D80W7ShV 5rP4McecMYwdoBzHm66ELjjsUtd5FgrBsCVzfFLOsEuHMcq3UGJtQravrDfcB40ZCPtas4 fiXD/nMy5jQtGeLdC6Iw8RZs+rNrOpP8K7mHVGoTvSjnztZ6Yom/9YPGdOYNh0rww8raGr qcU3cV92p5Mk8UIUnJ+KnRm4Xwfd2idb+MF2JUlNolsW8dgZuUd7ToremZgjkQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1790641916; b=x1Gw0hQDY4w8tUdRcxYpQhY4EKmIuMd4l3ohU16DHrc4FLLAdsK0BpzS5H4IgNZ7dD//9o YY1zxuDKeOIvuuF5DDxEvvMFN83+evMy0r0lPhULSrRKpG/OmEsj/x3eV9z/kpOjAwMxw3 4rvVJfgMzMK2ksU3BwsE9IMBOh8iKxxNi0XK0JEc3dU9PSU1OyCLt9kRC4MRBaSG7KN17M KqbPupuHN9BdEFP+KqbE3mitFp/nGw4p2szcyC8vMP0bloLp1dVp2fpfe89WsWTmRwK6pT xaS1H0cU4GY8wuTx4/sa+CqElSxfzhNtqKTLmouAtomKPV6/naSYrQcJFWSVfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790641916; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=J3V8p9Ks1c6h3rB3Eh3bUsU6YdfrCyzzRxA0O8FwGXo=; b=pz7SWuDXJjBhLhTd8rKbKfwOZbVJ39r30aTe5TlFdAS2+a9H6oAt12u6jpyS94s7EWjsXo 4NY6L6X58sB638Y0CkYJ3FW3VMtwBqJPymTSlpbnvZD8Kf/OR9+rV0AFZ83Y+meh1/UE9l Smu3vvP6xz1UtfCvcVYGDrDmoL0wDDk3zrUreeMGl6xEvz5f8HKwndoctqkvBrHQTx5JtD OSxIPgRjcNMZr5sEh7TMhUOK3aLuJDxB15PGeeVi7XoxpDcy6H07jPh9PFSzln8txFfHZG vFaTpY/3aN/xNZ33/Q+NMp/47wZfL/JInMuGeQTxophn3uZAqbFo1URyPATZ7Q== 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 4htzdR6WlWzrRJ for ; Tue, 29 Sep 2026 00:31:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3c6c7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 29 Sep 2026 00:31:55 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: b4a9afdf70e3 - stable/15 - amd64: calculate if hardware supports disabling splitlocks 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 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/stable/15 X-Git-Reftype: branch X-Git-Commit: b4a9afdf70e3bb688db207462e2416758fbf6d19 Auto-Submitted: auto-generated Date: Tue, 29 Sep 2026 00:31:55 +0000 Message-Id: <6abb06fb.3c6c7.7ec74df0@gitrepo.freebsd.org> The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=b4a9afdf70e3bb688db207462e2416758fbf6d19 commit b4a9afdf70e3bb688db207462e2416758fbf6d19 Author: Konstantin Belousov AuthorDate: 2026-09-18 14:33:54 +0000 Commit: Konstantin Belousov CommitDate: 2026-09-29 00:27:14 +0000 amd64: calculate if hardware supports disabling splitlocks (cherry picked from commit d8c1abb0e3409314fb89400bc85b5051649e91ab) --- sys/amd64/amd64/initcpu.c | 18 ++++++++++++++++++ sys/amd64/amd64/machdep.c | 11 +++++++++++ sys/amd64/include/md_var.h | 3 +++ 3 files changed, 32 insertions(+) diff --git a/sys/amd64/amd64/initcpu.c b/sys/amd64/amd64/initcpu.c index 5b615be4b8dc..4ae79693addf 100644 --- a/sys/amd64/amd64/initcpu.c +++ b/sys/amd64/amd64/initcpu.c @@ -440,3 +440,21 @@ amd64_cpu_init_fred(void) printf("FRED enabled\n"); } + +void +amd64_init_splitlock(void) +{ + uint64_t msr; + + if ((cpu_stdext_feature3 & CPUID_STDEXT3_CORE_CAP) != 0) { + if (rdmsr_safe(MSR_IA32_CORE_CAP, &msr) == 0) + ia32_splitlock = (msr & IA32_CORE_CAP_SPLITLOCK) != 0; + } + if (ia32_splitlock) { + TUNABLE_INT_FETCH("hw.splitlock_force", &ia32_splitlock_force); + if (ia32_splitlock_force != 0) + ia32_splitlock_force = 1; + } else { + ia32_splitlock_force = 0; + } +} diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index 266ca0a6b7a3..1d823650a737 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -207,6 +207,15 @@ long realmem = 0; int late_console = 1; int lass_enabled = 0; +int ia32_splitlock = 0; +SYSCTL_INT(_hw, OID_AUTO, splitlock, CTLFLAG_RD, + &ia32_splitlock, 0, + "splitlock prevention supported"); +int ia32_splitlock_force = 1; +SYSCTL_INT(_hw, OID_AUTO, splitlock_force, CTLFLAG_RDTUN | CTLFLAG_NOFETCH, + &ia32_splitlock_force, 0, + "splitlock prevention enabled by default"); + int __read_frequently fred = 0; SYSCTL_INT(_hw, OID_AUTO, fred, CTLFLAG_RDTUN | CTLFLAG_NOFETCH, &fred, 0, @@ -1649,6 +1658,8 @@ hammer_time(u_int64_t modulep, u_int64_t physfree) /* setup proc 0's pcb */ thread0.td_pcb->pcb_flags = 0; + amd64_init_splitlock(); + env = kern_getenv("kernelname"); if (env != NULL) strlcpy(kernelname, env, sizeof(kernelname)); diff --git a/sys/amd64/include/md_var.h b/sys/amd64/include/md_var.h index feaaccad296d..ae5f0b3a5850 100644 --- a/sys/amd64/include/md_var.h +++ b/sys/amd64/include/md_var.h @@ -46,6 +46,8 @@ extern int hw_ssb_disable; extern int nmi_flush_l1d_sw; extern int syscall_ret_l1d_flush_mode; extern int lass_enabled; +extern int ia32_splitlock; +extern int ia32_splitlock_force; extern vm_paddr_t intel_graphics_stolen_base; extern vm_paddr_t intel_graphics_stolen_size; @@ -67,6 +69,7 @@ struct trapframe; void amd64_conf_fast_syscall(void); void amd64_cpu_init_fred(void); void amd64_db_resume_dbreg(void); +void amd64_init_splitlock(void); vm_paddr_t amd64_loadaddr(void); void amd64_lower_shared_page(struct sysentvec *); void amd64_bsp_pcpu_init1(struct pcpu *pc);