All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tomi Valkeinen <tomi.valkeinen@ti.com>
To: Ulf Hansson <ulf.hansson@linaro.org>
Cc: Kevin Hilman <khilman@linaro.org>,
	"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Archit Taneja <archit@ti.com>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>
Subject: Re: Async runtime put in __device_release_driver()
Date: Wed, 6 Nov 2013 09:51:42 +0200	[thread overview]
Message-ID: <5279F50E.6040304@ti.com> (raw)
In-Reply-To: <CAPDyKFp0UGjEbn+pWDLKOQvKsxeXSh5hY3++TA1rpErfihOtPA@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2577 bytes --]

On 2013-11-05 23:29, Ulf Hansson wrote:
> On 23 October 2013 12:11, Tomi Valkeinen <tomi.valkeinen@ti.com> wrote:
>> Hi,
>>
>> I was debugging why clocks were left enabled after removing omapdss
>> driver, and I found this commit:
>>
>> fa180eb448fa263cf18dd930143b515d27d70d7b (PM / Runtime: Idle devices
>> asynchronously after probe|release)
>>
>> I don't understand how that is supposed to work.
>>
>> When a driver is removed, instead of using pm_runtime_put_sync() the
>> commit uses pm_runtime_put(), so the runtime_suspend call is queued. But
>> who is going to handle the queued suspend call, as the driver is already
>> removed? At least in my case, obviously nobody, as I only get
>> runtime_resume call in my driver, never the runtime_suspend.
>>
>> Is there something I need to add to my driver to make this work, or
>> should that part of the patch be reverted?
> 
> I believe it is quite common that a device driver calls
> pm_runtime_get_sync as a part of it's remove callback, then it
> explicitly returns it's resources that has been fetched during probe.
> Like a clk_disable_unprepare for example.

I guess you mean the driver calls pm_runtime_get_sync _and_
pm_runtime_put_sync as part of its remove callback?

Probably bus drivers need to do that, but for memory mapped devices in a
SoC, I don't think there's normally any need to do
pm_runtime_get/put_sync during the remove callback.

> The idea behind the change in __device_release_driver, was to try to
> prevent  devices from going active->idle->active and instead just
> remain active (if possible).
>
> In your case, which seems like a more modern way of implementing
> "remove", you shall call "pm_runtime_suspend" to make sure the
> runtime_suspend callbacks gets called.

And as far as I understand, the change creates an explicit requirement
to do either pm_runtime_get/put_sync or pm_runtime_suspend inside
driver's remove callback. If so, that should be mentioned in big red
letters in the pm-runtime documentation.

The runtime_pm.txt doc does mention something related to this (and btw,
the doc says pm_runtime_put_sync is being called, which is no longer
true), but nothing clear about how the driver remove callback must be
implemented.

I tried grepping the kernel sources to find out if pm_runtime_suspend is
widely used to get SoC platform devices to suspend, but it doesn't seem
like it is. I didn't see pm_runtime_get/put_sync being used in remove
callbacks widely either, but that was more difficult one to grep.

 Tomi



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]

  reply	other threads:[~2013-11-06  7:51 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-23 10:11 Async runtime put in __device_release_driver() Tomi Valkeinen
2013-11-05 21:29 ` Ulf Hansson
2013-11-06  7:51   ` Tomi Valkeinen [this message]
2013-11-06 22:01     ` Rafael J. Wysocki
2013-11-06 22:02       ` Alan Stern
2013-11-06 22:19         ` Rafael J. Wysocki
2013-11-06 22:48           ` Ulf Hansson
2013-11-07  0:16             ` Rafael J. Wysocki
2013-11-07  0:21               ` Kevin Hilman
2013-11-07  1:05                 ` Rafael J. Wysocki
2013-11-07  8:18                   ` Ulf Hansson
2013-11-07 18:55                     ` Rafael J. Wysocki

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=5279F50E.6040304@ti.com \
    --to=tomi.valkeinen@ti.com \
    --cc=archit@ti.com \
    --cc=khilman@linaro.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rafael.j.wysocki@intel.com \
    --cc=ulf.hansson@linaro.org \
    /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.