All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] cpufreq: Avoid fallback values in cpuinfo_avg_freq
@ 2026-10-19  6:53 Jackie Liu
  2026-10-22 11:50   ` [LTP] " kernel test robot
  0 siblings, 1 reply; 3+ messages in thread
From: Jackie Liu @ 2026-10-19  6:53 UTC (permalink / raw)
  To: tglx; +Cc: mingo, bp, dave.hansen, x86, linux-pm

From: Jackie Liu <liuyun01@kylinos.cn>

On x86, arch_freq_get_on_cpu() can return the requested or nominal
frequency when hardware feedback is unavailable. cpuinfo_avg_freq then
reports fallback values as hardware averages, even without APERF/MPERF.

Use a separate sampling hook for the attribute and its support probe:
return -EOPNOTSUPP without APERF/MPERF and -EAGAIN for zero MPERF deltas
or stale samples. Preserve the scaling_cur_freq and /proc/cpuinfo fallback
and the existing ARM64 AMU implementation.

Fixes: fbb4a4759b54 ("cpufreq: Introduce an optional cpuinfo_avg_freq sysfs entry")
Signed-off-by: Jackie Liu <liuyun01@kylinos.cn>
---
 arch/x86/kernel/cpu/aperfmperf.c | 18 +++++++++++++-----
 drivers/cpufreq/cpufreq.c        |  9 +++++++--
 include/linux/cpufreq.h          |  1 +
 3 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/cpu/aperfmperf.c b/arch/x86/kernel/cpu/aperfmperf.c
index 7ffc78d5ebf2..fa8376d9ce94 100644
--- a/arch/x86/kernel/cpu/aperfmperf.c
+++ b/arch/x86/kernel/cpu/aperfmperf.c
@@ -503,15 +503,15 @@ void arch_scale_freq_tick(void)
  */
 #define MAX_SAMPLE_AGE	((unsigned long)HZ / 50)
 
-int arch_freq_get_on_cpu(int cpu)
+int arch_freq_get_avg_on_cpu(int cpu)
 {
 	struct aperfmperf *s = per_cpu_ptr(&cpu_samples, cpu);
-	unsigned int seq, freq;
+	unsigned int seq;
 	unsigned long last;
 	u64 acnt, mcnt;
 
 	if (!cpu_feature_enabled(X86_FEATURE_APERFMPERF))
-		goto fallback;
+		return -EOPNOTSUPP;
 
 	do {
 		seq = raw_read_seqcount_begin(&s->seq);
@@ -525,11 +525,19 @@ int arch_freq_get_on_cpu(int cpu)
 	 * which covers idle and NOHZ full CPUs.
 	 */
 	if (!mcnt || (jiffies - last) > MAX_SAMPLE_AGE)
-		goto fallback;
+		return -EAGAIN;
 
 	return div64_u64((cpu_khz * acnt), mcnt);
+}
+
+int arch_freq_get_on_cpu(int cpu)
+{
+	int avg_freq = arch_freq_get_avg_on_cpu(cpu);
+	unsigned int freq;
+
+	if (avg_freq >= 0)
+		return avg_freq;
 
-fallback:
 	freq = cpufreq_quick_get(cpu);
 	return freq ? freq : cpu_khz;
 }
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 54dde8419bdc..2e44b6ee14c9 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -705,9 +705,14 @@ __weak int arch_freq_get_on_cpu(int cpu)
 	return -EOPNOTSUPP;
 }
 
+__weak int arch_freq_get_avg_on_cpu(int cpu)
+{
+	return arch_freq_get_on_cpu(cpu);
+}
+
 static inline bool cpufreq_avg_freq_supported(struct cpufreq_policy *policy)
 {
-	return arch_freq_get_on_cpu(policy->cpu) != -EOPNOTSUPP;
+	return arch_freq_get_avg_on_cpu(policy->cpu) != -EOPNOTSUPP;
 }
 
 static ssize_t show_scaling_cur_freq(struct cpufreq_policy *policy, char *buf)
@@ -769,7 +774,7 @@ static ssize_t show_cpuinfo_cur_freq(struct cpufreq_policy *policy,
 static ssize_t show_cpuinfo_avg_freq(struct cpufreq_policy *policy,
 				     char *buf)
 {
-	int avg_freq = arch_freq_get_on_cpu(policy->cpu);
+	int avg_freq = arch_freq_get_avg_on_cpu(policy->cpu);
 
 	if (avg_freq > 0)
 		return sysfs_emit(buf, "%u\n", avg_freq);
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index d3d0d9d02aa4..925a3d3b6c31 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -1228,6 +1228,7 @@ static inline int of_perf_domain_get_sharing_cpumask(int pcpu, const char *list_
 #endif
 
 extern int arch_freq_get_on_cpu(int cpu);
+extern int arch_freq_get_avg_on_cpu(int cpu);
 
 #ifndef arch_set_freq_scale
 static __always_inline
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] cpufreq: Avoid fallback values in cpuinfo_avg_freq
  2026-10-19  6:53 [PATCH] cpufreq: Avoid fallback values in cpuinfo_avg_freq Jackie Liu
@ 2026-10-22 11:50   ` kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2026-10-22 11:50 UTC (permalink / raw)
  To: Jackie Liu
  Cc: oe-lkp, lkp, linux-kernel, linux-pm, ltp, tglx, mingo, bp,
	dave.hansen, x86, yi1.lai


Hello,

kernel test robot noticed "ltp.runpwtests03.fail" on:

commit: e5f9d99762e285664eea5ecbab004c8444930f22 ("[PATCH] cpufreq: Avoid fallback values in cpuinfo_avg_freq")
url: https://github.com/intel-lab-lkp/linux/commits/Jackie-Liu/cpufreq-Avoid-fallback-values-in-cpuinfo_avg_freq/20261019-145358
base: https://git.kernel.org/cgit/linux/kernel/git/rafael/linux-pm.git linux-next patch link: https://lore.kernel.org/all/20261019065358.66115-1-liu.yun@linux.dev/
patch subject: [PATCH] cpufreq: Avoid fallback values in cpuinfo_avg_freq

in testcase: ltp
version: ltp-x86_64-1255a3be5-1_20261017 with following parameters:

	test: power_management_tests


config: x86_64-rhel-9.4-ltp
compiler: gcc-14
test machine: 8 threads 1 sockets Intel(R) Core(TM) i7-4790T CPU @ 2.70GHz (Haswell) with 16G memory

(please refer to attached dmesg/kmsg for entire log/backtrace)



If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <yi1.lai@intel.com>
| Closes: https://lore.kernel.org/oe-lkp/202610221936.40b4334f-lkp@intel.com


PATH=/lkp/benchmarks/ltp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/lkp/lkp/src/bin
2026-10-21 16:24:03 cd /lkp/benchmarks/ltp
2026-10-21 16:24:03 export LTP_RUNTIME_MUL=2
2026-10-21 16:24:03 export LTPROOT=/lkp/benchmarks/ltp
2026-10-21 16:24:03 kirk -f power_management_tests Host information
	Hostname:   lkp-hsw-d05
	Python:     3.13.5 (main, Jun 13 2026, 14:18:01) [GCC 14.2.0]
	Directory:  /tmp/kirk.root/tmp_2s1ns12

Connecting to SUT: default

Suite: power_management_tests
─────────────────────────────
 [1;37mcpufreq_intel:  [0m [1;32mpass [0m |  [1;33mtainted [0m  (0.282s)
 [1;37mrfim01:  [0m [1;36mskip [0m |  [1;33mtainted [0m  (0.017s)
 [1;37mhigh_freq_hwp_cap_cppc:  [0m [1;36mskip [0m |  [1;33mtainted [0m  (0.015s)
 [1;37mrunpwtests03:  [0m [1;31mfail [0m |  [1;33mtainted [0m  (0.532s)
 [1;37mrunpwtests04:  [0m [1;32mpass [0m |  [1;33mtainted [0m  (0.011s)
 [1;37mrunpwtests06:  [0m [1;32mpass [0m |  [1;33mtainted [0m  (0.048s)

Execution time: 1.103s

Disconnecting from SUT: default

Target information
──────────────────
Kernel:   Linux 7.3.0-rc7+ #1 SMP PREEMPT_DYNAMIC Thu Oct 22 00:04:36 CST 2026
Cmdline:  ip=::::lkp-hsw-d05::dhcp
          root=/dev/ram0
          RESULT_ROOT=/result/ltp/power_management_tests/lkp-hsw-d05/debian-13-x86_64-20250902.cgz/x86_64-rhel-9.4-ltp/gcc-14/e5f9d99762e285664eea5ecbab004c8444930f22/0
          BOOT_IMAGE=/pkg/linux/x86_64-rhel-9.4-ltp/gcc-14/e5f9d99762e285664eea5ecbab004c8444930f22/vmlinuz-7.3.0-rc7+
          branch=internal-devel/devel-hourly-20261020-060911
          job=/lkp/jobs/scheduled/lkp-hsw-d05/ltp-power_management_tests-debian-13-x86_64-20250902.cgz-e5f9d99762e2-20261022-15031-ddtgwr-1.yaml
          user=lkp
          ARCH=x86_64
          kconfig=x86_64-rhel-9.4-ltp
          commit=e5f9d99762e285664eea5ecbab004c8444930f22
          intremap=posted_msi
          max_uptime=7200
          LKP_SERVER=internal-lkp-server
          nokaslr
          selinux=0
          debug
          apic=debug
          sysrq_always_enabled
          rcupdate.rcu_cpu_stall_timeout=100
          net.ifnames=0
          printk.devkmsg=on
          panic=-1
          softlockup_panic=1
          nmi_watchdog=panic
          oops=panic
          load_ramdisk=2
          prompt_ramdisk=0
          drbd.minor_count=8
          systemd.log_level=err
          ignore_loglevel
          console=tty0
          earlyprintk=ttyS0,115200
          console=ttyS0,115200
          vga=normal
          rw
          keep_initrds=/osimage/pkg/debian-13-x86_64-20250902.cgz/ltp-x86_64-1255a3be5-1_20261017.cgz
Machine:  unknown
Arch:     x86_64
RAM:      14035028 kB
Swap:     0 kB
Distro:   debian 13

────────────────────────
      TEST SUMMARY
────────────────────────
Suite:   power_management_tests
Runtime: 0.905s
Runs:    6

Results:
    Passed:   194
    Failed:   1
    Broken:   0
    Skipped:  2
    Warnings: 0

 [1;31mFailures: [0m
    • runpwtests03

Session stopped
LTP test details
----------------
runpwtests03: Power_Management03 1 TFAIL: CPUFREQ sysfs tests



The kernel config and materials to reproduce are available at:
https://download.01.org/0day-ci/archive/20261022/202610221936.40b4334f-lkp@intel.com



--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [LTP] [PATCH] cpufreq: Avoid fallback values in cpuinfo_avg_freq
@ 2026-10-22 11:50   ` kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2026-10-22 11:50 UTC (permalink / raw)
  To: Jackie Liu
  Cc: x86, lkp, linux-pm, dave.hansen, linux-kernel, mingo, bp, tglx,
	yi1.lai, oe-lkp, ltp


Hello,

kernel test robot noticed "ltp.runpwtests03.fail" on:

commit: e5f9d99762e285664eea5ecbab004c8444930f22 ("[PATCH] cpufreq: Avoid fallback values in cpuinfo_avg_freq")
url: https://github.com/intel-lab-lkp/linux/commits/Jackie-Liu/cpufreq-Avoid-fallback-values-in-cpuinfo_avg_freq/20261019-145358
base: https://git.kernel.org/cgit/linux/kernel/git/rafael/linux-pm.git linux-next patch link: https://lore.kernel.org/all/20261019065358.66115-1-liu.yun@linux.dev/
patch subject: [PATCH] cpufreq: Avoid fallback values in cpuinfo_avg_freq

in testcase: ltp
version: ltp-x86_64-1255a3be5-1_20261017 with following parameters:

	test: power_management_tests


config: x86_64-rhel-9.4-ltp
compiler: gcc-14
test machine: 8 threads 1 sockets Intel(R) Core(TM) i7-4790T CPU @ 2.70GHz (Haswell) with 16G memory

(please refer to attached dmesg/kmsg for entire log/backtrace)



If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <yi1.lai@intel.com>
| Closes: https://lore.kernel.org/oe-lkp/202610221936.40b4334f-lkp@intel.com


PATH=/lkp/benchmarks/ltp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/lkp/lkp/src/bin
2026-10-21 16:24:03 cd /lkp/benchmarks/ltp
2026-10-21 16:24:03 export LTP_RUNTIME_MUL=2
2026-10-21 16:24:03 export LTPROOT=/lkp/benchmarks/ltp
2026-10-21 16:24:03 kirk -f power_management_tests Host information
	Hostname:   lkp-hsw-d05
	Python:     3.13.5 (main, Jun 13 2026, 14:18:01) [GCC 14.2.0]
	Directory:  /tmp/kirk.root/tmp_2s1ns12

Connecting to SUT: default

Suite: power_management_tests
─────────────────────────────
 [1;37mcpufreq_intel:  [0m [1;32mpass [0m |  [1;33mtainted [0m  (0.282s)
 [1;37mrfim01:  [0m [1;36mskip [0m |  [1;33mtainted [0m  (0.017s)
 [1;37mhigh_freq_hwp_cap_cppc:  [0m [1;36mskip [0m |  [1;33mtainted [0m  (0.015s)
 [1;37mrunpwtests03:  [0m [1;31mfail [0m |  [1;33mtainted [0m  (0.532s)
 [1;37mrunpwtests04:  [0m [1;32mpass [0m |  [1;33mtainted [0m  (0.011s)
 [1;37mrunpwtests06:  [0m [1;32mpass [0m |  [1;33mtainted [0m  (0.048s)

Execution time: 1.103s

Disconnecting from SUT: default

Target information
──────────────────
Kernel:   Linux 7.3.0-rc7+ #1 SMP PREEMPT_DYNAMIC Thu Oct 22 00:04:36 CST 2026
Cmdline:  ip=::::lkp-hsw-d05::dhcp
          root=/dev/ram0
          RESULT_ROOT=/result/ltp/power_management_tests/lkp-hsw-d05/debian-13-x86_64-20250902.cgz/x86_64-rhel-9.4-ltp/gcc-14/e5f9d99762e285664eea5ecbab004c8444930f22/0
          BOOT_IMAGE=/pkg/linux/x86_64-rhel-9.4-ltp/gcc-14/e5f9d99762e285664eea5ecbab004c8444930f22/vmlinuz-7.3.0-rc7+
          branch=internal-devel/devel-hourly-20261020-060911
          job=/lkp/jobs/scheduled/lkp-hsw-d05/ltp-power_management_tests-debian-13-x86_64-20250902.cgz-e5f9d99762e2-20261022-15031-ddtgwr-1.yaml
          user=lkp
          ARCH=x86_64
          kconfig=x86_64-rhel-9.4-ltp
          commit=e5f9d99762e285664eea5ecbab004c8444930f22
          intremap=posted_msi
          max_uptime=7200
          LKP_SERVER=internal-lkp-server
          nokaslr
          selinux=0
          debug
          apic=debug
          sysrq_always_enabled
          rcupdate.rcu_cpu_stall_timeout=100
          net.ifnames=0
          printk.devkmsg=on
          panic=-1
          softlockup_panic=1
          nmi_watchdog=panic
          oops=panic
          load_ramdisk=2
          prompt_ramdisk=0
          drbd.minor_count=8
          systemd.log_level=err
          ignore_loglevel
          console=tty0
          earlyprintk=ttyS0,115200
          console=ttyS0,115200
          vga=normal
          rw
          keep_initrds=/osimage/pkg/debian-13-x86_64-20250902.cgz/ltp-x86_64-1255a3be5-1_20261017.cgz
Machine:  unknown
Arch:     x86_64
RAM:      14035028 kB
Swap:     0 kB
Distro:   debian 13

────────────────────────
      TEST SUMMARY
────────────────────────
Suite:   power_management_tests
Runtime: 0.905s
Runs:    6

Results:
    Passed:   194
    Failed:   1
    Broken:   0
    Skipped:  2
    Warnings: 0

 [1;31mFailures: [0m
    • runpwtests03

Session stopped
LTP test details
----------------
runpwtests03: Power_Management03 1 TFAIL: CPUFREQ sysfs tests



The kernel config and materials to reproduce are available at:
https://download.01.org/0day-ci/archive/20261022/202610221936.40b4334f-lkp@intel.com



--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki



-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-10-22 11:50 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-19  6:53 [PATCH] cpufreq: Avoid fallback values in cpuinfo_avg_freq Jackie Liu
2026-10-22 11:50 ` kernel test robot
2026-10-22 11:50   ` [LTP] " kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.