[linux-pm] /sys/devices/.../power/state broken?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 12 Dec 2006, Brice Goglin wrote:

> Hi,
> 
> I know that .../power/state files are deprecated, but I like using them
> for basic testing of a driver's suspend/resume routines. Anyway, echoing
> something in the .../power/state in current -git does not seem to work
> anymore.

It does work, but the results depend on the device you want to suspend.  
For instance, USB devices have no problem at all.  PCI devices will ignore
your writes because .../power/state can't handle the new multi-stage
suspend and resume mechanism.

I've been using the patch below to force my tests to work.  The fact 
remains, this way of doing things won't be valid much longer.

>  For instance, the driver's suspend routine is not called
> anymore  when writing 3 while it was at least in 2.6.17 and 2.6.18. And
> reading the contents of the file afterwards now returns 0 while it
> seemed to return 2 before.
> 
> I didn't have time to git-bisect the problem so far, I will if nobody
> has any idea.
> 
> And if somebody knows what to use instead of .../power/state to test a
> driver's suspend/resume, I'd be happy to hear it too. The explanation in
> feature-removal-schedule.txt did not help a lot, neither did the thread
> I found on linux-pm :)

There is no general-purpose replacement.  Probably each bus will end up 
implementing its own special-purpose sysfs interface for suspend/resume 
(or not, as the case may be).

Alan Stern


Index: usb-2.6/drivers/base/power/sysfs.c
===================================================================
--- usb-2.6.orig/drivers/base/power/sysfs.c
+++ usb-2.6/drivers/base/power/sysfs.c
@@ -45,10 +45,6 @@ static ssize_t state_store(struct device
 	pm_message_t state;
 	int error = -EINVAL;
 
-	/* disallow incomplete suspend sequences */
-	if (dev->bus && (dev->bus->suspend_late || dev->bus->resume_early))
-		return error;
-
 	state.event = PM_EVENT_SUSPEND;
 	/* Older apps expected to write "3" here - confused with PCI D3 */
 	if ((n == 1) && !strcmp(buf, "3"))



[Index of Archives]     [Linux ACPI]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [CPU Freq]     [Kernel Newbies]     [Fedora Kernel]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux