Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 5 Aug 2021 15:50:09 GMT
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 4cc6fe1e5b73 - main - coretemp: use x86_msr_op for thermal MSR access
Message-ID:  <202108051550.175Fo9GA018298@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=4cc6fe1e5b73ce540882753d918bc8208849e9e9

commit 4cc6fe1e5b73ce540882753d918bc8208849e9e9
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-08-02 19:53:08 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-08-05 15:47:07 +0000

    coretemp: use x86_msr_op for thermal MSR access
    
    Reviewed by:    markj
    Discussed with: mav
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D31386
---
 sys/dev/coretemp/coretemp.c | 57 +++++++++++++--------------------------------
 1 file changed, 16 insertions(+), 41 deletions(-)

diff --git a/sys/dev/coretemp/coretemp.c b/sys/dev/coretemp/coretemp.c
index 53a2434254f6..bdc71b284ac7 100644
--- a/sys/dev/coretemp/coretemp.c
+++ b/sys/dev/coretemp/coretemp.c
@@ -315,56 +315,31 @@ struct coretemp_args {
 	uint64_t	val;
 };
 
-static void
-coretemp_rdmsr(void *arg)
-{
-	struct coretemp_args *args = arg;
-
-	args->val = rdmsr(args->msr);
-}
-
-static void
-coretemp_wrmsr(void *arg)
-{
-	struct coretemp_args *args = arg;
-
-	wrmsr(args->msr, args->val);
-}
-
+/*
+ * The digital temperature reading is located at bit 16
+ * of MSR_THERM_STATUS.
+ *
+ * There is a bit on that MSR that indicates whether the
+ * temperature is valid or not.
+ *
+ * The temperature is computed by subtracting the temperature
+ * reading by Tj(max).
+ */
 static uint64_t
 coretemp_get_thermal_msr(int cpu)
 {
-	struct coretemp_args args;
-	cpuset_t cpus;
+	uint64_t res;
 
-	/*
-	 * The digital temperature reading is located at bit 16
-	 * of MSR_THERM_STATUS.
-	 *
-	 * There is a bit on that MSR that indicates whether the
-	 * temperature is valid or not.
-	 *
-	 * The temperature is computed by subtracting the temperature
-	 * reading by Tj(max).
-	 */
-	args.msr = MSR_THERM_STATUS;
-	CPU_SETOF(cpu, &cpus);
-	smp_rendezvous_cpus(cpus, smp_no_rendezvous_barrier, coretemp_rdmsr,
-	    smp_no_rendezvous_barrier, &args);
-	return (args.val);
+	x86_msr_op(MSR_THERM_STATUS, MSR_OP_RENDEZVOUS_ONE | MSR_OP_READ |
+	    MSR_OP_CPUID(cpu), 0, &res);
+	return (res);
 }
 
 static void
 coretemp_clear_thermal_msr(int cpu)
 {
-	struct coretemp_args args;
-	cpuset_t cpus;
-
-	args.msr = MSR_THERM_STATUS;
-	args.val = 0;
-	CPU_SETOF(cpu, &cpus);
-	smp_rendezvous_cpus(cpus, smp_no_rendezvous_barrier, coretemp_wrmsr,
-	    smp_no_rendezvous_barrier, &args);
+	x86_msr_op(MSR_THERM_STATUS, MSR_OP_RENDEZVOUS_ONE | MSR_OP_WRITE |
+	    MSR_OP_CPUID(cpu), 0, NULL);
 }
 
 static int



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202108051550.175Fo9GA018298>