All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
To: Ulf Hansson <ulf.hansson@linaro.org>
Cc: Wolfram Sang <wsa@the-dreams.de>, Len Brown <lenb@kernel.org>,
	linux-acpi@vger.kernel.org, linux-pm@vger.kernel.org,
	Kevin Hilman <khilman@kernel.org>,
	Jarkko Nikula <jarkko.nikula@linux.intel.com>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Jisheng Zhang <jszhang@marvell.com>,
	John Stultz <john.stultz@linaro.org>,
	Guodong Xu <guodong.xu@linaro.org>,
	Sumit Semwal <sumit.semwal@linaro.org>,
	Haojian Zhuang <haojian.zhuang@linaro.org>,
	Johannes Stezenbach <js@sig21.net>,
	linux-arm-kernel@lists.infradead.org, linux-i2c@vger.kernel.org
Subject: Re: [PATCH v3 0/8] PM / ACPI / i2c: Deploy runtime PM centric path for system sleep
Date: Tue, 29 Aug 2017 22:19:43 +0200	[thread overview]
Message-ID: <1957183.ZU1CWrAZoR@aspire.rjw.lan> (raw)
In-Reply-To: <1504018610-10822-1-git-send-email-ulf.hansson@linaro.org>

On Tuesday, August 29, 2017 4:56:42 PM CEST Ulf Hansson wrote:
> The i2c designware platform driver, drivers/i2c/busses/i2c-designware-platdrv.c,
> isn't well optimized for system sleep.
> 
> What makes this driver particularly interesting is because it's a cross-SoC
> driver, which sometimes means there is an ACPI PM domain attached to the i2c
> device and sometimes not. The driver is being used on both x86 and ARM.
> 
> In principle, to optimize the system sleep support in i2c driver, this series
> enables the proven runtime PM centric path for the i2c driver. However, to do
> that the ACPI PM domain also have to collaborate and understand this behaviour.
> From earlier versions, Rafael has also pointed out that also the PM core needs
> to be involved.

Earlier today I realized that drivers pointing their ->suspend_late and
->resume_early callbacks, respectively, to pm_runtime_force_suspend() and
pm_runtime_force_resume(), are fundamentally incompatible with any bus type
doing nontrivial PM and with almost any nontrivial PM domains, for two reasons.

First, it basically requires the bus type or PM domain to expect that its
->runtime_suspend callback may or may not be indirectly invoked from its
own ->suspend_late callback, depending on the driver (and analogously
for ->runtime_resume and ->resume early), which is insane.

Second, it is a layering violation, because it makes the driver effectively
override the upper layer's decisions about what code to run.

That's why I'm afraid that we've reached a dead end here. :-(

Thanks,
Rafael

WARNING: multiple messages have this Message-ID (diff)
From: rjw@rjwysocki.net (Rafael J. Wysocki)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 0/8] PM / ACPI / i2c: Deploy runtime PM centric path for system sleep
Date: Tue, 29 Aug 2017 22:19:43 +0200	[thread overview]
Message-ID: <1957183.ZU1CWrAZoR@aspire.rjw.lan> (raw)
In-Reply-To: <1504018610-10822-1-git-send-email-ulf.hansson@linaro.org>

On Tuesday, August 29, 2017 4:56:42 PM CEST Ulf Hansson wrote:
> The i2c designware platform driver, drivers/i2c/busses/i2c-designware-platdrv.c,
> isn't well optimized for system sleep.
> 
> What makes this driver particularly interesting is because it's a cross-SoC
> driver, which sometimes means there is an ACPI PM domain attached to the i2c
> device and sometimes not. The driver is being used on both x86 and ARM.
> 
> In principle, to optimize the system sleep support in i2c driver, this series
> enables the proven runtime PM centric path for the i2c driver. However, to do
> that the ACPI PM domain also have to collaborate and understand this behaviour.
> From earlier versions, Rafael has also pointed out that also the PM core needs
> to be involved.

Earlier today I realized that drivers pointing their ->suspend_late and
->resume_early callbacks, respectively, to pm_runtime_force_suspend() and
pm_runtime_force_resume(), are fundamentally incompatible with any bus type
doing nontrivial PM and with almost any nontrivial PM domains, for two reasons.

First, it basically requires the bus type or PM domain to expect that its
->runtime_suspend callback may or may not be indirectly invoked from its
own ->suspend_late callback, depending on the driver (and analogously
for ->runtime_resume and ->resume early), which is insane.

Second, it is a layering violation, because it makes the driver effectively
override the upper layer's decisions about what code to run.

That's why I'm afraid that we've reached a dead end here. :-(

Thanks,
Rafael

  parent reply	other threads:[~2017-08-29 20:19 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-29 14:56 [PATCH v3 0/8] PM / ACPI / i2c: Deploy runtime PM centric path for system sleep Ulf Hansson
2017-08-29 14:56 ` Ulf Hansson
2017-08-29 14:56 ` [PATCH v3 1/8] PM / Sleep: Make the runtime PM centric path known to the PM core Ulf Hansson
2017-08-29 14:56   ` Ulf Hansson
2017-08-29 15:15   ` Rafael J. Wysocki
2017-08-29 15:15     ` Rafael J. Wysocki
2017-08-30  7:13     ` Ulf Hansson
2017-08-30  7:13       ` Ulf Hansson
2017-08-30 13:37       ` Rafael J. Wysocki
2017-08-30 13:37         ` Rafael J. Wysocki
2017-08-31  9:06         ` Ulf Hansson
2017-08-31  9:06           ` Ulf Hansson
2017-09-02 14:48           ` Rafael J. Wysocki
2017-09-02 14:48             ` Rafael J. Wysocki
2017-08-29 14:56 ` [PATCH v3 2/8] PM / ACPI: Restore acpi_subsys_complete() Ulf Hansson
2017-08-29 14:56   ` Ulf Hansson
2017-08-29 14:56 ` [PATCH v3 3/8] PM / Sleep: Remove pm_complete_with_resume_check() Ulf Hansson
2017-08-29 14:56   ` Ulf Hansson
2017-08-29 14:56 ` [PATCH v3 4/8] PM / ACPI: Split code validating need for runtime resume in ->prepare() Ulf Hansson
2017-08-29 14:56   ` Ulf Hansson
2017-08-29 14:56 ` [PATCH v3 5/8] PM / ACPI: Split acpi_lpss_suspend_late|resume_early() Ulf Hansson
2017-08-29 14:56   ` Ulf Hansson
2017-08-29 14:56 ` [PATCH v3 6/8] PM / ACPI: Enable the runtime PM centric approach for system sleep Ulf Hansson
2017-08-29 14:56   ` Ulf Hansson
2017-08-29 15:27   ` Rafael J. Wysocki
2017-08-29 15:27     ` Rafael J. Wysocki
2017-09-01  8:27     ` Ulf Hansson
2017-09-01  8:27       ` Ulf Hansson
2017-09-02 15:38       ` Rafael J. Wysocki
2017-09-02 15:38         ` Rafael J. Wysocki
2017-09-04 13:21         ` Ulf Hansson
2017-09-04 13:21           ` Ulf Hansson
2017-09-06  0:02           ` Rafael J. Wysocki
2017-09-06  0:02             ` Rafael J. Wysocki
2017-08-29 14:56 ` [PATCH v3 7/8] i2c: designware: Don't resume device in the ->complete() callback Ulf Hansson
2017-08-29 14:56   ` Ulf Hansson
2017-08-29 14:56 ` [PATCH v3 8/8] i2c: designware: Deploy the runtime PM centric path for system sleep Ulf Hansson
2017-08-29 14:56   ` Ulf Hansson
2017-08-29 20:19 ` Rafael J. Wysocki [this message]
2017-08-29 20:19   ` [PATCH v3 0/8] PM / ACPI / i2c: Deploy " Rafael J. Wysocki
2017-08-30  9:57   ` Ulf Hansson
2017-08-30  9:57     ` Ulf Hansson
2017-08-31  0:17     ` Rafael J. Wysocki
2017-08-31  0:17       ` Rafael J. Wysocki
2017-09-01 10:42       ` Ulf Hansson
2017-09-01 10:42         ` Ulf Hansson
2017-09-04  0:17         ` Rafael J. Wysocki
2017-09-04  0:17           ` Rafael J. Wysocki
2017-09-04  5:46           ` Lukas Wunner
2017-09-04  5:46             ` Lukas Wunner
2017-09-04 10:04             ` Rafael J. Wysocki
2017-09-04 10:04               ` Rafael J. Wysocki
2017-09-04 12:55           ` Ulf Hansson
2017-09-04 12:55             ` Ulf Hansson
2017-09-06  0:52             ` Rafael J. Wysocki
2017-09-06  0:52               ` Rafael J. Wysocki
2017-09-06 10:46               ` Rafael J. Wysocki
2017-09-06 10:46                 ` Rafael J. Wysocki
2017-09-06 13:59                 ` Ulf Hansson
2017-09-06 13:59                   ` Ulf Hansson
2017-09-06 21:39                   ` Rafael J. Wysocki
2017-09-06 21:39                     ` Rafael J. Wysocki
2017-09-06 13:54               ` Ulf Hansson
2017-09-06 13:54                 ` Ulf Hansson

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=1957183.ZU1CWrAZoR@aspire.rjw.lan \
    --to=rjw@rjwysocki.net \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=guodong.xu@linaro.org \
    --cc=haojian.zhuang@linaro.org \
    --cc=jarkko.nikula@linux.intel.com \
    --cc=john.stultz@linaro.org \
    --cc=js@sig21.net \
    --cc=jszhang@marvell.com \
    --cc=khilman@kernel.org \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mika.westerberg@linux.intel.com \
    --cc=sumit.semwal@linaro.org \
    --cc=ulf.hansson@linaro.org \
    --cc=wsa@the-dreams.de \
    /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.