public inbox for linux-pm@vger.kernel.org
 help / color / mirror / Atom feed
* Runtime resume of children
@ 2009-11-22 22:13 Alan Stern
  2009-11-23 20:44 ` Rafael J. Wysocki
  0 siblings, 1 reply; 8+ messages in thread
From: Alan Stern @ 2009-11-22 22:13 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: Linux-pm mailing list

Rafael:

Here's the situation.  Device A has children B1, ..., Bn (possibly
others too).  I need to guarantee that whenever A is active, so are the
children.

One direction seems easy enough.  I can make the idle handler for the
B's first check that A and all the B's are ready to be suspended, then
suspend all the B's, and then suspend A.  This works because the PM and 
driver cores never directly suspend a device; all the do is notify the 
idle handler.

The other direction is a little more complicated.  Resumes initiated by
the bus code aren't troublesome; they can always be written so as to
resume the B's along with the A's.  The real problem arises when A is
resumed directly by the PM or driver cores.  For example, consider what
would happen when one of B1's children sends a remote wakeup signal.  
The PM core would automatically resume B1 and A, but there would be no
chance for the bus code to resume the other B's.

I can't make the runtime_resume method for A call pm_runtime_resume()  
for all the B's.  It would deadlock inside __pm_runtime_resume() where
the code to resume B1 waits for A's resume to complete.

Calling pm_request_resume() for all the B's instead isn't a very good
solution.  For one thing, it's silly to add latency by using a work
queue instead of just doing the resumes directly.  There are also
problems of synchronization, such as the fact that other code expects
all the B's to be resumed when A's resume completes.

Do you have any ideas on how to approach this?  How about allowing A's
runtime_resume method to set A->power.runtime_status to RPM_ACTIVE,
before it tries to resume the B's?  That would avoid the deadlock.

Alan Stern

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2009-11-27 13:20 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-22 22:13 Runtime resume of children Alan Stern
2009-11-23 20:44 ` Rafael J. Wysocki
2009-11-23 20:59   ` Alan Stern
2009-11-23 22:11     ` Rafael J. Wysocki
2009-11-25  9:41     ` Oliver Neukum
2009-11-25 20:46       ` Alan Stern
2009-11-26 16:47         ` Oliver Neukum
2009-11-27 13:20           ` Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox