From nobody Wed Jun 24 18:18:51 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 4glqvN4Nxhz6jbqv for ; Wed, 24 Jun 2026 18:18:56 +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 4glqvN3lM2z3hs3 for ; Wed, 24 Jun 2026 18:18:56 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782325136; 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=KbxhcY4jZ4jHKSF2mbu+/yON36YN3/7O62ySq49ftyk=; b=MVtWVEJRWX0oJB2HwvZi/S97+E2qVF4Oyvxd4B5KhDyS13jiIQX2wcIbI4wHrVFxxz7vxY ObDvI0ro4vof9rfDFrcFWmaKZ7NmeB558+1gGPqCngDe82rytg8aiafajJum+mPHf14Gw6 kE1MXLF0IYYAOQ892AJyWztXa8/NbAKgMW8wQ9UBzz5F5ar8SWJLIpK9IhFswLylL6vTHR m+vuPDuC652Yv3alJyw0cXQ7VaadHpvvOnPvqtaOnO/mTM7bRzq6iM8TCAkKkjhb93nJRZ LiHu48xrVwQf37xfS3b6o/71DURqr39wpqRN1iJMV/U50apmbtuqfHhyTZgsBw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1782325136; a=rsa-sha256; cv=none; b=rY6mcwP9I3y55JItVkBXW1wrzUV0N/Fqp4asjaV4jfnW0WUtq8RtZcAIcOrQvQbH0R/E7D NDa+7Y+/w9TYqLSC1gdUU4KX6UMceuqC/41haLJIXYR9X2a4ARJbPUH4OT4V82lq5QUOOD Oo76i4x0XbfmWkDQkedyQBOzsYOdXcSh26RoLlVy4CgsNTS6ZKmFEMA+7wDiFQtUqO61qB 7UBekd+Ba5x/3uipjztqpemTDGxKqP6+nItbtUDRp3QCAAXaNgK9xUshrDPaj7p8RGbDim Yl80OWb0ggBTd0xPYAL8hX/kfUlsW+z+L7rDSed27lwfpQp4CXffq7yKYtddjA== 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=1782325136; 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=KbxhcY4jZ4jHKSF2mbu+/yON36YN3/7O62ySq49ftyk=; b=DixvoaNJQxevM3r/fnDfp38CcjF+vtwlmbQtdyHFDFTrMs7O8s6sLhV+dMfwDl4bgOoDmg BZZjGQqs2LktkLvkkEP1+6pRo1WQIsBO7I4RWjMf61QDWkw3BHdFBMPI/58q0E1VYRk87P ALH3p3M48w0BlRu914UGCeuUOX3TNlmDm10hBlXzi0bMwagPmx/X0FlHwVeEsO82XVnQYX UmFwXkExQMMevWrK3N6A4Fr7yRuUDNolprgCQta0hGxHC5nIoMWpbMge96V8nJVCcHz7ke iWRvMvIbtZhp8ngmmKp+70fx1mpLHJPmXLiHuCf2OcWC6H8kerYcMfgPhD9wIg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4glqvN2W6DzXQj for ; Wed, 24 Jun 2026 18:18:56 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3a7f3 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 24 Jun 2026 18:18:51 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: ShengYi Hung Subject: git: 8452afeb5682 - main - hwpstate_intel: Use 8bit scale instead of percentage scale 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: aokblast X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8452afeb5682052b2533363ee3351d6d0e183e60 Auto-Submitted: auto-generated Date: Wed, 24 Jun 2026 18:18:51 +0000 Message-Id: <6a3c1f8b.3a7f3.be287d0@gitrepo.freebsd.org> The branch main has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=8452afeb5682052b2533363ee3351d6d0e183e60 commit 8452afeb5682052b2533363ee3351d6d0e183e60 Author: ShengYi Hung AuthorDate: 2026-02-26 06:26:06 +0000 Commit: ShengYi Hung CommitDate: 2026-06-24 18:18:20 +0000 hwpstate_intel: Use 8bit scale instead of percentage scale Reviewed by: olce Relnotes: yes Event: Halifax Hackathon 202606 Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D55629 --- share/man/man4/hwpstate_intel.4 | 6 ++-- sys/x86/cpufreq/hwpstate_intel.c | 71 +++++++--------------------------------- 2 files changed, 14 insertions(+), 63 deletions(-) diff --git a/share/man/man4/hwpstate_intel.4 b/share/man/man4/hwpstate_intel.4 index 5b9fbede855f..e5f98e054e37 100644 --- a/share/man/man4/hwpstate_intel.4 +++ b/share/man/man4/hwpstate_intel.4 @@ -22,7 +22,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd April 21, 2020 +.Dd June 24, 2026 .Dt HWPSTATE_INTEL 4 .Os .Sh NAME @@ -75,9 +75,9 @@ For example .It dev.hwpstate_intel.0.%parent: cpu0 .It Va dev.hwpstate_intel.%d.epp Energy/Performance Preference. -Valid values range from 0 to 100. +Valid values range from 0 to 255. Setting this field conveys a hint to the hardware regarding a preference towards -performance (at value 0), energy efficiency (at value 100), or somewhere in +performance (at value 0), energy efficiency (at value 255), or somewhere in between. .It dev.hwpstate_intel.0.epp: 0 .El diff --git a/sys/x86/cpufreq/hwpstate_intel.c b/sys/x86/cpufreq/hwpstate_intel.c index 7e9f53731e35..b18f1b674d22 100644 --- a/sys/x86/cpufreq/hwpstate_intel.c +++ b/sys/x86/cpufreq/hwpstate_intel.c @@ -254,53 +254,8 @@ out: return (ret); } -static inline int -percent_to_raw(int x) -{ - - MPASS(x <= 100 && x >= 0); - return (0xff * x / 100); -} - -/* - * Given x * 10 in [0, 1000], round to the integer nearest x. - * - * This allows round-tripping nice human readable numbers through this - * interface. Otherwise, user-provided percentages such as 25, 50, 75 get - * rounded down to 24, 49, and 74, which is a bit ugly. - */ -static inline int -round10(int xtimes10) -{ - return ((xtimes10 + 5) / 10); -} - -static inline int -raw_to_percent(int x) -{ - MPASS(x <= 0xff && x >= 0); - return (round10(x * 1000 / 0xff)); -} - -/* Range of MSR_IA32_ENERGY_PERF_BIAS is more limited: 0-0xf. */ -static inline int -percent_to_raw_perf_bias(int x) -{ - /* - * Round up so that raw values present as nice round human numbers and - * also round-trip to the same raw value. - */ - MPASS(x <= 100 && x >= 0); - return (((0xf * x) + 50) / 100); -} - -static inline int -raw_to_percent_perf_bias(int x) -{ - /* Rounding to nice human numbers despite a step interval of 6.67%. */ - MPASS(x <= 0xf && x >= 0); - return (((x * 20) / 0xf) * 5); -} +#define EPB_TO_EPP(x) ((x) * 17) +#define EPP_TO_EPB(x) ((x) >> 4) static int sysctl_epp_select(SYSCTL_HANDLER_ARGS) @@ -310,7 +265,6 @@ sysctl_epp_select(SYSCTL_HANDLER_ARGS) struct pcpu *pc; uint64_t epb; uint32_t val; - uint64_t req_cached; int ret; dev = oidp->oid_arg1; @@ -324,7 +278,6 @@ sysctl_epp_select(SYSCTL_HANDLER_ARGS) if (sc->hwp_pref_ctrl) { val = (sc->req & IA32_HWP_REQUEST_ENERGY_PERFORMANCE_PREFERENCE) >> 24; - val = raw_to_percent(val); } else { /* * If cpuid indicates EPP is not supported, the HWP controller @@ -341,35 +294,33 @@ sysctl_epp_select(SYSCTL_HANDLER_ARGS) } val = sc->hwp_energy_perf_bias & IA32_ENERGY_PERF_BIAS_POLICY_HINT_MASK; - val = raw_to_percent_perf_bias(val); + val = EPB_TO_EPP(val); } - MPASS(val >= 0 && val <= 100); + MPASS(val >= 0 && val <= 255); ret = sysctl_handle_int(oidp, &val, 0, req); if (ret || req->newptr == NULL) goto out; - if (val > 100) { + if (val > 255 || val < 0) { ret = EINVAL; goto out; } if (sc->hwp_pref_ctrl) { - val = percent_to_raw(val); - req_cached = sc->req = - ((sc->req & - ~IA32_HWP_REQUEST_ENERGY_PERFORMANCE_PREFERENCE) | - (val << 24u)); + sc->req = + ((sc->req & ~IA32_HWP_REQUEST_ENERGY_PERFORMANCE_PREFERENCE) + | (val << 24u)); if (sc->hwp_pkg_ctrl_en) ret = WRMSR_ON_CPU(dev, MSR_IA32_HWP_REQUEST_PKG, - req_cached); + sc->req); else ret = WRMSR_ON_CPU(dev, MSR_IA32_HWP_REQUEST, - req_cached); + sc->req); } else { - val = percent_to_raw_perf_bias(val); + val = EPP_TO_EPB(val); MPASS((val & ~IA32_ENERGY_PERF_BIAS_POLICY_HINT_MASK) == 0); sc->hwp_energy_perf_bias =