All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Colin Cross <ccross@android.com>
Cc: Alan Stern <stern@rowland.harvard.edu>,
	linux-kernel@vger.kernel.org,
	linux-pm@lists.linux-foundation.org, Pavel Machek <pavel@ucw.cz>,
	Len Brown <len.brown@intel.com>,
	"Greg Kroah-Hartman" <gregkh@suse.de>,
	Randy Dunlap <randy.dunlap@oracle.com>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH] PM: Prevent waiting forever on asynchronous resume after abort
Date: Fri, 3 Sep 2010 02:35:00 +0200	[thread overview]
Message-ID: <201009030235.00270.rjw@sisk.pl> (raw)
In-Reply-To: <AANLkTinbgShA+m3sdXrYAvW7ctCExp+fZv5EMuYSMLiE@mail.gmail.com>

On Friday, September 03, 2010, Colin Cross wrote:
> On Thu, Sep 2, 2010 at 4:09 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> > On Friday, September 03, 2010, Colin Cross wrote:
> >> On Thu, Sep 2, 2010 at 2:34 PM, Alan Stern <stern@rowland.harvard.edu> wrote:
> >> > On Thu, 2 Sep 2010, Colin Cross wrote:
> >> >
> >> >> That would work, but I still don't see why it's better.  With either
> >> >> of your changes, the power.completion variable is storing state, and
> >> >> not just used for notification.  However, the exact meaning of that
> >> >> state is unclear, especially during the transition from an aborted
> >> >> suspend to resume, and the state is duplicating power.status.  Setting
> >> >> it to complete in dpm_prepare is especially confusing, because at that
> >> >> point nothing is completed, it hasn't even been started.
> >> >
> >> > The state being waited for varies from time to time and is only
> >> > partially related to power.status.  Instead of using a completion I
> >> > suppose we could have used a new "transition_complete" variable
> >> > together with a waitqueue.  Would you prefer that?  It's effectively
> >> > the same thing as a completion, but without the nice packaging already
> >> > provided by the kernel.
> >> No, that doesn't change anything.  What I'd prefer to see is a
> >> wait_for_condition on the desired state of the parent.  As is,
> >> power.completion means one thing during suspend (the device has
> >> started, but not finished, suspending), and a different thing during
> >> resume (the device has not finished resuming, and may not have started
> >> resuming).  That difference is exactly what caused the bug - the
> >> completion has to be set on init so that it is set before the device
> >> starts suspend.
> >
> > Not really.  The bug is there, because my analysis of the suspend error code
> > path was wrong.  Sorry about that, but it has nothing to do with the "different
> > meaning" of the completions during suspend and resume.
> >
> > The completions here are simply used to enforce a specific ordering of
> > operations, nothing more.  They have no meaning beyond that.
>
> The completion variable maintains state.

So what?  Locks also maintain state.

> It has meaning whether or not you want it to.  Leaving it as a completion
> variable requires that you manage that state, which is difficult considering
> there is no documentation and no clear idea in the code of exactly when that
> state is set or clear.

Please run "git show 5af84b82701a96be4b033aaa51d86c72e2ded061" and read the
changelog.  It's described in there quite clearly (I think).

> It would be much cleaner to use a wait queue, and use
> wait_on_condition to wait for the device to be in the desired state.

Well, in fact that was used in one version of the patchset that introduced
asynchronous suspend-resume, but it was rejected by Linus, because it was
based on non-standard synchronization.  The Linus' argument, that I agreed
with, was that standard snychronization constructs, such as locks or
completions, were guaranteed to work accross different architectures and thus
were simply _safer_ to use than open-coded synchronization that you seem to be
preferring.

Completions simply allowed us to get the desired behavior with the least
effort and that's why we used them.

Thanks,
Rafael

  parent reply	other threads:[~2010-09-03  0:36 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-02  2:54 [PATCH] PM: Prevent waiting forever on asynchronous resume after abort Colin Cross
2010-09-02 13:50 ` Alan Stern
2010-09-02 13:50 ` Alan Stern
2010-09-02 19:46   ` Rafael J. Wysocki
2010-09-02 19:46   ` Rafael J. Wysocki
2010-09-02 20:24     ` Colin Cross
2010-09-02 20:30       ` Rafael J. Wysocki
2010-09-02 20:30       ` Rafael J. Wysocki
2010-09-02 20:45       ` Alan Stern
2010-09-02 20:45       ` Alan Stern
2010-09-02 21:01         ` Colin Cross
2010-09-02 21:01         ` Colin Cross
2010-09-02 21:06           ` Rafael J. Wysocki
2010-09-02 21:06             ` Rafael J. Wysocki
2010-09-02 21:34           ` Alan Stern
2010-09-02 22:45             ` Colin Cross
2010-09-02 23:09               ` Rafael J. Wysocki
2010-09-03  0:14                 ` Colin Cross
2010-09-03  0:14                 ` Colin Cross
2010-09-03  0:35                   ` Rafael J. Wysocki
2010-09-03  0:35                   ` Rafael J. Wysocki [this message]
2010-09-03  1:54                     ` Colin Cross
2010-09-03  1:54                     ` Colin Cross
2010-09-03  2:42                       ` Alan Stern
2010-09-03  4:30                         ` Colin Cross
2010-09-03 14:04                           ` Alan Stern
2010-09-03 16:48                             ` Colin Cross
2010-09-03 17:31                               ` Alan Stern
2010-09-03 17:31                               ` Alan Stern
2010-09-16 20:36                                 ` [PATCH] PM: Fix potential issue with failing asynchronous suspend (was: Re: [PATCH] PM: Prevent waiting ...) Rafael J. Wysocki
2010-09-16 20:36                                 ` Rafael J. Wysocki
2010-09-16 21:00                                   ` Alan Stern
2010-09-16 21:24                                     ` Rafael J. Wysocki
2010-09-16 21:24                                     ` Rafael J. Wysocki
2010-09-16 21:00                                   ` Alan Stern
2010-09-03 16:48                             ` [PATCH] PM: Prevent waiting forever on asynchronous resume after abort Colin Cross
2010-09-03 14:04                           ` Alan Stern
2010-09-03  4:30                         ` Colin Cross
2010-09-03  2:42                       ` Alan Stern
2010-09-02 23:09               ` Rafael J. Wysocki
2010-09-02 22:45             ` Colin Cross
2010-09-02 21:34           ` Alan Stern
2010-09-02 21:05       ` Rafael J. Wysocki
2010-09-02 21:05         ` Rafael J. Wysocki
2010-09-02 21:31         ` Colin Cross
2010-09-02 21:40           ` Rafael J. Wysocki
2010-09-02 22:59             ` [PATCH v2] " Colin Cross
2010-09-02 23:25               ` Rafael J. Wysocki
2010-09-02 23:25                 ` Rafael J. Wysocki
2010-09-02 22:59             ` Colin Cross
2010-09-02 21:40           ` [PATCH] " Rafael J. Wysocki
2010-09-02 21:31         ` Colin Cross
2010-09-02 20:24     ` Colin Cross
2010-09-02 20:27     ` Alan Stern
2010-09-02 20:27     ` Alan Stern
  -- strict thread matches above, loose matches on Subject: below --
2010-09-02  2:54 Colin Cross

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201009030235.00270.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=akpm@linux-foundation.org \
    --cc=ccross@android.com \
    --cc=gregkh@suse.de \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=pavel@ucw.cz \
    --cc=randy.dunlap@oracle.com \
    --cc=stern@rowland.harvard.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.