From: Bjorn Helgaas <bhelgaas@google.com>
To: Matthew Garrett <matthew.garrett@nebula.com>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>,
Emmanuel Grumbach <egrumbach@gmail.com>,
Stanislaw Gruszka <sgruszka@redhat.com>,
"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>,
linux-wireless <linux-wireless@vger.kernel.org>,
John Linville <linville@tuxdriver.com>,
Roman Yepishev <roman.yepishev@gmail.com>,
"Guy, Wey-Yi" <wey-yi.w.guy@intel.com>,
Mike Miller <mike.miller@hp.com>,
"iss_storagedev@hp.com" <iss_storagedev@hp.com>,
Guo-Fu Tseng <cooldavid@cooldavid.org>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
Francois Romieu <romieu@fr.zoreil.com>,
"nic_swsd@realtek.com" <nic_swsd@realtek.com>,
"aacraid@adaptec.com" <aacraid@adaptec.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: is L1 really disabled in iwlwifi
Date: Thu, 16 May 2013 16:55:35 -0600 [thread overview]
Message-ID: <20130516225535.GA27962@google.com> (raw)
In-Reply-To: <1368303730.2425.47.camel@x230>
On Sat, May 11, 2013 at 08:22:11PM +0000, Matthew Garrett wrote:
> On Sat, 2013-05-11 at 22:26 +0200, Rafael J. Wysocki wrote:
> > On Friday, May 10, 2013 04:52:57 PM Bjorn Helgaas wrote:
> > > I propose the following patch. Any comments?
> >
> > In my opinion this is dangerous, because it opens us to bugs that right now
> > are prevented from happening due to the way the code works.
>
> Right, I'm also not entirely comfortable with this. The current
> behaviour may be confusing, but we could reduce that by renaming the
> functions. I'm still not clear on whether anyone's actually seeing
> problems caused by the existing behaviour.
I couldn't imagine that silently ignoring the request to disable ASPM
would be the right thing, but I spent a long time experimenting with
Windows on qemu, and I think you're right. Windows 7 also seems to
ignore the "PciASPMOptOut" directive when we don't have permission
to manage ASPM. All the gory details are at
https://bugzilla.kernel.org/show_bug.cgi?id=57331
The current behavior is definitely confusing. I hate to rename or change
pci_disable_link_state() because it's exported and we'd have to maintain
the old interface for a while anyway. And I don't really want to return
failure to drivers, because I think that would encourage people to fiddle
with the Link Control register directly in the driver, which doesn't seem
like a good idea.
And you're also right that (as far as I know) there's not an actual
problem with the current behavior other than the confusion it causes.
So, how about something like the following patch, which just prints a
warning when we can't do what the driver requested? I suppose this may
also be a nuisance, because users will be worried, but they can't actually
*do* anything about it. Maybe it should be dev_info() instead.
commit f1956960fa0759c53b28e3a2810bd7e1b6e8925f
Author: Bjorn Helgaas <bhelgaas@google.com>
Date: Wed May 15 17:02:37 2013 -0600
PCI/ASPM: Warn when driver asks to disable ASPM, but we can't do it
Some devices have hardware problems related to using ASPM. Drivers for
these devices use pci_disable_link_state() to prevent their device from
entering L0s or L1. But on platforms where the OS doesn't have permission
to manage ASPM, pci_disable_link_state() doesn't actually disable ASPM.
Windows has a similar mechanism ("PciASPMOptOut"), and when the OS doesn't
have control of ASPM, it doesn't actually disable ASPM either.
This patch just adds a warning in dmesg about the fact that
pci_disable_link_state() is doing nothing.
Reported-by: Emmanuel Grumbach <egrumbach@gmail.com>
Reference: https://lkml.kernel.org/r/CANUX_P3F5YhbZX3WGU-j1AGpbXb_T9Bis2ErhvKkFMtDvzatVQ@mail.gmail.com
Reference: https://bugzilla.kernel.org/show_bug.cgi?id=57331
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index d320df6..faa83b6 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -724,9 +724,6 @@ static void __pci_disable_link_state(struct pci_dev *pdev, int state, bool sem,
struct pci_dev *parent = pdev->bus->self;
struct pcie_link_state *link;
- if (aspm_disabled && !force)
- return;
-
if (!pci_is_pcie(pdev))
return;
@@ -736,6 +733,19 @@ static void __pci_disable_link_state(struct pci_dev *pdev, int state, bool sem,
if (!parent || !parent->link_state)
return;
+ /*
+ * A driver requested that ASPM be disabled on this device, but
+ * if we don't have permission to manage ASPM (e.g., on ACPI
+ * systems we have to observe the FADT ACPI_FADT_NO_ASPM bit and
+ * the _OSC method), we can't honor that request. Windows has
+ * a similar mechanism using "PciASPMOptOut", which is also
+ * ignored in this situation.
+ */
+ if (aspm_disabled && !force) {
+ dev_warn(&pdev->dev, "can't disable ASPM; OS doesn't have ASPM control\n");
+ return;
+ }
+
if (sem)
down_read(&pci_bus_sem);
mutex_lock(&aspm_lock);
next prev parent reply other threads:[~2013-05-16 22:55 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-04 8:41 is L1 really disabled in iwlwifi Emmanuel Grumbach
2013-03-04 13:44 ` John W. Linville
2013-03-04 13:49 ` Stanislaw Gruszka
2013-03-04 14:57 ` Emmanuel Grumbach
2013-03-04 15:11 ` John W. Linville
2013-03-04 15:48 ` Stanislaw Gruszka
2013-03-04 17:58 ` Emmanuel Grumbach
2013-03-17 15:59 ` Roman Yepishev
2013-03-29 18:24 ` Bjorn Helgaas
2013-03-30 18:38 ` Emmanuel Grumbach
2013-03-30 21:26 ` Bjorn Helgaas
2013-04-02 11:10 ` Emmanuel Grumbach
2013-04-02 11:12 ` Emmanuel Grumbach
2013-04-07 12:23 ` Emmanuel Grumbach
2013-04-08 16:28 ` Bjorn Helgaas
2013-04-09 5:29 ` Emmanuel Grumbach
2013-04-30 10:57 ` Emmanuel Grumbach
2013-04-30 22:45 ` Bjorn Helgaas
2013-04-30 22:55 ` Matthew Garrett
2013-05-01 8:31 ` Emmanuel Grumbach
2013-05-01 17:13 ` Bjorn Helgaas
2013-05-10 22:52 ` Bjorn Helgaas
2013-05-10 22:52 ` Bjorn Helgaas
2013-05-11 20:26 ` Rafael J. Wysocki
2013-05-11 20:26 ` Rafael J. Wysocki
2013-05-11 20:22 ` Matthew Garrett
2013-05-11 20:22 ` Matthew Garrett
2013-05-11 20:22 ` Matthew Garrett
2013-05-16 22:55 ` Bjorn Helgaas [this message]
2013-05-17 5:49 ` Emmanuel Grumbach
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=20130516225535.GA27962@google.com \
--to=bhelgaas@google.com \
--cc=aacraid@adaptec.com \
--cc=cooldavid@cooldavid.org \
--cc=egrumbach@gmail.com \
--cc=iss_storagedev@hp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=matthew.garrett@nebula.com \
--cc=mike.miller@hp.com \
--cc=netdev@vger.kernel.org \
--cc=nic_swsd@realtek.com \
--cc=rjw@sisk.pl \
--cc=roman.yepishev@gmail.com \
--cc=romieu@fr.zoreil.com \
--cc=sgruszka@redhat.com \
--cc=wey-yi.w.guy@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.