From nobody Thu Feb 19 22:08:48 2026 X-Original-To: dev-commits-src-branches@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 4fH6wJ5K0Nz6SXXx for ; Thu, 19 Feb 2026 22:08:48 +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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fH6wJ2rNtz42ZB for ; Thu, 19 Feb 2026 22:08:48 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1771538928; 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=4tEt4wX5Ja3KQx0v702OUjLxGVLJiFRCz+mTMJkpDGE=; b=s1wrbn+8kdJFqIESGlxNn9X7vjEHpSp0n1WhYbyfx64laXU9t5Eb9qzt9jjcjb8D6u49Rj aWUkbkOcajQVoZEQ6r1cEHH2gNaMr6gcyBEIYqyREITz9dGTIkKrD16ZgVX+gEH4224PBo PYu+c+BR6CptPRuek9WUsmkdqmgjTgx/ZUeCPqzdNDPp/saN6JUKwFq4mUCU2hGWT6KLI1 OxIACjjIa4dgyzi1A2CDUugVA1D3Ypd49B00cHK2jB8vW8S+pydCm6NjN4l2cripoRMeRn G/WlAVdCQYnVR6q3VARHl51TKjFVDcWi2Injd6JnWYROamwZlIrhVD33wp4jpA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1771538928; a=rsa-sha256; cv=none; b=egMOrQ3WutPlIoJikxJ968Eukl/6H7Yxf/nRPrl4nGrg5idgrtaj3wbRVDaNiRNuLFMENM A6EtkUmxjrAIS/k9WVAuUWDyePvo3lzRZ/9rdTO5AukxX6J9jAdY/wfaoXKasq6e/kIStG KrA46OoFpdsxL06Uv5U68pfIzZms9W0p4RGECOKKUsdfBi3//+0URQiAnCQlHguugcMepA F99g+9JuA0RtHDwN1V422y7nn24VIeMuIyxtJJXNfdVRqOsBJNLuqgZw56LQtcolHTgbxL ryuDUZd+ergIsdm6xPWDI8NGgPm3mB6lMFcNpPh47iz5PxBYc4lDA81Wld0kMQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1771538928; 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=4tEt4wX5Ja3KQx0v702OUjLxGVLJiFRCz+mTMJkpDGE=; b=nJHEGK+8E7pAvdLJL6DW7EjsyEu7mgowohR2aaYbZK05jqTgaMPBPDd62LeULTZlUIpbgf 4Jm0wIK3G/PVtjGrN4MQVzsQX1uipQX4FkkC/D7QkM+cxh/A7pK00YKaWO4VNk6KT1WFQE lw06tiCmYbcb6kIrNChvNEVUcGueWiGo6YVgs4UkmYZZxPp5YCr/ObReKRpmKQ9A6dSZmt LT9M0vG8Jbg4CI2pR0X0YxcbuoIbXR6CozvxL4EC25kk/XX3aWKjbmQrmnO4ldKRFusEyl QPitZSKXnes2DZC/MN1JtEa2hE0LZhzPk1fLOrTyQ+3zIb8XN8s5xCNnpjY31A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fH6wJ2RShz11HW for ; Thu, 19 Feb 2026 22:08:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 25af8 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 19 Feb 2026 22:08:48 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: e334b70a2b5b - stable/15 - x86: provide extended description for x86_msr_op(9) List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org 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: e334b70a2b5b162cc82137776386fa76dc2eda48 Auto-Submitted: auto-generated Date: Thu, 19 Feb 2026 22:08:48 +0000 Message-Id: <699789f0.25af8.348a9bbe@gitrepo.freebsd.org> The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=e334b70a2b5b162cc82137776386fa76dc2eda48 commit e334b70a2b5b162cc82137776386fa76dc2eda48 Author: Konstantin Belousov AuthorDate: 2026-02-04 00:22:08 +0000 Commit: Konstantin Belousov CommitDate: 2026-02-19 22:05:20 +0000 x86: provide extended description for x86_msr_op(9) (cherry picked from commit cb81a9c18db93a2046c47b0c7dc0bd6adcdd2495) --- sys/x86/include/x86_var.h | 6 ++---- sys/x86/x86/cpu_machdep.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/sys/x86/include/x86_var.h b/sys/x86/include/x86_var.h index caaab207b57a..40dd21107436 100644 --- a/sys/x86/include/x86_var.h +++ b/sys/x86/include/x86_var.h @@ -162,7 +162,7 @@ void x86_set_fork_retval(struct thread *td); uint64_t rdtsc_ordered(void); /* - * MSR ops for x86_msr_op() + * MSR ops for x86_msr_op(). */ #define MSR_OP_ANDNOT 0x00000001 #define MSR_OP_OR 0x00000002 @@ -170,9 +170,7 @@ uint64_t rdtsc_ordered(void); #define MSR_OP_READ 0x00000004 /* - * Where and which execution mode - * - * All modes cause execution on the target CPU(s) with interrupts disabled. + * Where and which execution mode. */ #define MSR_OP_SAFE 0x08000000 #define MSR_OP_LOCAL 0x10000000 diff --git a/sys/x86/x86/cpu_machdep.c b/sys/x86/x86/cpu_machdep.c index 6c3f4add6202..5483fbd6dd4e 100644 --- a/sys/x86/x86/cpu_machdep.c +++ b/sys/x86/x86/cpu_machdep.c @@ -223,6 +223,49 @@ x86_msr_op_one(void *arg) #define MSR_OP_GET_CPUID(x) \ (((x) & ~(MSR_OP_EXMODE_MASK | MSR_OP_SAFE)) >> 8) +/* + * Utility function to wrap common MSR accesses. + * + * The msr argument specifies the MSR number to operate on. + * arg1 is an optional additional argument which is needed by + * modifying ops. + * + * res is the location where the value read from MSR is placed. It is + * the value that was initially read from the MSR, before applying the + * specified operation. Can be NULL if the value is not needed. If + * the op is executed on more than one CPU, it is unspecified on which + * CPU the value was read. + * + * op encoding combines the target/mode specification and the requested + * operation, all or-ed together. + * + * MSR accesses are executed with interrupts disabled. + + * The following targets can be specified: + * MSR_OP_LOCAL execute on current CPU. + * MSR_OP_SCHED_ALL execute on all CPUs, by migrating + * the current thread to them in sequence. + * MSR_OP_SCHED_ALL | MSR_OP_SAFE execute on all CPUs by migrating, using + * safe MSR access. + * MSR_OP_SCHED_ONE execute on specified CPU, migrate + * curthread to it. + * MSR_OP_SCHED_ONE | MSR_OP_SAFE safely execute on specified CPU, + * migrate curthread to it. + * MSR_OP_RENDEZVOUS_ALL execute on all CPUs in interrupt + * context. + * MSR_OP_RENDEZVOUS_ONE execute on specified CPU in interrupt + * context. + * If a _ONE target is specified, 'or' the op value with MSR_OP_CPUID(cpuid) + * to name the target CPU. _SAFE variants might return EFAULT if access to + * MSR faulted with #GP. Non-_SAFE variants most likely panic or reboot + * the machine if the MSR is not present or access is not tolerated by hw. + * + * The following operations can be specified: + * MSR_OP_ANDNOT *res = v = *msr; *msr = v & ~arg1 + * MSR_OP_OR *res = v = *msr; *msr = v | arg1 + * MSR_OP_READ *res = *msr + * MSR_OP_WRITE *res = *msr; *msr = arg1 + */ int x86_msr_op(u_int msr, u_int op, uint64_t arg1, uint64_t *res) {