lkml.org 
[lkml]   [2013]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: [RFC PATCHv2 1/2] drivers: power: Add watchdog timer to catch drivers which lockup during suspend/resume.
Date
On Tuesday, May 28, 2013 11:26:09 AM Zoran Markovic wrote:
> > What about this:
> > - Add one more list_head to struct dev_pm_info.
> > - Make dpm_prepare() create a new list for the next steps instead of moving
> > devices out of dpm_list.
> > - Start an async work to carry out dpm_suspend() and make the main thread
> > do wait_for_completion_timeout() for every device in dpm_list (in the
> > reverse order).
> > - If it times out, mark the device in question as unusable, possibly resume
> > the already suspended devices (except for descendants of the failed one)
> > and abort the suspend. Return a specific error code to user space so that
> > it knows what happened. [You can make this step configurable to BUG()
> > instead of doing all those things if you think that will be more useful for
> > platforms you care about.]
> > - Disable future suspends.
> > And analogously for resume.
> >
> > That should allow people to investigate what happened on a system that
> > (hopefully) is not completely dead and you still can have your "reboot if
> > suspend hangs" feature if you like.
>
> I looked into implementing this. The problem that I encountered is
> that there is no reliable way of canceling an async task, and hence
> the asynchronous __device_suspend() would be left racing with a
> recovery from a suspend timeout.

Why exactly would it be racing? We wouldn't call device_resume() for
the device that timed out (and its descendants).

> We could do cancel_work_sync() as a recovery, but that call blocks until the
> running async task is flushed, which might never happen. So doing a panic()
> is pretty much the only option for recovering.

Well, its usefulness is quite limited, then. That said I'm still not convinced
that this actually is the case.

Thanks,
Rafael


--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.


\
 
 \ /
  Last update: 2013-05-28 23:01    [W:0.664 / U:0.056 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site