My laptop computer has half a dozen unused PCI devices that could be put in the D3 power state, but they loiter in D0. The audio codec, the ethernet adapter, the unused PCI Express port, all the USB controllers, the IEEE1394 controller, the SD/MMC card controller, and the cardbus bridge all support D3(hot) power state. Currently it looks to me from browsing the code that D3 is only used in Linux when the whole machine is headed for S3, and the drivers are asked to suspend. I think the drivers should be able to enter D3 in other circumstances: * During pci_unregister_driver ... i.e. on module unload * When a network interface is downed * If the device is a bridge or hub with no downstream device * Whenever userspace requests D3 via sysfs So, what fundamental problem prevents me from, for example, calling pci_set_power_state() from ohci1394's __exit? -jwb --
The fact that Linux isn't using a device doesn't inherently mean that the system isn't using it. For example, the smbus controller will Potential problems with hotplugging? But sure, this kind of thing is Nothing I'm aware of. It sounds pretty safe in that case. But that would require you to load and unload the driver - better to have the driver loaded the entire time and make sure it does as much runtime power management as possible. I don't know enough about the firewire OHCI hardware, but can you power down most of the chip and still get hotplug events? -- Matthew Garrett | mjg59@srcf.ucam.org --
True. On my hardware, the smbus controller doesn't advertise power Very cool. netbsd-current apparently has this already (and a kernel-wide topological representation of PCI power management I sure would like to have it back, if only just for experimentation. Right now, I don't even know what kind of power savings could be achieved from D3, I'm just speculating. As you rightfully point out, it's possible that the driver could put the device into an ultra-low power saving state while still operating in D0, and that D3 savings No, you couldn't, but that isn't really the point. If I have my laptop on a transoceanic flight it may be useful for me to be able to set a power policy turning off all the extraneous junk on my machine, because I know /a priori/ that no hotplug events will happen. There's no way the kernel could know that, but userspace can tell the kernel to turn off an unneeded device. Think of it this way. Putting the machine into S3 prevents it from checking my email, but the capability exists. All I want to do is extend that concept to the PCI device level. Anyway, ohci1394 is pretty easy to understand, and it's not likely to hose up the system too badly, so I'm going to perform surgery there. -jwb --
The majority (though it's not universal) of modern hardware can be put into a state where you get most of the power savings of the entire part being in D3 but with little functional regression. While I'm not averse to adding features that aid the power user who's happy to poke around with individual drivers, this shouldn't be at the expense of implementing good runtime power management for the more common case. Not that I'm suggesting you're doing that, I just want to emphasise that you're working on a slightly more niche concern :) -- Matthew Garrett | mjg59@srcf.ucam.org --
Feel free to find it and reapply for your experiments. The file was in sysfs was called power/state, just grep git logs for that. -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html --
Well, patch that would put all unused devices into D3 would be certainly 'interesting'. Then we could measure power savings and Patch would be welcome. -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html --
