Re: [RFC Disable suspend on a specific device] This is a little change in linux power scheme

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

 



On Wednesday 08 April 2009, Alan Stern wrote:
> On Tue, 7 Apr 2009, Rafael J. Wysocki wrote:
> 
> > Well, in fact I wanted to know your opinion about this patch. :-)
> 
> Clearly this patch isn't appropriate for regular desktop or laptop 
> systems.  I'm not so sure it's the best approach for embedded systems 
> either.
> 
> Part of the problem is the set of devices which would remain 
> unsuspended: the device for which the flag is set plus everything below 
> it in the device tree.  This goes against the way the kernel has 
> behaved up to now, which is that a device may not be suspended before 
> all its children are suspended.
> 
> In addition, the patch appears to ignore issues involving clock and
> voltage domains.  These things often are not reflected directly in the 
> structure of the device tree.
> 
> At a more fundamental level, this change points out a real weakness in
> the way suspend is currently implemented.  From the PM core's point of
> view, system suspend involves two main activities:
> 
> 	Telling drivers to stop using their devices, and
> 
> 	Turning off (or reducing) power to the devices.
> 
> The PM framework does not treat these separately; a single suspend
> method call is used for both purposes.  But more and more we are seeing
> that they should be, especially on non-ACPI systems.  This patch is, in
> a roundabout way, an attempt to do so.

Well, with the recent changes of the PM framework that have just gone into
.30-rc1 the "late" suspend call may in fact be regarded as a "turn off" or
"power down" one, while the "regular" suspend callback has become a "stop using
the device" one.

> Part of the problem is that people tend to think of "suspend" as
> meaning "suspend the system".  However a much more flexible -- dare I
> say more valid? -- point of view is "suspend the CPUs and at the same
> time remove (or reduce) power for devices that will no longer need it".  
> In other words, system suspend really is just a kind of runtime
> suspend, in which the devices being suspended are the CPUs and the
> sysdevs.
> 
> Obviously this is an oversimplification, but I think it's a useful 
> approach.

Well, unfortunately ACPI makes the distinction between suspending devices
in order to put the system into a sleep state and suspending devices at run
time (ACPI requires us to specify the target sleep state of the whole system in
advance and presumably the outcome of some AML routines used for suspending
devices may depend on this).  That's why the people who work primarily on ACPI
systems regard suspend as meaning "suspend the system".

> Just think about it.  Suppose every driver supported autosuspend.  
> When a driver received a notification that the CPU was going to be
> suspended, it would know that its device wasn't going to need power
> (since the device can't do anything useful without the driver telling
> it what to do) and so it would automatically power the device down,
> while also arranging not to access the device any more.  Thus the
> suspend method calls would really exist only to let drivers know that
> their code was going to stop running (since the CPU was about to stop
> all activity); the device-power management part would merely be a side
> effect.

Yes, I think this is the situation we should be targeting, but we seem to be
very far from it at the moment. :-)

> And then, of course, drivers on embedded systems would be smart enough 
> to know that some of the devices _should_ remain powered up, because 
> they could still be useful even when the CPU wasn't running.  The only 
> obstacle is letting the drivers know when their devices actually _are_ 
> in use -- sometimes this is apparent only at the application level.
> 
> So the patch should be rewritten.  Change the name of the new attribute
> to something like "autonomous" or "in_use", and don't make the PM core 
> skip devices when the attribute is set.  Instead, change the relevant 
> drivers.  Their suspend methods should arrange for the driver to stop 
> using the device, but if the attribute is set then the device should 
> not be powered down.

Good idea IMO.

Thanks a lot for the excellent comment. :-)

Best,
Rafael
_______________________________________________
linux-pm mailing list
linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linux-foundation.org/mailman/listinfo/linux-pm

[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