From nobody Tue Sep 22 15:41:52 2026 X-Original-To: dev-commits-src-main@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 4hq48d2hGdz6sNpF for ; Tue, 22 Sep 2026 15:41:53 +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 4hq48c6LnNz4vCR for ; Tue, 22 Sep 2026 15:41:52 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790091713; 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=oEV8hdwaCgfdAxoN1KrkCLr/OKdNLemOLKsw4JsXJXM=; b=LAqdFltPBkQpYApWqBPCsBSdhEHl6yBuGsS+GkrI7UiuxtwQfe1vCmFuyv0rKqX/ZQ7R+l UvyREOTrj2e2PEx4ckRafuZg/db1ZR9KdL3IzIm5BGtgJCL/KyS8M8TAdSzkIMEZvczSvN 3EMnbYxDc5+6bQmOTAud+nHUmF1WUTyxtYx7jbK7Ft5m5d6r3o11yckHMN5BCA8QtnJJ3v hcytZxdZ11jvS9vtopzAvfsmC3Y8FrUF/yZMUHrwBjuTbgwSos3rPy44lIfxitaW3MNdIN dxtD+LbtSxzinmSOOPeb8s5OPapqggOsuvEby3kA/fsNH9CsTjf43SRRy1Lgcg== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1790091712; b=LATz/gM+jlxN9tK/dAnyZu82Gzlf1reNNaiGRFN4WwKzlUarOplwuVfocTR/cjIXEQlwjq yjn0akYA/9DOdcTdNSUjjXBgXoOxZiX+X6QsRkKqnj8GDP1NUQwQ4S5mx6LbyQ7PoraBbS Db/DF3KnxgNwF30x9dhGJ0ouf1IQ5xVzQz4EZtyRvSHCOouv9tDCMOa7+EHcXS0UX/X3mu NBupoIjhR4cf7yEavJI8t4iztiDoV6+vFj/akZcdE0DVh1nzKgBkPRdsKPDK286Izmgv08 XwuD9/IFtOZ5F5JOA5SNFqW2xL6G7jUqa0MWP7w3t7hU/DaK9PqsiSVAq2GIKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790091712; 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=oEV8hdwaCgfdAxoN1KrkCLr/OKdNLemOLKsw4JsXJXM=; b=CL3cKvcejzPZ6KbN7x+8f4wbGJ9LXyQayTQKmQ06iscSPntx2H0K00Kxtclo9yBiCrIna4 czOumADcZ3wiRkBt/XycJhwmVkI2jXeJAc1+kOzTnqOECeho33i+RbU9sLZb+g7coVJ2Rw YD38gCjDYQ2rB9L8ym0y7SpxnEcUdIRW35qx4q9ZWkHPIekTaQPMEEe+F/n3HWjsiS4jMt CzDBWePLp+UuaGc87v9XQ8oQQGRcwxn43vKZgRJE12RLkfsEj+xkOajeIbExb3N8Auvo5T Maltym9j/DRl38doz67517jcntz5tH0rilUnIo9s/k8zSJOOpM85hk8IM+L5YQ== 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 4hq48c5QnTz1CXP for ; Tue, 22 Sep 2026 15:41:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 333e7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 22 Sep 2026 15:41:52 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 74d325fee2db - main - amd64: cache MSR_MEMORY_CTL in pcpu List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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/main X-Git-Reftype: branch X-Git-Commit: 74d325fee2dbcb5f8541819481ce76f87c151a21 Auto-Submitted: auto-generated Date: Tue, 22 Sep 2026 15:41:52 +0000 Message-Id: <6ab2a1c0.333e7.2a7ddb45@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=74d325fee2dbcb5f8541819481ce76f87c151a21 commit 74d325fee2dbcb5f8541819481ce76f87c151a21 Author: Konstantin Belousov AuthorDate: 2026-09-19 07:43:34 +0000 Commit: Konstantin Belousov CommitDate: 2026-09-22 15:40:41 +0000 amd64: cache MSR_MEMORY_CTL in pcpu Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D59815 --- sys/amd64/amd64/initcpu.c | 11 +++++++++++ sys/amd64/amd64/machdep.c | 7 +++---- sys/amd64/amd64/mp_machdep.c | 2 ++ sys/amd64/include/md_var.h | 1 + sys/amd64/include/pcpu.h | 3 ++- 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/sys/amd64/amd64/initcpu.c b/sys/amd64/amd64/initcpu.c index 4ae79693addf..2d2f5835e3b3 100644 --- a/sys/amd64/amd64/initcpu.c +++ b/sys/amd64/amd64/initcpu.c @@ -458,3 +458,14 @@ amd64_init_splitlock(void) ia32_splitlock_force = 0; } } + +void +amd64_cpu_init_msr_memctl(void) +{ + uint64_t msr; + + if ((cpu_stdext_feature3 & CPUID_STDEXT3_CORE_CAP) != 0 && + rdmsr_safe(MSR_IA32_CORE_CAP, &msr) == 0 && + (msr & IA32_CORE_CAP_SPLITLOCK) != 0) + PCPU_SET(msr_memctl, rdmsr(MSR_MEMORY_CTL)); +} diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index b10c58955ce0..a1b2d116295f 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -1658,6 +1658,7 @@ hammer_time(u_int64_t modulep, u_int64_t physfree) thread0.td_pcb->pcb_flags = 0; amd64_init_splitlock(); + amd64_cpu_init_msr_memctl(); env = kern_getenv("kernelname"); if (env != NULL) @@ -1932,8 +1933,7 @@ void enable_splitlock_ac(void) { MPASS(ia32_splitlock); - wrmsr(MSR_MEMORY_CTL, rdmsr(MSR_MEMORY_CTL) | - MSR_MEMORY_CTL_SPLITLOCK); + wrmsr(MSR_MEMORY_CTL, PCPU_GET(msr_memctl) | MSR_MEMORY_CTL_SPLITLOCK); } void @@ -1950,8 +1950,7 @@ void disable_splitlock_ac(void) { MPASS(ia32_splitlock); - wrmsr(MSR_MEMORY_CTL, rdmsr(MSR_MEMORY_CTL) & - ~MSR_MEMORY_CTL_SPLITLOCK); + wrmsr(MSR_MEMORY_CTL, PCPU_GET(msr_memctl) & ~MSR_MEMORY_CTL_SPLITLOCK); } void diff --git a/sys/amd64/amd64/mp_machdep.c b/sys/amd64/amd64/mp_machdep.c index 63e0180baeee..1b211026e386 100644 --- a/sys/amd64/amd64/mp_machdep.c +++ b/sys/amd64/amd64/mp_machdep.c @@ -309,6 +309,8 @@ init_secondary(void) else lidt(&r_idt); + amd64_cpu_init_msr_memctl(); + gsel_tss = GSEL(GPROC0_SEL, SEL_KPL); ltr(gsel_tss); diff --git a/sys/amd64/include/md_var.h b/sys/amd64/include/md_var.h index b85e442e559a..2eec4fde80a6 100644 --- a/sys/amd64/include/md_var.h +++ b/sys/amd64/include/md_var.h @@ -68,6 +68,7 @@ struct trapframe; void amd64_conf_fast_syscall(void); void amd64_cpu_init_fred(void); +void amd64_cpu_init_msr_memctl(void); void amd64_db_resume_dbreg(void); void amd64_init_splitlock(void); vm_paddr_t amd64_loadaddr(void); diff --git a/sys/amd64/include/pcpu.h b/sys/amd64/include/pcpu.h index 213790d245dc..6a91122eb2ec 100644 --- a/sys/amd64/include/pcpu.h +++ b/sys/amd64/include/pcpu.h @@ -101,7 +101,8 @@ _Static_assert(sizeof(struct monitorbuf) == 128, "2x cache line"); u_int pc_small_core; \ u_int pc_pcid_invlpg_workaround; \ struct pmap_pcid pc_kpmap_store; \ - char __pad[2900] /* pad to UMA_PCPU_ALLOC_SIZE */ + uint64_t pc_msr_memctl; \ + char __pad[2892] /* pad to UMA_PCPU_ALLOC_SIZE */ #define PC_DBREG_CMD_NONE 0 #define PC_DBREG_CMD_LOAD 1