From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mailout1.hostsharing.net ([83.223.95.204]:52597 "EHLO mailout1.hostsharing.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1173533AbdDXUCQ (ORCPT ); Mon, 24 Apr 2017 16:02:16 -0400 Date: Mon, 24 Apr 2017 22:02:30 +0200 From: Lukas Wunner To: Imre Deak Cc: intel-gfx@lists.freedesktop.org, "Rafael J. Wysocki" , Bjorn Helgaas , linux-pci@vger.kernel.org Subject: Re: [PATCH v2 1/2] PCI / PM: Add needs_resume flag to avoid suspend complete optimization Message-ID: <20170424200230.GA9910@wunner.de> References: <1493044063-2095-1-git-send-email-imre.deak@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii In-Reply-To: <1493044063-2095-1-git-send-email-imre.deak@intel.com> Sender: linux-pci-owner@vger.kernel.org List-ID: On Mon, Apr 24, 2017 at 05:27:42PM +0300, Imre Deak wrote: > Some drivers - like i915 - may not support the system suspend direct > complete optimization due to differences in their runtime and system > suspend sequence. Add a flag that when set resumes the device before > calling the driver's system suspend handlers which effectively disables > the optimization. FWIW, there are at least two alternative solutions to this problem which do not require changes to the PCI core: (1) Add a ->prepare hook to i915_pm_ops which calls pm_runtime_get_sync() and a ->complete hook which calls pm_runtime_put(). (2) Assign a struct dev_pm_domain to the GPU which overrides the PCI ->prepare hook to return 0 unconditionally. See here for an example: http://lxr.free-electrons.com/source/drivers/gpu/vga/vga_switcheroo.c#L1056 It may be worth considering approach (1) (which is the simpler of the two) in favor of this patch. Because I'm not sure there are many drivers that will make use of this change to the PCI core. It's unfortunate that the return value of PCI drivers' ->prepare hooks has totally different semantics than that of bus types, thereby necessitating such workarounds. :-( Best regards, Lukas > > Needed by the next patch fixing suspend/resume on i915. > > Suggested by Rafael. > > Cc: Rafael J. Wysocki > Cc: Bjorn Helgaas > Cc: linux-pci@vger.kernel.org > Cc: stable@vger.kernel.org > Signed-off-by: Imre Deak > --- > drivers/pci/pci.c | 3 ++- > include/linux/pci.h | 7 +++++++ > 2 files changed, 9 insertions(+), 1 deletion(-) > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > index 7904d02..020f02d 100644 > --- a/drivers/pci/pci.c > +++ b/drivers/pci/pci.c > @@ -2141,7 +2141,8 @@ bool pci_dev_keep_suspended(struct pci_dev *pci_dev) > > if (!pm_runtime_suspended(dev) > || pci_target_state(pci_dev) != pci_dev->current_state > - || platform_pci_need_resume(pci_dev)) > + || platform_pci_need_resume(pci_dev) > + || pci_dev->needs_resume) > return false; > > /* > diff --git a/include/linux/pci.h b/include/linux/pci.h > index e2d1a12..3fe00a6 100644 > --- a/include/linux/pci.h > +++ b/include/linux/pci.h > @@ -316,6 +316,9 @@ struct pci_dev { > unsigned int hotplug_user_indicators:1; /* SlotCtl indicators > controlled exclusively by > user sysfs */ > + unsigned int needs_resume:1; /* Resume before calling the driver's > + system suspend hooks, disabling the > + direct_complete optimization. */ > unsigned int d3_delay; /* D3->D0 transition time in ms */ > unsigned int d3cold_delay; /* D3cold->D0 transition time in ms */ > > @@ -1113,6 +1116,10 @@ bool pci_check_pme_status(struct pci_dev *dev); > void pci_pme_wakeup_bus(struct pci_bus *bus); > void pci_d3cold_enable(struct pci_dev *dev); > void pci_d3cold_disable(struct pci_dev *dev); > +static inline void pci_resume_before_suspend(struct pci_dev *dev, bool enable) > +{ > + dev->needs_resume = enable; > +} > > static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state, > bool enable) > -- > 2.5.0 > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lukas Wunner Subject: Re: [PATCH v2 1/2] PCI / PM: Add needs_resume flag to avoid suspend complete optimization Date: Mon, 24 Apr 2017 22:02:30 +0200 Message-ID: <20170424200230.GA9910@wunner.de> References: <1493044063-2095-1-git-send-email-imre.deak@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mailout1.hostsharing.net (mailout1.hostsharing.net [83.223.95.204]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6255C6E209 for ; Mon, 24 Apr 2017 20:02:06 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1493044063-2095-1-git-send-email-imre.deak@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Imre Deak Cc: Bjorn Helgaas , linux-pci@vger.kernel.org, intel-gfx@lists.freedesktop.org, "Rafael J. Wysocki" List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBBcHIgMjQsIDIwMTcgYXQgMDU6Mjc6NDJQTSArMDMwMCwgSW1yZSBEZWFrIHdyb3Rl Ogo+IFNvbWUgZHJpdmVycyAtIGxpa2UgaTkxNSAtIG1heSBub3Qgc3VwcG9ydCB0aGUgc3lzdGVt IHN1c3BlbmQgZGlyZWN0Cj4gY29tcGxldGUgb3B0aW1pemF0aW9uIGR1ZSB0byBkaWZmZXJlbmNl cyBpbiB0aGVpciBydW50aW1lIGFuZCBzeXN0ZW0KPiBzdXNwZW5kIHNlcXVlbmNlLiBBZGQgYSBm bGFnIHRoYXQgd2hlbiBzZXQgcmVzdW1lcyB0aGUgZGV2aWNlIGJlZm9yZQo+IGNhbGxpbmcgdGhl IGRyaXZlcidzIHN5c3RlbSBzdXNwZW5kIGhhbmRsZXJzIHdoaWNoIGVmZmVjdGl2ZWx5IGRpc2Fi bGVzCj4gdGhlIG9wdGltaXphdGlvbi4KCkZXSVcsIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gYWx0 ZXJuYXRpdmUgc29sdXRpb25zIHRvIHRoaXMgcHJvYmxlbSB3aGljaApkbyBub3QgcmVxdWlyZSBj aGFuZ2VzIHRvIHRoZSBQQ0kgY29yZToKCigxKSBBZGQgYSAtPnByZXBhcmUgaG9vayB0byBpOTE1 X3BtX29wcyB3aGljaCBjYWxscyBwbV9ydW50aW1lX2dldF9zeW5jKCkKICAgIGFuZCBhIC0+Y29t cGxldGUgaG9vayB3aGljaCBjYWxscyBwbV9ydW50aW1lX3B1dCgpLgoKKDIpIEFzc2lnbiBhIHN0 cnVjdCBkZXZfcG1fZG9tYWluIHRvIHRoZSBHUFUgd2hpY2ggb3ZlcnJpZGVzIHRoZSBQQ0kKICAg IC0+cHJlcGFyZSBob29rIHRvIHJldHVybiAwIHVuY29uZGl0aW9uYWxseS4gIFNlZSBoZXJlIGZv ciBhbiBleGFtcGxlOgogICAgaHR0cDovL2x4ci5mcmVlLWVsZWN0cm9ucy5jb20vc291cmNlL2Ry aXZlcnMvZ3B1L3ZnYS92Z2Ffc3dpdGNoZXJvby5jI0wxMDU2CgpJdCBtYXkgYmUgd29ydGggY29u c2lkZXJpbmcgYXBwcm9hY2ggKDEpICh3aGljaCBpcyB0aGUgc2ltcGxlciBvZiB0aGUgdHdvKQpp biBmYXZvciBvZiB0aGlzIHBhdGNoLiAgQmVjYXVzZSBJJ20gbm90IHN1cmUgdGhlcmUgYXJlIG1h bnkgZHJpdmVycyB0aGF0CndpbGwgbWFrZSB1c2Ugb2YgdGhpcyBjaGFuZ2UgdG8gdGhlIFBDSSBj b3JlLgoKSXQncyB1bmZvcnR1bmF0ZSB0aGF0IHRoZSByZXR1cm4gdmFsdWUgb2YgUENJIGRyaXZl cnMnIC0+cHJlcGFyZSBob29rcwpoYXMgdG90YWxseSBkaWZmZXJlbnQgc2VtYW50aWNzIHRoYW4g dGhhdCBvZiBidXMgdHlwZXMsIHRoZXJlYnkKbmVjZXNzaXRhdGluZyBzdWNoIHdvcmthcm91bmRz LiA6LSgKCkJlc3QgcmVnYXJkcywKCkx1a2FzCgo+IAo+IE5lZWRlZCBieSB0aGUgbmV4dCBwYXRj aCBmaXhpbmcgc3VzcGVuZC9yZXN1bWUgb24gaTkxNS4KPiAKPiBTdWdnZXN0ZWQgYnkgUmFmYWVs Lgo+IAo+IENjOiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5jb20+ Cj4gQ2M6IEJqb3JuIEhlbGdhYXMgPGJoZWxnYWFzQGdvb2dsZS5jb20+Cj4gQ2M6IGxpbnV4LXBj aUB2Z2VyLmtlcm5lbC5vcmcKPiBDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZwo+IFNpZ25lZC1v ZmYtYnk6IEltcmUgRGVhayA8aW1yZS5kZWFrQGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9w Y2kvcGNpLmMgICB8IDMgKystCj4gIGluY2x1ZGUvbGludXgvcGNpLmggfCA3ICsrKysrKysKPiAg MiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwo+IGluZGV4IDc5 MDRkMDIuLjAyMGYwMmQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKPiArKysgYi9k cml2ZXJzL3BjaS9wY2kuYwo+IEBAIC0yMTQxLDcgKzIxNDEsOCBAQCBib29sIHBjaV9kZXZfa2Vl cF9zdXNwZW5kZWQoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCj4gIAo+ICAJaWYgKCFwbV9ydW50 aW1lX3N1c3BlbmRlZChkZXYpCj4gIAkgICAgfHwgcGNpX3RhcmdldF9zdGF0ZShwY2lfZGV2KSAh PSBwY2lfZGV2LT5jdXJyZW50X3N0YXRlCj4gLQkgICAgfHwgcGxhdGZvcm1fcGNpX25lZWRfcmVz dW1lKHBjaV9kZXYpKQo+ICsJICAgIHx8IHBsYXRmb3JtX3BjaV9uZWVkX3Jlc3VtZShwY2lfZGV2 KQo+ICsJICAgIHx8IHBjaV9kZXYtPm5lZWRzX3Jlc3VtZSkKPiAgCQlyZXR1cm4gZmFsc2U7Cj4g IAo+ICAJLyoKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGlu dXgvcGNpLmgKPiBpbmRleCBlMmQxYTEyLi4zZmUwMGE2IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUv bGludXgvcGNpLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCj4gQEAgLTMxNiw2ICszMTYs OSBAQCBzdHJ1Y3QgcGNpX2RldiB7Cj4gIAl1bnNpZ25lZCBpbnQJaG90cGx1Z191c2VyX2luZGlj YXRvcnM6MTsgLyogU2xvdEN0bCBpbmRpY2F0b3JzCj4gIAkJCQkJCSAgICAgIGNvbnRyb2xsZWQg ZXhjbHVzaXZlbHkgYnkKPiAgCQkJCQkJICAgICAgdXNlciBzeXNmcyAqLwo+ICsJdW5zaWduZWQg aW50CW5lZWRzX3Jlc3VtZToxOwkvKiBSZXN1bWUgYmVmb3JlIGNhbGxpbmcgdGhlIGRyaXZlcidz Cj4gKwkJCQkJICAgc3lzdGVtIHN1c3BlbmQgaG9va3MsIGRpc2FibGluZyB0aGUKPiArCQkJCQkg ICBkaXJlY3RfY29tcGxldGUgb3B0aW1pemF0aW9uLiAqLwo+ICAJdW5zaWduZWQgaW50CWQzX2Rl bGF5OwkvKiBEMy0+RDAgdHJhbnNpdGlvbiB0aW1lIGluIG1zICovCj4gIAl1bnNpZ25lZCBpbnQJ ZDNjb2xkX2RlbGF5OwkvKiBEM2NvbGQtPkQwIHRyYW5zaXRpb24gdGltZSBpbiBtcyAqLwo+ICAK PiBAQCAtMTExMyw2ICsxMTE2LDEwIEBAIGJvb2wgcGNpX2NoZWNrX3BtZV9zdGF0dXMoc3RydWN0 IHBjaV9kZXYgKmRldik7Cj4gIHZvaWQgcGNpX3BtZV93YWtldXBfYnVzKHN0cnVjdCBwY2lfYnVz ICpidXMpOwo+ICB2b2lkIHBjaV9kM2NvbGRfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwo+ ICB2b2lkIHBjaV9kM2NvbGRfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKPiArc3RhdGlj IGlubGluZSB2b2lkIHBjaV9yZXN1bWVfYmVmb3JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRl diwgYm9vbCBlbmFibGUpCj4gK3sKPiArCWRldi0+bmVlZHNfcmVzdW1lID0gZW5hYmxlOwo+ICt9 Cj4gIAo+ICBzdGF0aWMgaW5saW5lIGludCBwY2lfZW5hYmxlX3dha2Uoc3RydWN0IHBjaV9kZXYg KmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUsCj4gIAkJCQkgIGJvb2wgZW5hYmxlKQo+IC0tIAo+IDIu NS4wCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=