From nobody Fri Jul 10 19:34:25 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 4gxhq53dsKz6cxNB for ; Fri, 10 Jul 2026 19:34:25 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gxhq5271Pz3yf3 for ; Fri, 10 Jul 2026 19:34:25 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1783712065; 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=VmjMhgOe6/aUDMkfJhnTOBkIx3DvF/Ill3uFxeIHd4o=; b=Tiz81Aca3UGJ3zPgWVWZDRC48x0OgL9B3FF4eM5KdktqzkDbjdHu+OV0BTBA9Vmx6Vz2z9 Q5/9sPBam7m4kMVexRZdAKaD0vxkUKJ/0XJE2FRknfBRli/kwu8kAcHQJC84iPq9mrsc9T 6tD4yxgChvLf8gyl5/Aqf/hK7tLElv/tuMZp/EBLz6G4JXBQammEQqZ/ktAn2hRAsnKgzY amagD4q5x/2TmRawktoFOlHb6dxFIcJffrVQxI/LGeOchARnXUT9aov4eJWEc7jICRn/8H uNPnYNi5al7iIfUTrb3DMGyW4vmRD9FYdclbGXjaqVx+9JxqVB5MirOlqniriQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1783712065; a=rsa-sha256; cv=none; b=MxE1au6hJg4NdInw2f/+nmSX0h7L6dW9OJ263zpVnhUE1a1k2whltl3EObGJbI3xk1+My+ dLj+b+70ZC45lWDDnXmGbkOWXernHlezl28IbRjtznm4xypvPAJc/NWCgaBWg3q+WRkB0H AFYtmMQQlXG6kvX8x9mKIBEyIEwIzNqJewllFaQD0IJ82Yl33IMUwm1SfcmPtT30CMRD+R Yqe4spnaOCI4tfZmU/QzkxYmC+cUjWD7ZTAIPbAWfTLTU9dBYBqEc5Dgp00ZUFV4BfpMO+ 81mHJqJMBusUF+w8XQ7Up84Io9o2VJwTLW/tH0lNBYwwsgHNCMlmk2E/z1tiWQ== 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=1783712065; 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=VmjMhgOe6/aUDMkfJhnTOBkIx3DvF/Ill3uFxeIHd4o=; b=we5U4SM2ZN2HyH/jkTPOWM2HYkoErIovLJ+tQHUiEeupiHyEU1VstpitXWAswnYcVVqGj6 jQ5h3uVrBnXhVRhNdkPBeGkdZeGveLt9uC/2OPlplU7z5Gmu6Zfaf+xCgWQYy/Ck+pSllH jtdiF6zfSs48oHUn/bKft/D0oQ8hedVWvEgkWJiRvSF1F6M6Xj8OG2nJwibIW0+kNBuoJV Wmh5QHr6y5G4H44DnE0sgZdEthUadhMwh9I1IU2Xf/REuZaPC6LOkKejJ8EVw7kmcd0Frx cDUYOedVQbMvpzTH+n80u1lKJX/jf/xvZL+f27H1251TSZdDPlLinjI0bxOvZg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gxhq50whQz17Wt for ; Fri, 10 Jul 2026 19:34:25 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1ebe5 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 10 Jul 2026 19:34:25 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Olivier Certner Subject: git: 7cc2f18e12ed - main - hwpstate_intel(4): Introduce a CPU ID cache 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: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7cc2f18e12ed3dd19522c5b8e96519282189a83b Auto-Submitted: auto-generated Date: Fri, 10 Jul 2026 19:34:25 +0000 Message-Id: <6a514941.1ebe5.43df5fbb@gitrepo.freebsd.org> The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=7cc2f18e12ed3dd19522c5b8e96519282189a83b commit 7cc2f18e12ed3dd19522c5b8e96519282189a83b Author: Olivier Certner AuthorDate: 2026-07-07 12:52:58 +0000 Commit: Olivier Certner CommitDate: 2026-07-10 19:33:53 +0000 hwpstate_intel(4): Introduce a CPU ID cache To minimize the diff with hwpstate_intel(4). See previous commit there for the rationale. Reviewed by: aokblast Sponsored by: The FreeBSD Foundation --- sys/x86/cpufreq/hwpstate_intel.c | 60 +++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/sys/x86/cpufreq/hwpstate_intel.c b/sys/x86/cpufreq/hwpstate_intel.c index 1cea06f3721e..59d7a155fda8 100644 --- a/sys/x86/cpufreq/hwpstate_intel.c +++ b/sys/x86/cpufreq/hwpstate_intel.c @@ -85,20 +85,21 @@ static device_method_t intel_hwpstate_methods[] = { DEVMETHOD_END }; -#define RDMSR_ON_CPU(dev, msr, val) \ - (x86_msr_op(msr, \ - MSR_OP_RENDEZVOUS_ONE | MSR_OP_READ | \ - MSR_OP_CPUID(cpu_get_pcpuid(dev)), \ +#define RDMSR_ON_CPU(sc, msr, val) \ + (x86_msr_op(msr, \ + MSR_OP_RENDEZVOUS_ONE | MSR_OP_READ | \ + MSR_OP_CPUID(sc->cpuid), \ 0, val)); -#define WRMSR_ON_CPU(dev, msr, val) \ - x86_msr_op(msr, \ - MSR_OP_RENDEZVOUS_ONE | MSR_OP_WRITE | \ - MSR_OP_CPUID(cpu_get_pcpuid(dev)), \ +#define WRMSR_ON_CPU(sc, msr, val) \ + x86_msr_op(msr, \ + MSR_OP_RENDEZVOUS_ONE | MSR_OP_WRITE | \ + MSR_OP_CPUID(sc->cpuid), \ val, NULL) struct hwp_softc { device_t dev; + u_int cpuid; bool hwp_notifications; bool hwp_activity_window; @@ -189,7 +190,7 @@ get_cppc_regs_one(const struct hwp_softc *const sc, struct get_cppc_regs_data *const req) { req->sc = sc; - smp_rendezvous_cpu(cpu_get_pcpuid(sc->dev), + smp_rendezvous_cpu(sc->cpuid, smp_no_rendezvous_barrier, get_cppc_regs_cb, smp_no_rendezvous_barrier, req); } @@ -200,7 +201,7 @@ static int intel_hwp_dump_sysctl_handler(SYSCTL_HANDLER_ARGS) { const struct hwp_softc *const sc = arg1; - const u_int cpuid = cpu_get_pcpuid(sc->dev); + const u_int cpuid = sc->cpuid; struct sbuf *sb; struct get_cppc_regs_data data; int ret = 0; @@ -298,8 +299,7 @@ sysctl_epp_select(SYSCTL_HANDLER_ARGS) * This register is per-core (but not HT). */ if (!sc->hwp_perf_bias_cached) { - ret = RDMSR_ON_CPU(dev, MSR_IA32_ENERGY_PERF_BIAS, - &epb); + ret = RDMSR_ON_CPU(sc, MSR_IA32_ENERGY_PERF_BIAS, &epb); if (ret) goto out; sc->hwp_energy_perf_bias = epb; @@ -327,10 +327,10 @@ sysctl_epp_select(SYSCTL_HANDLER_ARGS) (val << 24u); if (sc->hwp_pkg_ctrl_en) - ret = WRMSR_ON_CPU(dev, MSR_IA32_HWP_REQUEST_PKG, + ret = WRMSR_ON_CPU(sc, MSR_IA32_HWP_REQUEST_PKG, req_cached); else - ret = WRMSR_ON_CPU(dev, MSR_IA32_HWP_REQUEST, + ret = WRMSR_ON_CPU(sc, MSR_IA32_HWP_REQUEST, req_cached); } else { val = EPP_TO_EPB(val); @@ -339,7 +339,7 @@ sysctl_epp_select(SYSCTL_HANDLER_ARGS) sc->hwp_energy_perf_bias = ((sc->hwp_energy_perf_bias & ~IA32_ENERGY_PERF_BIAS_POLICY_HINT_MASK) | val); - ret = WRMSR_ON_CPU(dev, MSR_IA32_ENERGY_PERF_BIAS, + ret = WRMSR_ON_CPU(sc, MSR_IA32_ENERGY_PERF_BIAS, sc->hwp_energy_perf_bias); } @@ -494,16 +494,15 @@ set_autonomous_hwp_send_one(struct hwp_softc *sc, struct set_autonomous_hwp_cb *data) { data->sc = sc; - smp_rendezvous_cpu(cpu_get_pcpu(sc->dev)->pc_cpuid, - smp_no_rendezvous_barrier, set_autonomous_hwp_cb, - smp_no_rendezvous_barrier, data); + smp_rendezvous_cpu(sc->cpuid, smp_no_rendezvous_barrier, + set_autonomous_hwp_cb, smp_no_rendezvous_barrier, data); } static int set_autonomous_hwp(struct hwp_softc *const sc) { const device_t dev = sc->dev; - const u_int cpuid = cpu_get_pcpuid(dev); + const u_int cpuid = sc->cpuid; struct set_autonomous_hwp_cb data; set_autonomous_hwp_send_one(sc, &data); @@ -552,6 +551,7 @@ intel_hwpstate_attach(device_t dev) "Parent bus does not provide a per-CPU structure!"); return (ENXIO); } + sc->cpuid = cpu_get_pcpuid(dev); /* eax */ if (cpu_power_eax & CPUTPM1_HWP_NOTIFICATION) @@ -595,6 +595,7 @@ intel_hwpstate_detach(device_t dev) static int intel_hwpstate_get(device_t dev, struct cf_setting *set) { + const struct hwp_softc *const sc = device_get_softc(dev); uint64_t rate; int ret; @@ -604,7 +605,7 @@ intel_hwpstate_get(device_t dev, struct cf_setting *set) memset(set, CPUFREQ_VAL_UNKNOWN, sizeof(*set)); set->dev = dev; - ret = cpu_est_clockrate(cpu_get_pcpuid(dev), &rate); + ret = cpu_est_clockrate(sc->cpuid, &rate); if (ret == 0) set->freq = rate / 1000000; @@ -632,15 +633,15 @@ intel_hwpstate_suspend(device_t dev) } struct hwpstate_resume_cb { - struct hwp_softc *sc; + const struct hwp_softc *sc; uint32_t flag; }; static void hwpstate_resume_cb(void *arg) { - struct hwpstate_resume_cb *data = arg; - struct hwp_softc *sc = data->sc; + struct hwpstate_resume_cb *const data = arg; + const struct hwp_softc *const sc = data->sc; int ret; data->flag = 0; @@ -676,12 +677,11 @@ hwpstate_resume_cb(void *arg) } static inline void -hwpstate_resume_send_one(struct hwp_softc *sc, struct hwpstate_resume_cb *req) +hwpstate_resume_send_one(const struct hwp_softc *sc, struct hwpstate_resume_cb *req) { req->sc = sc; - smp_rendezvous_cpu(cpu_get_pcpuid(sc->dev), - smp_no_rendezvous_barrier, hwpstate_resume_cb, - smp_no_rendezvous_barrier, req); + smp_rendezvous_cpu(sc->cpuid, smp_no_rendezvous_barrier, + hwpstate_resume_cb, smp_no_rendezvous_barrier, req); } /* @@ -691,12 +691,10 @@ hwpstate_resume_send_one(struct hwp_softc *sc, struct hwpstate_resume_cb *req) static int intel_hwpstate_resume(device_t dev) { - const u_int cpuid = cpu_get_pcpuid(dev); - struct hwp_softc *sc; + const struct hwp_softc *const sc = device_get_softc(dev); + const u_int cpuid = sc->cpuid; struct hwpstate_resume_cb data; - sc = device_get_softc(dev); - hwpstate_resume_send_one(sc, &data); if (hwp_has_error(data.flag, HWP_ERROR_CPPC_ENABLE)) { device_printf(dev,