https://bugzilla.kernel.org/show_bug.cgi?id=221160
Bug ID: 221160
Summary: [REGRESSION] ACPI: processor_driver: CPU idle power
initialization skipped in 6.19.5, leading to +10W idle
power consumption
Product: ACPI
Version: 2.5
Hardware: All
OS: Linux
Status: NEW
Severity: high
Priority: P3
Component: Power-Processor
Assignee: [email protected]
Reporter: [email protected]
Regression: No
Created attachment 309499
--> https://bugzilla.kernel.org/attachment.cgi?id=309499&action=edit
acpi_repair_regression.patch
Component: ACPI / Power-Processor
Kernel Version: 6.19.5 (Regression from 6.19.3)
Hardware: AMD Zen 5 (Ryzen 9 9950X)
Full Description:
I am reporting a significant power management regression introduced in kernel
6.19.5, specifically observed on an AMD Zen 5 system.
In kernel 6.19.5, the 'acpi_idle' driver fails to initialize, leaving
'/sys/devices/system/cpu/cpuidle/current_driver' at "none". This prevents the
processor from entering deep C-states (C2/C3), resulting in significantly
higher idle power consumption and the total absence of C-state statistics in
'turbostat'.
Technical Analysis:
The issue is caused by a logic change in 'drivers/acpi/processor_driver.c'
within the function '__acpi_processor_start()'.
- Kernel 6.19.3 (Working):
if (!cpuidle_get_driver() || cpuidle_get_driver() == &acpi_idle_driver)
This allowed 'acpi_processor_power_init(pr)' to execute when no driver was
yet loaded (returning NULL).
- Kernel 6.19.5 (Broken):
if (cpuidle_get_driver() == &acpi_idle_driver)
This creates a "Chicken-and-Egg" deadlock. At early boot,
'cpuidle_get_driver()' returns NULL. Therefore, the condition is false, and
'acpi_processor_power_init(pr)'—the function responsible for registering the
'acpi_idle_driver'—is skipped entirely.
Power Consumption Impact (measured via turbostat):
Testing on a Ryzen 9 9950X shows a drastic difference in idle power draw:
1. Stock 6.19.5: ~44.38W idle (C-states missing in turbostat, driver: none)
2. Patched 6.19.5 (reverted logic): ~34.59W idle (C3 residency ~94%, driver:
acpi_idle)
The bug results in a ~10W power penalty for idling because the hardware is
stuck in shallow states.
Steps to Reproduce:
1. Boot a vanilla 6.19.5 kernel on an AMD Zen 5 platform.
2. Check 'cat /sys/devices/system/cpu/cpuidle/current_driver'. It will show
"none".
3. Observe 'turbostat' output: C-state columns are missing and PkgWatt is
significantly higher than on 6.19.3.
Proposed Fix:
Reverting the logic change in 'drivers/acpi/processor_driver.c' to again check
for '!cpuidle_get_driver()' restores correct behavior.
I have attached:
- acpi_repair_regression.patch (The fix/revert)
- 6.19.5-vanilla_tstat.txt (Turbostat output showing the bug)
- 6.19.5-vanilla_repariert_tstat.txt (Turbostat output with the fix applied)
--
You may reply to this email to add a comment.
You are receiving this mail because:
You are watching the assignee of the bug.
_______________________________________________
acpi-bugzilla mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/acpi-bugzilla