git: c52f99acee2a - stable/15 - amd64: use WRMSRNS immediate form to update splitlock control, when available
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 29 Sep 2026 00:32:00 UTC
The branch stable/15 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=c52f99acee2a65b8e58b9cc50a00130eb238f909
commit c52f99acee2a65b8e58b9cc50a00130eb238f909
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-09-19 07:54:00 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-09-29 00:27:15 +0000
amd64: use WRMSRNS immediate form to update splitlock control, when available
(cherry picked from commit 20c09e6fece29dbcf4835b4dd90e969f1b9b3e59)
---
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 c871838c9c7b..038abe929753 100644
--- a/sys/amd64/amd64/machdep.c
+++ b/sys/amd64/amd64/machdep.c
@@ -1930,13 +1930,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)
{
@@ -1947,13 +1962,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)
{