From nobody Tue Sep 29 00:31:59 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 4htzdW4rRSz6t51D for ; Tue, 29 Sep 2026 00:31:59 +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 4htzdW2xn6z4W55 for ; Tue, 29 Sep 2026 00:31:59 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790641919; 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=5ZSe1iQYKhxMl51C4F9wtnTbTUQ9h1cUaLKuffTyGsQ=; b=VpHvUe3g3Rd9rZxZG5mmjle4zwxQ99SgemKIFFmvOxONeRc/++N+ByDDZOR0tUfRUsPnig Yiui8GVxJ7xyiWz6uLFayv7gXKeN6Bn+NV37r3nXRYrUqRaBSez6qvNVtC2AA7j4+nnVRd dfIiNtn7w3vp0uu9qnssp1BEsdhXIs/eqpTO1UnzYoRNTlsRv0dEe0CCEEay7iRru7uF18 hiFmSLeQ4YVMqPJ5MVXhCTOalw2XMizxSJwy65DwWCKPnB30kQ2EcVnob6bsoRRuFNYyki 4Co1N7z0ly51U4hGSdTfsBKUCXdzS35X1/Rupu3sGYIG/2b3y+R7FtMeroehPQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1790641919; b=GvHIG8fkuVDEB7VR3iQcaMjh7Oz6qjba3KDirDnamiXI2nj+Pme+BmAXgWNnuGNTxUA938 tO4LR72+dUAxnD3CgyzpZCNZUNb160FmsL6ECkjWr0moE/12tJY+mq626CryjQaCKgGOHV moDestD4Ik/+/09R2dIvKyK9f4vdwYlyVnc300jycPyC30/9/Gf2WWn9KJBO42VqpmWSRv i4EmNClVcUrKHENNWWPLQf2U3jLS+9OFh/nR7T93QbebPXifB1Eus5i/HyFgoc3a93TfAj 4LvoALTGDaAlEx62igLCqd886ddJmhVpD7LZZJWdYYDsDWx93MReL28qSvovhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790641919; 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=5ZSe1iQYKhxMl51C4F9wtnTbTUQ9h1cUaLKuffTyGsQ=; b=IUeioLRHt3PwdWBuPxTeu0DU3TPfZzs8uLJeXLlfYLBcH9D1+I19pc/Bj43oW9Dki2aMim Jt3QcKPcutXZnup8q+seDVbNpCUUk78o66AmI2Hgg/BQU2UqcNSsoNpueKxlYiloFtssKH 17QipdBpKJINF+eC0h8wk+90uNhxeKjJ9GJ+s61sAiX6CwtcdsfVzs+7X02mPgTSrSQ6QZ c1xlYgaac53Fp6N1Ekw++RMaM/242wZiO6vc9/qsrPp0e6y7900fMw617QaNLi8yIdG9Hi ovFPugV9OWaDMwvKBvXnScZTaqpma9Tgj6pwztNNBkYMmog6JcGJ5h47hry7hw== 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 4htzdW1jTbzrX1 for ; Tue, 29 Sep 2026 00:31:59 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3bdd4 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 29 Sep 2026 00:31:59 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 0dce4f2a39dc - stable/15 - amd64: cache MSR_MEMORY_CTL in pcpu 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: 0dce4f2a39dcdc30c3176720a4f86c69b9a1d707 Auto-Submitted: auto-generated Date: Tue, 29 Sep 2026 00:31:59 +0000 Message-Id: <6abb06ff.3bdd4.cefe0d1@gitrepo.freebsd.org> The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=0dce4f2a39dcdc30c3176720a4f86c69b9a1d707 commit 0dce4f2a39dcdc30c3176720a4f86c69b9a1d707 Author: Konstantin Belousov AuthorDate: 2026-09-19 07:43:34 +0000 Commit: Konstantin Belousov CommitDate: 2026-09-29 00:27:15 +0000 amd64: cache MSR_MEMORY_CTL in pcpu (cherry picked from commit 74d325fee2dbcb5f8541819481ce76f87c151a21) --- 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 0b72a1043b40..c871838c9c7b 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -1659,6 +1659,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) @@ -1933,8 +1934,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 @@ -1951,8 +1951,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 96e91b59834e..41aa8fa7e281 100644 --- a/sys/amd64/amd64/mp_machdep.c +++ b/sys/amd64/amd64/mp_machdep.c @@ -296,6 +296,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 f73cb916d53a..c3b5f2050212 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