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

Reply via email to