From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
To: Linux PM <linux-pm@vger.kernel.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
Alan Stern <stern@rowland.harvard.edu>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
LKML <linux-kernel@vger.kernel.org>,
Linux ACPI <linux-acpi@vger.kernel.org>,
Linux PCI <linux-pci@vger.kernel.org>,
Linux Documentation <linux-doc@vger.kernel.org>,
Mika Westerberg <mika.westerberg@linux.intel.com>,
Ulf Hansson <ulf.hansson@linaro.org>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Kevin Hilman <khilman@kernel.org>
Subject: [PATCH v3 0/6] PM / sleep: Driver flags for system suspend/resume (part 2)
Date: Sun, 12 Nov 2017 01:34:12 +0100 [thread overview]
Message-ID: <4184911.zoJM7jZeH4@aspire.rjw.lan> (raw)
In-Reply-To: <6330680.LdxjlP4uri@aspire.rjw.lan>
Hi All,
The following still applies:
On Wednesday, November 8, 2017 1:41:35 AM CET Rafael J. Wysocki wrote:
>
> This is a follow-up for the first part of the PM driver flags series
> sent previously some time ago with an intro as follows:
>
> On Saturday, October 28, 2017 12:11:55 AM CET Rafael J. Wysocki wrote:
> > The following part of the original cover letter still applies:
> >
> > On Monday, October 16, 2017 3:12:35 AM CEST Rafael J. Wysocki wrote:
> > >
> > > This work was triggered by attempts to fix and optimize PM in the
> > > i2c-designware-platdev driver that ended up with adding a couple of
> > > flags to the driver's internal data structures for the tracking of
> > > device state (https://marc.info/?l=linux-acpi&m=150629646805636&w=2).
> > > That approach is sort of suboptimal, though, because other drivers will
> > > probably want to do similar things and if all of them need to use internal
> > > flags for that, quite a bit of code duplication may ensue at least.
> > >
> > > That can be avoided in a couple of ways and one of them is to provide a means
> > > for drivers to tell the core what to do and to make the core take care of it
> > > if told to do so. Hence, the idea to use driver flags for system-wide PM
> > > that was briefly discussed during the LPC in LA last month.
> >
> > [...]
> >
> > > What can work (and this is the only strategy that can work AFAICS) is to
> > > point different callback pointers *in* *a* *driver* to the same routine
> > > if the driver wants to reuse that code. That actually will work for PCI
> > > and USB drivers today, at least most of the time, but unfortunately there
> > > are problems with it for, say, platform devices.
> > >
> > > The first problem is the requirement to track the status of the device
> > > (suspended vs not suspended) in the callbacks, because the system-wide PM
> > > code in the PM core doesn't do that. The runtime PM framework does it, so
> > > this means adding some extra code which isn't necessary for runtime PM to
> > > the callback routines and that is not particularly nice.
> > >
> > > The second problem is that, if the driver wants to do anything in its
> > > ->suspend callback, it generally has to prevent runtime suspend of the
> > > device from taking place in parallel with that, which is quite cumbersome.
> > > Usually, that is taken care of by resuming the device from runtime suspend
> > > upfront, but generally doing that is wasteful (there may be no real need to
> > > resume the device except for the fact that the code is designed this way).
> > >
> > > On top of the above, there are optimizations to be made, like leaving certain
> > > devices in suspend after system resume to avoid wasting time on waiting for
> > > them to resume before user space can run again and similar.
> > >
> > > This patch series focuses on addressing those problems so as to make it
> > > easier to reuse callback routines by pointing different callback pointers
> > > to them in device drivers. The flags introduced here are to instruct the
> > > PM core and middle layers (whatever they are) on how the driver wants the
> > > device to be handled and then the driver has to provide callbacks to match
> > > these instructions and the rest should be taken care of by the code above it.
> > >
> > > The flags are introduced one by one to avoid making too many changes in
> > > one go and to allow things to be explained better (hopefully). They mostly
> > > are mutually independent with some clearly documented exceptions.
> >
> > but I had to rework the core patches to address the problem pointed with the
> > generic power domains (genpd) framework pointed out by Ulf.
> >
> > Namely, genpd expects its "noirq" callbacks to be invoked for devices in
> > runtime suspend too and it has valid reasons for that, so its "noirq"
> > callbacks can never be skipped, even for devices with the SMART_SUSPEND
> > flag set. For this reason, the logic related to DPM_FLAG_SMART_SUSPEND
> > had to be moved from the core to the PCI bus type and the ACPI PM domain
> > which are mostly affected by it anyway. The code after the changes looks
> > more straightforward to me, but it generally is more code and some patterns
> > had to be repeated in a few places.
>
> I promised to send the rest of the series then:
>
> > I will send the core patches for the remaining two flags introduced by the
> > original series separately and the intel-lpss and i2c-designware ones will
> > be posted when the core patches have been reviewed and agreed on.
>
> and here it goes.
>
> It actually only adds support for one additional flag, namely for
> DPM_FLAG_LEAVE_SUSPENDED, to the PM core (basic bits), PCI bus type and the
> ACPI PM domain.
>
> That part of the series (patches [1-3/6]) is rather straightforward and, as PCI
> and the ACPI PM domain are concerned, it should be functionally equivalent to
> the previous version of the set, so I retained the Greg's ACKs on these patches.
>
> The other part (patches [4-6/6]) is sort of new, as it makes the PM core
> carry out optimizations for devices with DPM_FLAG_LEAVE_SUSPENDED and/or
> DPM_FLAG_SMART_SUSPEND set where the "noirq", "early" and "late" system-wide
> PM callbacks provided by the drivers are invoked by the core directly. That
> part basically allows platform drivers, for instance, to reuse runtime PM
> callbacks (by pointing ->suspend_late and ->resume_early to them) without
> adding extra checks to them, as long as they are called directly by the core
> (or the ACPI PM domain).
And on top of that, while replying to Ulf's comments I realized that devices
with nonzero runtime PM usage_count reference counters cannot be left in suspend
during system resume, because that would confuse the runtime PM framework going
forward. Patches [1/6] and [5/6] have to be updated to avoid that, so here
goes a new revision.
It should apply on top of the current linux-next.
Thanks,
Rafael
next prev parent reply other threads:[~2017-11-12 0:45 UTC|newest]
Thread overview: 135+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-16 1:12 [PATCH 0/12] PM / sleep: Driver flags for system suspend/resume Rafael J. Wysocki
2017-10-16 1:29 ` [PATCH 01/12] PM / core: Add NEVER_SKIP and SMART_PREPARE driver flags Rafael J. Wysocki
2017-10-16 5:34 ` Lukas Wunner
2017-10-16 22:03 ` Rafael J. Wysocki
2017-10-16 6:28 ` Greg Kroah-Hartman
2017-10-16 22:05 ` Rafael J. Wysocki
2017-10-17 7:15 ` Greg Kroah-Hartman
2017-10-17 15:26 ` Rafael J. Wysocki
2017-10-18 6:56 ` Greg Kroah-Hartman
2017-10-16 6:31 ` Greg Kroah-Hartman
2017-10-16 22:07 ` Rafael J. Wysocki
2017-10-17 13:26 ` Greg Kroah-Hartman
2017-10-16 20:16 ` Alan Stern
2017-10-16 22:11 ` Rafael J. Wysocki
2017-10-18 23:17 ` [Update][PATCH v2 " Rafael J. Wysocki
2017-10-19 7:33 ` Greg Kroah-Hartman
2017-10-20 11:11 ` Rafael J. Wysocki
2017-10-20 11:35 ` Greg Kroah-Hartman
2017-10-20 11:28 ` Rafael J. Wysocki
2017-10-23 16:37 ` Ulf Hansson
2017-10-23 20:41 ` Rafael J. Wysocki
2017-10-16 1:29 ` [PATCH 02/12] PCI / PM: Use the NEVER_SKIP driver flag Rafael J. Wysocki
2017-10-23 16:40 ` Ulf Hansson
2017-10-16 1:29 ` [PATCH 03/12] PM: i2c-designware-platdrv: Use DPM_FLAG_SMART_PREPARE Rafael J. Wysocki
2017-10-23 16:57 ` Ulf Hansson
2017-10-16 1:29 ` [PATCH 04/12] PM / core: Add SMART_SUSPEND driver flag Rafael J. Wysocki
2017-10-23 19:01 ` Ulf Hansson
2017-10-24 5:22 ` Ulf Hansson
2017-10-24 8:55 ` Rafael J. Wysocki
2017-10-16 1:29 ` [PATCH 05/12] PCI / PM: Drop unnecessary invocations of pcibios_pm_ops callbacks Rafael J. Wysocki
2017-10-23 19:06 ` Ulf Hansson
2017-10-16 1:29 ` [PATCH 06/12] PCI / PM: Take SMART_SUSPEND driver flag into account Rafael J. Wysocki
2017-10-16 1:29 ` [PATCH 07/12] ACPI / LPSS: Consolidate runtime PM and system sleep handling Rafael J. Wysocki
2017-10-23 19:09 ` Ulf Hansson
2017-10-16 1:30 ` [PATCH 08/12] ACPI / PM: Take SMART_SUSPEND driver flag into account Rafael J. Wysocki
2017-10-16 1:30 ` [PATCH 09/12] PM / mfd: intel-lpss: Use DPM_FLAG_SMART_SUSPEND Rafael J. Wysocki
2017-10-31 15:09 ` Lee Jones
2017-10-31 16:28 ` Rafael J. Wysocki
2017-11-01 9:28 ` Lee Jones
2017-11-01 20:26 ` Rafael J. Wysocki
2017-11-08 11:08 ` Lee Jones
2017-10-16 1:30 ` [PATCH 10/12] PM / core: Add LEAVE_SUSPENDED driver flag Rafael J. Wysocki
2017-10-23 19:38 ` Ulf Hansson
2017-10-16 1:31 ` [PATCH 11/12] PM: i2c-designware-platdrv: Optimize power management Rafael J. Wysocki
2017-10-26 20:41 ` Wolfram Sang
2017-10-26 21:14 ` Rafael J. Wysocki
2017-10-16 1:32 ` [PATCH 12/12] PM / core: Add AVOID_RPM driver flag Rafael J. Wysocki
2017-10-17 15:33 ` Andy Shevchenko
2017-10-17 15:59 ` Rafael J. Wysocki
2017-10-17 16:25 ` Andy Shevchenko
2017-10-16 7:08 ` [PATCH 0/12] PM / sleep: Driver flags for system suspend/resume Greg Kroah-Hartman
2017-10-16 21:50 ` Rafael J. Wysocki
2017-10-17 8:36 ` Ulf Hansson
2017-10-17 15:25 ` Rafael J. Wysocki
2017-10-17 19:41 ` Ulf Hansson
2017-10-17 20:12 ` Alan Stern
2017-10-17 23:07 ` Rafael J. Wysocki
2017-10-18 0:39 ` Rafael J. Wysocki
2017-10-18 10:24 ` Rafael J. Wysocki
2017-10-18 12:34 ` Ulf Hansson
2017-10-18 21:54 ` Rafael J. Wysocki
2017-10-18 11:57 ` Ulf Hansson
2017-10-18 13:00 ` Rafael J. Wysocki
2017-10-18 14:11 ` Ulf Hansson
2017-10-18 19:45 ` Grygorii Strashko
2017-10-18 21:48 ` Rafael J. Wysocki
2017-10-19 8:33 ` Ulf Hansson
2017-10-19 17:21 ` Grygorii Strashko
2017-10-19 18:04 ` Ulf Hansson
2017-10-19 18:11 ` Ulf Hansson
2017-10-19 21:31 ` Grygorii Strashko
2017-10-20 6:05 ` Ulf Hansson
2017-10-18 22:12 ` Rafael J. Wysocki
2017-10-19 12:21 ` Ulf Hansson
2017-10-19 18:01 ` Ulf Hansson
2017-10-20 1:19 ` Rafael J. Wysocki
2017-10-20 5:57 ` Ulf Hansson
2017-10-20 20:46 ` Bjorn Helgaas
2017-10-21 1:04 ` Rafael J. Wysocki
2017-10-27 22:11 ` [PATCH v2 0/6] PM / sleep: Driver flags for system suspend/resume (part 1) Rafael J. Wysocki
2017-10-27 22:17 ` [PATCH v2 1/6] PM / core: Add NEVER_SKIP and SMART_PREPARE driver flags Rafael J. Wysocki
2017-11-06 8:07 ` Ulf Hansson
2017-10-27 22:19 ` [PATCH v2 2/6] PCI / PM: Use the NEVER_SKIP driver flag Rafael J. Wysocki
2017-10-27 22:22 ` [PATCH v2 3/6] PM / core: Add SMART_SUSPEND " Rafael J. Wysocki
2017-11-06 8:09 ` Ulf Hansson
2017-11-06 11:23 ` Rafael J. Wysocki
2017-10-27 22:23 ` [PATCH v2 4/6] PCI / PM: Drop unnecessary invocations of pcibios_pm_ops callbacks Rafael J. Wysocki
2017-10-27 22:27 ` [PATCH v2 5/6] PCI / PM: Take SMART_SUSPEND driver flag into account Rafael J. Wysocki
2017-10-31 22:48 ` Bjorn Helgaas
2017-10-27 22:30 ` [PATCH v2 6/6] ACPI " Rafael J. Wysocki
2017-11-08 0:41 ` [PATCH v2 0/6] PM / sleep: Driver flags for system suspend/resume (part 2) Rafael J. Wysocki
2017-11-08 13:25 ` [PATCH v2 1/6] PM / core: Add LEAVE_SUSPENDED driver flag Rafael J. Wysocki
2017-11-10 9:09 ` Ulf Hansson
2017-11-10 23:45 ` Rafael J. Wysocki
2017-11-11 0:41 ` Rafael J. Wysocki
2017-11-11 1:36 ` Rafael J. Wysocki
2017-11-14 16:07 ` Ulf Hansson
2017-11-15 1:48 ` Rafael J. Wysocki
2017-11-16 10:18 ` Ulf Hansson
2017-11-08 13:28 ` [PATCH v2 2/6] PCI / PM: Support for " Rafael J. Wysocki
2017-11-08 20:38 ` Bjorn Helgaas
2017-11-08 21:09 ` Rafael J. Wysocki
2017-11-08 13:34 ` [PATCH v2 3/6] ACPI / PM: Support for LEAVE_SUSPENDED driver flag in ACPI PM domain Rafael J. Wysocki
2017-11-08 13:37 ` [PATCH v2 4/6] PM / core: Add helpers for subsystem callback selection Rafael J. Wysocki
2017-11-08 13:38 ` [PATCH v2 5/6] PM / core: Direct handling of DPM_FLAG_LEAVE_SUSPENDED Rafael J. Wysocki
2017-11-08 13:39 ` [PATCH v2 6/6] PM / core: DPM_FLAG_SMART_SUSPEND optimization Rafael J. Wysocki
2017-11-12 0:34 ` Rafael J. Wysocki [this message]
2017-11-12 0:37 ` [PATCH v3 1/6] PM / core: Add LEAVE_SUSPENDED driver flag Rafael J. Wysocki
2017-11-16 15:10 ` Ulf Hansson
2017-11-16 23:07 ` Rafael J. Wysocki
2017-11-17 6:11 ` Ulf Hansson
2017-11-17 13:18 ` Rafael J. Wysocki
2017-11-17 13:49 ` Ulf Hansson
2017-11-17 14:31 ` Rafael J. Wysocki
2017-11-17 15:57 ` Ulf Hansson
2017-11-17 12:45 ` Rafael J. Wysocki
2017-11-12 0:40 ` [PATCH v3 2/6] PCI / PM: Support for " Rafael J. Wysocki
2017-11-12 0:40 ` [PATCH v3 3/6] ACPI / PM: Support for LEAVE_SUSPENDED driver flag in ACPI PM domain Rafael J. Wysocki
2017-11-12 0:42 ` [PATCH v3 4/6] PM / core: Add helpers for subsystem callback selection Rafael J. Wysocki
2017-11-15 7:43 ` Ulf Hansson
2017-11-15 17:55 ` Rafael J. Wysocki
2017-11-12 0:43 ` [PATCH v3 5/6] PM / core: Direct handling of DPM_FLAG_LEAVE_SUSPENDED Rafael J. Wysocki
2017-11-12 0:44 ` [PATCH v3 6/6] PM / core: DPM_FLAG_SMART_SUSPEND optimization Rafael J. Wysocki
2017-11-18 14:27 ` [PATCH v4 0/6] PM / sleep: Driver flags for system suspend/resume (part 2) Rafael J. Wysocki
2017-11-18 14:31 ` [PATCH v4 1/6] PM / core: Add LEAVE_SUSPENDED driver flag Rafael J. Wysocki
2017-11-20 12:25 ` Ulf Hansson
2017-11-21 0:16 ` Rafael J. Wysocki
2017-11-18 14:33 ` [PATCH v4 2/6] PCI / PM: Support for " Rafael J. Wysocki
2017-11-18 14:35 ` [PATCH v4 3/6] ACPI / PM: Support for LEAVE_SUSPENDED driver flag in ACPI PM domain Rafael J. Wysocki
2017-11-18 14:37 ` [PATCH v4 4/6] PM / core: Add helpers for subsystem callback selection Rafael J. Wysocki
2017-11-18 14:41 ` [PATCH v4 5/6] PM / core: Direct handling of DPM_FLAG_LEAVE_SUSPENDED Rafael J. Wysocki
2017-11-20 13:42 ` Ulf Hansson
2017-11-22 1:10 ` Rafael J. Wysocki
2017-11-22 1:28 ` Rafael J. Wysocki
2017-11-18 14:44 ` [PATCH v4 6/6] PM / core: DPM_FLAG_SMART_SUSPEND optimization 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=4184911.zoJM7jZeH4@aspire.rjw.lan \
--to=rjw@rjwysocki.net \
--cc=andriy.shevchenko@linux.intel.com \
--cc=bhelgaas@google.com \
--cc=gregkh@linuxfoundation.org \
--cc=khilman@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mika.westerberg@linux.intel.com \
--cc=stern@rowland.harvard.edu \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®