From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
To: Linux PCI <linux-pci@vger.kernel.org>
Cc: Linux PM <linux-pm@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
Bjorn Helgaas <helgaas@kernel.org>,
Mika Westerberg <mika.westerberg@linux.intel.com>
Subject: [PATCH v3 7/9] PCI/PM: Rearrange pci_set_power_state()
Date: Thu, 14 Apr 2022 15:17:00 +0200 [thread overview]
Message-ID: <1936737.usQuhbGJ8B@kreacher> (raw)
In-Reply-To: <5838942.lOV4Wx5bFT@kreacher>
From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
The part of pci_set_power_state() related to transitions into
low-power states is unnecessary convoluted, so clearly divide it
into the D3cold special case and the general case covering all of
the other states.
Also fix a potential issue with calling pci_bus_set_current_state()
to set the current state of all devices on the subordinate bus to
D3cold without checking if the power state of the parent bridge has
really changed to D3cold.
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
v1 -> v3:
* Fixed typo in the changelog (missing word "bus").
* Added R-by from Mika.
---
drivers/pci/pci.c | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
Index: linux-pm/drivers/pci/pci.c
===================================================================
--- linux-pm.orig/drivers/pci/pci.c
+++ linux-pm/drivers/pci/pci.c
@@ -1452,19 +1452,25 @@ int pci_set_power_state(struct pci_dev *
if (state >= PCI_D3hot && (dev->dev_flags & PCI_DEV_FLAGS_NO_D3))
return 0;
- /*
- * To put device in D3cold, we put device into D3hot in native
- * way, then put device into D3cold with platform ops
- */
- error = pci_set_low_power_state(dev, state > PCI_D3hot ?
- PCI_D3hot : state);
+ if (state == PCI_D3cold) {
+ /*
+ * To put the device in D3cold, put it into D3hot in the native
+ * way, then put it into D3cold using platform ops.
+ */
+ error = pci_set_low_power_state(dev, PCI_D3hot);
- if (pci_platform_power_transition(dev, state))
- return error;
+ if (pci_platform_power_transition(dev, PCI_D3cold))
+ return error;
- /* Powering off a bridge may power off the whole hierarchy */
- if (state == PCI_D3cold)
- pci_bus_set_current_state(dev->subordinate, PCI_D3cold);
+ /* Powering off a bridge may power off the whole hierarchy */
+ if (dev->current_state == PCI_D3cold)
+ pci_bus_set_current_state(dev->subordinate, PCI_D3cold);
+ } else {
+ error = pci_set_low_power_state(dev, state);
+
+ if (pci_platform_power_transition(dev, state))
+ return error;
+ }
return 0;
}
next prev parent reply other threads:[~2022-04-14 13:24 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-09 13:03 [PATCH v1 0/7] PCI/PM: Improvements related to device transitions into D0 Rafael J. Wysocki
2022-04-09 13:05 ` [PATCH v1 1/7] PCI/PM: Resume subordinate bus in bus type callbacks Rafael J. Wysocki
2022-04-09 13:06 ` [PATCH v1 2/7] PCI/PM: Drop the runtime_d3cold PCI device flag Rafael J. Wysocki
2022-04-09 13:08 ` [PATCH v1 3/7] PCI/PM: Rearrange pci_update_current_state() Rafael J. Wysocki
2022-04-09 13:22 ` [PATCH v1 4/7] PCI/PM: Rework changing power states of PCI devices Rafael J. Wysocki
2022-04-09 13:23 ` [PATCH v1 5/7] PCI/PM: Move pci_set_low_power_state() next to its caller Rafael J. Wysocki
2022-04-09 13:26 ` [PATCH v1 6/7] PCI/PM: Clean up pci_set_low_power_state() Rafael J. Wysocki
2022-04-09 13:28 ` [PATCH v1 7/7] PCI/PM: Rearrange pci_set_power_state() Rafael J. Wysocki
2022-04-11 14:17 ` [PATCH v2 0/9] PCI/PM: Improvements related to device transitions into D0 Rafael J. Wysocki
2022-04-11 14:19 ` [PATCH v2 1/9] PCI/PM: Resume subordinate bus in bus type callbacks Rafael J. Wysocki
2022-04-11 14:20 ` [PATCH v2 2/9] PCI/PM: Drop the runtime_d3cold device flag Rafael J. Wysocki
2022-04-11 14:21 ` [PATCH v2 3/9] PCI/PM: Rearrange pci_update_current_state() Rafael J. Wysocki
2022-04-12 9:42 ` Mika Westerberg
2022-04-12 10:56 ` Rafael J. Wysocki
2022-04-11 14:25 ` [PATCH v2 4/9] PCI/PM: Rework changing power states of PCI devices Rafael J. Wysocki
2022-04-12 10:00 ` Mika Westerberg
2022-04-12 11:31 ` Rafael J. Wysocki
2022-04-12 11:38 ` Mika Westerberg
2022-04-11 14:27 ` [PATCH v2 5/9] PCI/PM: Move pci_set_low_power_state() next to its caller Rafael J. Wysocki
2022-04-11 14:28 ` [PATCH v2 6/9] PCI/PM: Clean up pci_set_low_power_state() Rafael J. Wysocki
2022-04-11 14:30 ` [PATCH v2 7/9] PCI/PM: Rearrange pci_set_power_state() Rafael J. Wysocki
2022-04-11 14:31 ` [PATCH v2 8/9] PCI/PM: Avoid redundant current_state update Rafael J. Wysocki
2022-04-11 14:33 ` [PATCH v2 9/9] PCI/PM: Replace pci_set_power_state() in pci_pm_thaw_noirq() Rafael J. Wysocki
2022-04-11 14:33 ` [PATCH v2 0/9] PCI/PM: Improvements related to device transitions into D0 Rafael J. Wysocki
2022-04-12 10:08 ` Mika Westerberg
2022-04-12 11:34 ` Rafael J. Wysocki
2022-04-14 13:00 ` [PATCH v3 " Rafael J. Wysocki
2022-04-14 13:04 ` [PATCH v3 1/9] PCI/PM: Resume subordinate bus in bus type callbacks Rafael J. Wysocki
2022-04-14 13:04 ` [PATCH v3 2/9] PCI/PM: Drop the runtime_d3cold device flag Rafael J. Wysocki
2022-04-14 13:07 ` [PATCH v3 3/9] PCI/PM: Rearrange pci_update_current_state() Rafael J. Wysocki
2022-04-14 13:11 ` [PATCH v3 4/9] PCI/PM: Rework changing power states of PCI devices Rafael J. Wysocki
2022-05-03 17:59 ` Nathan Chancellor
2022-05-04 12:59 ` Rafael J. Wysocki
2022-05-04 15:54 ` Anders Roxell
2022-05-04 16:36 ` Nathan Chancellor
2022-05-04 18:00 ` Rafael J. Wysocki
2022-05-04 19:35 ` Nathan Chancellor
2022-05-05 11:58 ` Rafael J. Wysocki
2022-05-04 16:54 ` Bjorn Helgaas
2022-05-04 17:15 ` Rafael J. Wysocki
2022-04-14 13:14 ` [PATCH v3 5/9] PCI/PM: Move pci_set_low_power_state() next to its caller Rafael J. Wysocki
2022-04-14 13:15 ` [PATCH v3 6/9] PCI/PM: Clean up pci_set_low_power_state() Rafael J. Wysocki
2022-04-14 13:17 ` Rafael J. Wysocki [this message]
2022-04-14 13:18 ` [PATCH v3 8/9] PCI/PM: Avoid redundant current_state update Rafael J. Wysocki
2022-04-14 13:19 ` [PATCH v3 9/9] PCI/PM: Replace pci_set_power_state() in pci_pm_thaw_noirq() Rafael J. Wysocki
2022-04-20 16:25 ` [PATCH v3 0/9] PCI/PM: Improvements related to device transitions into D0 Bjorn Helgaas
2022-04-20 16:28 ` 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=1936737.usQuhbGJ8B@kreacher \
--to=rjw@rjwysocki.net \
--cc=helgaas@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 \
/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.