From nobody Thu Apr 16 08:44:24 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 4fxBQP2PmKz6ZFN8 for ; Thu, 16 Apr 2026 08:44:29 +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 4fxBQP1j7fz3C4H for ; Thu, 16 Apr 2026 08:44:29 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776329069; 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=CUxnFhioiC6EwsHD7FZzvtgSsqbbXXpPTPPiX2Tllq8=; b=khyCmxlikoLoSXys356aszlcvnBDo+eJTBrMAhT8hC+DTeS2X/zjb4c0bIVLvrKWaWWrfI HHGN2YgOXX0OZgfcq11qCab4py+bUgbiezgxVYS8fNMu0YAL3sLqCvToGyVV4n7PtE9QkN DiYYAE6LCvgI6jAyGEI3sssj/Z1YUTye5DF94NW4gJz4IAFINPujxVdiTVTkk5KYDduOxv SiYfBD58h/EYKPp4VLCo5hv+0/08P4QsO5fiY7zNgL9WzUioW1GYmJcKuQdiL2sudtNyTx C8spDSE1mHOo6OkSTi1SZIxIEEBHyDlPB69IzuODZCiXqvA7CSHFdJKrM+IRHw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1776329069; a=rsa-sha256; cv=none; b=pVCKRnqGaM6Tq5ihDeSQ6K4lqzcX1VYc+8JaSALU7bumHFbuZMQokyr0+cC44ePwAapxsB CBtIXCJQqPqf8v4DD6EtP18Of3MFlfu9P73fr6mX04y4ftL21GuFymssalEPhGTqZXCdC0 9sSp0XaEpSzj3nEAiARZ6TvRAY5iU9tmtoxi4To+BqdTWKhvZxeRAByqEvqZs82MXfxxxG uN1reMKJaQS9QlyEw/ywPpAWYnFTyZqatL8gkmWbluUv/IS5FP3fCcCZSYtxweDnEi2UyJ vkOjfSLFoubLNjFiKefJas3Fm3VzClbQFvhvjtGipKPWdFnbJUYbPz9lAnkZ3Q== 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=1776329069; 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=CUxnFhioiC6EwsHD7FZzvtgSsqbbXXpPTPPiX2Tllq8=; b=m/RyCG9gsbMRrO+rpaiwk3Jf5TCDHtNIweIk6WTT41z46OYI6RpUSywJHATlAHWR7H75MU M7hj7+1Qe5hG3kE58x4JlRf9zwO8Ka0Ujopi7EfoCwCG/GHvxPHJYXCvLSl3VrvKHXfdiU I1vs/WgaKEO2Gqh1EpHg73jKQ6w/3fQkmzNsx4ai9SZnW8KSQihm5eyjdbtBRuHpUf3stU fLMlW1jEGzoM45kqRzQVRvls+QfLDys8Gu0rPobUEicDMSAK8wNpes24fEaiKHKUifwLFR bR6JP6nyE8CXjrT8c1c7AFuGAyIt8WF+ng6eN+K/zv+w1lfG6kuhccQ9pfhBWw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fxBQP18LCz116L for ; Thu, 16 Apr 2026 08:44:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1e15f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 16 Apr 2026 08:44:24 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: ShengYi Hung Subject: git: e48e97945899 - main - hwpstate_amd: Cache cpuid 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: aokblast X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e48e9794589993da039a2f4d1c66f8fdd6421155 Auto-Submitted: auto-generated Date: Thu, 16 Apr 2026 08:44:24 +0000 Message-Id: <69e0a168.1e15f.159ac75d@gitrepo.freebsd.org> The branch main has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=e48e9794589993da039a2f4d1c66f8fdd6421155 commit e48e9794589993da039a2f4d1c66f8fdd6421155 Author: ShengYi Hung AuthorDate: 2026-04-08 12:58:34 +0000 Commit: ShengYi Hung CommitDate: 2026-04-16 08:44:03 +0000 hwpstate_amd: Cache cpuid Reviewed by: olce Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D56305 --- sys/x86/cpufreq/hwpstate_amd.c | 49 ++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/sys/x86/cpufreq/hwpstate_amd.c b/sys/x86/cpufreq/hwpstate_amd.c index 4be295075482..5e075a26a57b 100644 --- a/sys/x86/cpufreq/hwpstate_amd.c +++ b/sys/x86/cpufreq/hwpstate_amd.c @@ -179,6 +179,7 @@ struct hwpstate_softc { uint64_t request; } cppc; }; + u_int cpuid; }; static void hwpstate_identify(driver_t *driver, device_t parent); @@ -337,8 +338,6 @@ static int sysctl_cppc_dump_handler(SYSCTL_HANDLER_ARGS) { const struct hwpstate_softc *const sc = arg1; - const device_t dev = sc->dev; - const u_int cpuid = cpu_get_pcpu(dev)->pc_cpuid; struct sbuf *sb; struct sbuf sbs; struct get_cppc_regs_data data; @@ -349,16 +348,16 @@ sysctl_cppc_dump_handler(SYSCTL_HANDLER_ARGS) sb = sbuf_new_for_sysctl(&sbs, NULL, 0, req); - smp_rendezvous_cpu(cpuid, smp_no_rendezvous_barrier, get_cppc_regs_cb, - smp_no_rendezvous_barrier, &data); + smp_rendezvous_cpu(sc->cpuid, smp_no_rendezvous_barrier, + get_cppc_regs_cb, smp_no_rendezvous_barrier, &data); if (hwp_has_error(data.res, HWP_ERROR_CPPC_ENABLE)) sbuf_printf(sb, "CPU%u: " MSR_AMD_CPPC_ENABLE_NAME ": " - MSR_NOT_READ_MSG "\n", cpuid); + MSR_NOT_READ_MSG "\n", sc->cpuid); else sbuf_printf(sb, "CPU%u: HWP %sabled (" MSR_AMD_CPPC_REQUEST_NAME - ": %#" PRIx64 ")\n", cpuid, data.enable & 1 ? "En" : "Dis", - data.enable); + ": %#" PRIx64 ")\n", sc->cpuid, data.enable & 1 ? + "En" : "Dis", data.enable); if (hwp_has_error(data.res, HWP_ERROR_CPPC_CAPS)) print_cppc_no_caps_1(sb); @@ -433,10 +432,8 @@ set_cppc_request_cb(void *args) static inline void set_cppc_request_send_one(struct set_cppc_request_cb *const data, device_t dev) { - const u_int cpuid = cpu_get_pcpu(dev)->pc_cpuid; - data->sc = device_get_softc(dev); - smp_rendezvous_cpu(cpuid, smp_no_rendezvous_barrier, + smp_rendezvous_cpu(data->sc->cpuid, smp_no_rendezvous_barrier, set_cppc_request_cb, smp_no_rendezvous_barrier, data); } @@ -505,9 +502,7 @@ sysctl_cppc_request_field_handler(SYSCTL_HANDLER_ARGS) check_cppc_in_use(sc, __func__); if ((sc->flags & HWPFL_CPPC_REQUEST_NOT_READ) != 0) { - const u_int cpuid = cpu_get_pcpu(dev)->pc_cpuid; - - smp_rendezvous_cpu(cpuid, smp_no_rendezvous_barrier, + smp_rendezvous_cpu(sc->cpuid, smp_no_rendezvous_barrier, get_cppc_request_cb, smp_no_rendezvous_barrier, sc); if ((sc->flags & HWPFL_CPPC_REQUEST_NOT_READ) != 0) @@ -576,8 +571,10 @@ hwpstate_goto_pstate(device_t dev, int id) sbintime_t sbt; uint64_t msr; int cpu, j, limit; + struct hwpstate_softc *sc; - cpu = cpu_get_pcpu(dev)->pc_cpuid; + sc = device_get_softc(dev); + cpu = sc->cpuid; if (hwpstate_pstate_limit) { /* get the current pstate limit */ @@ -657,16 +654,14 @@ hwpstate_set(device_t dev, const struct cf_setting *cf) static int hwpstate_get_cppc(device_t dev, struct cf_setting *cf) { - struct pcpu *pc; + struct hwpstate_softc *sc; uint64_t rate; int ret; - pc = cpu_get_pcpu(dev); - if (pc == NULL) - return (ENXIO); + sc = device_get_softc(dev); memset(cf, CPUFREQ_VAL_UNKNOWN, sizeof(*cf)); cf->dev = dev; - if ((ret = cpu_est_clockrate(pc->pc_cpuid, &rate))) + if ((ret = cpu_est_clockrate(sc->cpuid, &rate))) return (ret); cf->freq = rate / 1000000; return (0); @@ -681,7 +676,7 @@ hwpstate_get_pstate(device_t dev, struct cf_setting *cf) int cpu; sc = device_get_softc(dev); - cpu = cpu_get_pcpu(dev)->pc_cpuid; + cpu = sc->cpuid; hwpstate_pstate_read_status(cpu, &msr); if (msr >= sc->cfnum) return (EINVAL); @@ -894,7 +889,7 @@ static int enable_cppc(struct hwpstate_softc *sc) { const device_t dev = sc->dev; - const u_int cpuid = cpu_get_pcpu(dev)->pc_cpuid; + const u_int cpuid = sc->cpuid; struct set_autonomous_hwp_data data; struct sbuf sbs; struct sbuf *sb; @@ -964,7 +959,7 @@ hwpstate_probe_pstate(device_t dev) int cpu; sc = device_get_softc(dev); - cpu = cpu_get_pcpu(dev)->pc_cpuid; + cpu = sc->cpuid; /* * Check if acpi_perf has INFO only flag. */ @@ -1042,6 +1037,7 @@ hwpstate_probe(device_t dev) device_set_desc(dev, "Cool`n'Quiet 2.0"); sc->dev = dev; + sc->cpuid = cpu_get_pcpu(dev)->pc_cpuid; if ((sc->flags & HWPFL_USE_CPPC) != 0) { sc->cpufreq_methods = &cppc_methods; return (0); @@ -1133,14 +1129,11 @@ static int hwpstate_pstate_read_settings(struct hwpstate_softc *sc, uint64_t vals[]) { struct hwpstate_pstate_read_settings_cb req; - device_t dev; req.sc = sc; req.vals = vals; - dev = sc->dev; - smp_rendezvous_cpu(cpu_get_pcpu(dev)->pc_cpuid, - smp_no_rendezvous_barrier, hwpstate_pstate_read_settings_cb, - smp_no_rendezvous_barrier, &req); + smp_rendezvous_cpu(sc->cpuid, smp_no_rendezvous_barrier, + hwpstate_pstate_read_settings_cb, smp_no_rendezvous_barrier, &req); return (req.err); } @@ -1155,7 +1148,7 @@ hwpstate_get_info_from_msr(device_t dev) family = CPUID_TO_FAMILY(cpu_id); sc = device_get_softc(dev); /* Get pstate count */ - hwpstate_pstate_read_limit(cpu_get_pcpu(dev)->pc_cpuid, &msr); + hwpstate_pstate_read_limit(sc->cpuid, &msr); sc->cfnum = 1 + AMD_10H_11H_GET_PSTATE_MAX_VAL(msr); hwpstate_set = sc->hwpstate_settings; hwpstate_pstate_read_settings(sc, state_settings);