The PCI subsystem pull for the Linux 3.2 kernel
was published on Friday evening. If you were hoping it would rework PCI-E ASPM (Active-State Power Management) to be more like the Windows implementation or for more PCI drivers to be setting the bits directly to support it (effectively white-listing drivers/hardware), it didn't happen yet.
The main PCI pull request for Linux 3.2 has some MPS (Maximum Payload Size) and PASID (Process Address Space ID) stuff, but nothing to improve the Linux PCI-E ASPM situation.
The only PCI power management related changes in this pull is extending PME (PCI Power Management Events) polling to all PCI devices. The extended PME polling is talked about in , but it's not related to the ASPM problems.
By now most users should be aware that the big Linux power regression
in the Linux 2.6.38 kernel that I spotted prior to the Ubuntu 11.04 release I ended up tracking to be due to a change in PCI-E ASPM
. With Linux 2.6.38+, unless Active-State Power Management support is explicitly advertised by the hardware's BIOS (or the user overrides the support when booting the kernel), it's no longer being enabled.
To address this issue, the thinking of kernel developers
is that they will need to determine a better way to determine proper PCI-E ASPM support (such as mirroring how Microsoft Windows treats ASPM detection and handling) or be manually having individual component drivers flag whether or not the hardware installed can handle this power management feature that's part of the PCI Express specification.
Unfortunately, nothing ASPM-related has landed for Linux 3.2. THe Linux 3.2 PCI pull request can be viewed at LKML.org
Yes, there are numerous other Linux power problems too. Here's one that just hit my email inbox over the night from a Phoronix reader.
I've been testing the it87 driver and noticed my Vcore was 1.08 instead of 0.96 when idle. At first I thought it was a driver bug.
Noticed cpufreq-info saying I was at 2.6 GHz (I have a core i3 2100, range 1.6-3.1 GHz) when idle.
I come to find out that the ondemand, powersave and userspace governors (I only tested those) can't get the CPU under 2.6 GHz. cpufreq-info tells me so and the CPU temperatures confirm it. Vcore, temperatures and cpufreq say I'm at 2.6 GHz with Linux 3.1 when I ask for 1.6. Linux 3.0.7 works fine. With Linux 3.1 anything under 2.6 gives me 2.6, 2.6-3.1 GHz speeds work as expected. There is an unpassable floor at 2.6.
Just thought I'd let you know, that a really NASTY regression made it in.