git: 20c09e6fece2 - main - amd64: use WRMSRNS immediate form to update splitlock control, when available
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 22 Sep 2026 15:41:53 UTC
The branch main has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=20c09e6fece29dbcf4835b4dd90e969f1b9b3e59
commit 20c09e6fece29dbcf4835b4dd90e969f1b9b3e59
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-09-19 07:54:00 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-09-22 15:40:41 +0000
amd64: use WRMSRNS immediate form to update splitlock control, when available
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D59815
---
sys/amd64/amd64/machdep.c | 38 ++++++++++++++++++++++++++++++++++----
1 file changed, 34 insertions(+), 4 deletions(-)
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c
index a1b2d116295f..099bc7163bde 100644
--- a/sys/amd64/amd64/machdep.c
+++ b/sys/amd64/amd64/machdep.c
@@ -1929,13 +1929,28 @@ safe_read(vm_offset_t addr, char *valp)
return (uiomove_mem(UIO_MEM_KMEM, &uio));
}
-void
-enable_splitlock_ac(void)
+static void
+enable_splitlock_ac_wrmsr(void)
{
MPASS(ia32_splitlock);
wrmsr(MSR_MEMORY_CTL, PCPU_GET(msr_memctl) | MSR_MEMORY_CTL_SPLITLOCK);
}
+static void
+enable_splitlock_ac_wrmsrimm(void)
+{
+ MPASS(ia32_splitlock);
+ wrmsr_imm(MSR_MEMORY_CTL, PCPU_GET(msr_memctl) |
+ MSR_MEMORY_CTL_SPLITLOCK);
+}
+
+DEFINE_IFUNC(, void, enable_splitlock_ac, (void))
+{
+ if ((cpu_stdext_feature5 & CPUID_STDEXT5_MSR_IMM) != 0)
+ return (enable_splitlock_ac_wrmsrimm);
+ return (enable_splitlock_ac_wrmsr);
+}
+
void
enable_splitlock(struct thread *td)
{
@@ -1946,13 +1961,28 @@ enable_splitlock(struct thread *td)
critical_exit();
}
-void
-disable_splitlock_ac(void)
+static void
+disable_splitlock_ac_wrmsr(void)
{
MPASS(ia32_splitlock);
wrmsr(MSR_MEMORY_CTL, PCPU_GET(msr_memctl) & ~MSR_MEMORY_CTL_SPLITLOCK);
}
+static void
+disable_splitlock_ac_wrmsrimm(void)
+{
+ MPASS(ia32_splitlock);
+ wrmsr_imm(MSR_MEMORY_CTL, PCPU_GET(msr_memctl) &
+ ~MSR_MEMORY_CTL_SPLITLOCK);
+}
+
+DEFINE_IFUNC(, void, disable_splitlock_ac, (void))
+{
+ if ((cpu_stdext_feature5 & CPUID_STDEXT5_MSR_IMM) != 0)
+ return (disable_splitlock_ac_wrmsrimm);
+ return (disable_splitlock_ac_wrmsr);
+}
+
void
disable_splitlock(struct thread *td)
{