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 8/9] PCI/PM: Avoid redundant current_state update
Date: Thu, 14 Apr 2022 15:18:15 +0200 [thread overview]
Message-ID: <1844408.CQOukoFCf9@kreacher> (raw)
In-Reply-To: <5838942.lOV4Wx5bFT@kreacher>
From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Notice that if pci_power_up() returns success early, without updating
the given device's PCI_PM_CTRL register, because it has verified that
the power state of the device is D0 already at that point, the
pci_update_current_state() invocation in pci_pm_default_resume_early()
is redundant.
Avoid that redundant call by making pci_power_up() return 1 when it
has updated the device's PCI_PM_CTRL register and checking its return
value in pci_pm_default_resume_early().
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
v2 -> v3:
* Added R-by from Mika.
---
drivers/pci/pci-driver.c | 5 +++--
drivers/pci/pci.c | 10 ++++++++--
2 files changed, 11 insertions(+), 4 deletions(-)
Index: linux-pm/drivers/pci/pci-driver.c
===================================================================
--- linux-pm.orig/drivers/pci/pci-driver.c
+++ linux-pm/drivers/pci/pci-driver.c
@@ -553,8 +553,9 @@ static void pci_pm_default_resume(struct
static void pci_pm_default_resume_early(struct pci_dev *pci_dev)
{
- pci_power_up(pci_dev);
- pci_update_current_state(pci_dev, PCI_D0);
+ if (pci_power_up(pci_dev))
+ pci_update_current_state(pci_dev, PCI_D0);
+
pci_restore_state(pci_dev);
pci_pme_restore(pci_dev);
}
Index: linux-pm/drivers/pci/pci.c
===================================================================
--- linux-pm.orig/drivers/pci/pci.c
+++ linux-pm/drivers/pci/pci.c
@@ -1189,6 +1189,12 @@ static int pci_dev_wait(struct pci_dev *
/**
* pci_power_up - Put the given device into D0
* @dev: PCI device to power up
+ *
+ * Use the platform firmware and the PCI_PM_CTRL register to put @dev into D0.
+ *
+ * Return 0 if invoking the platform firmware was sufficient to put @dev into D0
+ * (and so the PCI_PM_CTRL register was not updated), or 1 if it was necessary to
+ * update the PCI_PM_CTRL register, or -ENODEV if the device was not accessible.
*/
int pci_power_up(struct pci_dev *dev)
{
@@ -1244,7 +1250,7 @@ int pci_power_up(struct pci_dev *dev)
udelay(PCI_PM_D2_DELAY);
dev->current_state = PCI_D0;
- return 0;
+ return 1;
fail:
pci_err(dev, "Unable to change power state to D0, device inaccessible\n");
@@ -1294,7 +1300,7 @@ static int pci_set_full_power_state(stru
int ret;
ret = pci_power_up(dev);
- if (ret)
+ if (ret < 0)
return ret;
if (!dev->pm_cap)
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 ` [PATCH v3 7/9] PCI/PM: Rearrange pci_set_power_state() Rafael J. Wysocki
2022-04-14 13:18 ` Rafael J. Wysocki [this message]
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=1844408.CQOukoFCf9@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.