Linux 3.2.6
This commit is contained in:
parent
0b719f3d4a
commit
2d5a4c92f5
|
@ -1,92 +0,0 @@
|
|||
commit 3deaa7190a8da38453c4fabd9dec7f66d17fff67
|
||||
Author: Shaohua Li <shaohua.li@intel.com>
|
||||
Date: Fri Feb 3 15:37:17 2012 -0800
|
||||
|
||||
readahead: fix pipeline break caused by block plug
|
||||
|
||||
Herbert Poetzl reported a performance regression since 2.6.39. The test
|
||||
is a simple dd read, but with big block size. The reason is:
|
||||
|
||||
T1: ra (A, A+128k), (A+128k, A+256k)
|
||||
T2: lock_page for page A, submit the 256k
|
||||
T3: hit page A+128K, ra (A+256k, A+384). the range isn't submitted
|
||||
because of plug and there isn't any lock_page till we hit page A+256k
|
||||
because all pages from A to A+256k is in memory
|
||||
T4: hit page A+256k, ra (A+384, A+ 512). Because of plug, the range isn't
|
||||
submitted again.
|
||||
T5: lock_page A+256k, so (A+256k, A+512k) will be submitted. The task is
|
||||
waitting for (A+256k, A+512k) finish.
|
||||
|
||||
There is no request to disk in T3 and T4, so readahead pipeline breaks.
|
||||
|
||||
We really don't need block plug for generic_file_aio_read() for buffered
|
||||
I/O. The readahead already has plug and has fine grained control when I/O
|
||||
should be submitted. Deleting plug for buffered I/O fixes the regression.
|
||||
|
||||
One side effect is plug makes the request size 256k, the size is 128k
|
||||
without it. This is because default ra size is 128k and not a reason we
|
||||
need plug here.
|
||||
|
||||
Vivek said:
|
||||
|
||||
: We submit some readahead IO to device request queue but because of nested
|
||||
: plug, queue never gets unplugged. When read logic reaches a page which is
|
||||
: not in page cache, it waits for page to be read from the disk
|
||||
: (lock_page_killable()) and that time we flush the plug list.
|
||||
:
|
||||
: So effectively read ahead logic is kind of broken in parts because of
|
||||
: nested plugging. Removing top level plug (generic_file_aio_read()) for
|
||||
: buffered reads, will allow unplugging queue earlier for readahead.
|
||||
|
||||
Signed-off-by: Shaohua Li <shaohua.li@intel.com>
|
||||
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
|
||||
Reported-by: Herbert Poetzl <herbert@13thfloor.at>
|
||||
Tested-by: Eric Dumazet <eric.dumazet@gmail.com>
|
||||
Cc: Christoph Hellwig <hch@infradead.org>
|
||||
Cc: Jens Axboe <axboe@kernel.dk>
|
||||
Cc: Vivek Goyal <vgoyal@redhat.com>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
|
||||
diff --git a/mm/filemap.c b/mm/filemap.c
|
||||
index 97f49ed..b662757 100644
|
||||
--- a/mm/filemap.c
|
||||
+++ b/mm/filemap.c
|
||||
@@ -1400,15 +1400,12 @@ generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
|
||||
unsigned long seg = 0;
|
||||
size_t count;
|
||||
loff_t *ppos = &iocb->ki_pos;
|
||||
- struct blk_plug plug;
|
||||
|
||||
count = 0;
|
||||
retval = generic_segment_checks(iov, &nr_segs, &count, VERIFY_WRITE);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
- blk_start_plug(&plug);
|
||||
-
|
||||
/* coalesce the iovecs and go direct-to-BIO for O_DIRECT */
|
||||
if (filp->f_flags & O_DIRECT) {
|
||||
loff_t size;
|
||||
@@ -1424,8 +1421,12 @@ generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
|
||||
retval = filemap_write_and_wait_range(mapping, pos,
|
||||
pos + iov_length(iov, nr_segs) - 1);
|
||||
if (!retval) {
|
||||
+ struct blk_plug plug;
|
||||
+
|
||||
+ blk_start_plug(&plug);
|
||||
retval = mapping->a_ops->direct_IO(READ, iocb,
|
||||
iov, pos, nr_segs);
|
||||
+ blk_finish_plug(&plug);
|
||||
}
|
||||
if (retval > 0) {
|
||||
*ppos = pos + retval;
|
||||
@@ -1481,7 +1482,6 @@ generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
|
||||
break;
|
||||
}
|
||||
out:
|
||||
- blk_finish_plug(&plug);
|
||||
return retval;
|
||||
}
|
||||
EXPORT_SYMBOL(generic_file_aio_read);
|
12
kernel.spec
12
kernel.spec
|
@ -51,7 +51,7 @@ Summary: The Linux kernel
|
|||
%define fake_sublevel %(echo $((40 + %{real_sublevel})))
|
||||
|
||||
# Do we have a -stable update to apply?
|
||||
%define stable_update 3
|
||||
%define stable_update 6
|
||||
# Is it a -stable RC?
|
||||
%define stable_rc 0
|
||||
# Set rpm version accordingly
|
||||
|
@ -642,8 +642,6 @@ Patch3500: jbd-jbd2-validate-sb-s_first-in-journal_get_superblo.patch
|
|||
|
||||
Patch12016: disable-i8042-check-on-apple-mac.patch
|
||||
|
||||
Patch12025: block-readahead-block-plug.patch
|
||||
|
||||
Patch12026: bsg-fix-sysfs-link-remove-warning.patch
|
||||
|
||||
Patch12030: epoll-limit-paths.patch
|
||||
|
@ -710,8 +708,6 @@ Patch21100: msi-irq-sysfs-warning.patch
|
|||
# rhbz 754907
|
||||
Patch21101: hpsa-add-irqf-shared.patch
|
||||
|
||||
Patch21225: pci-Rework-ASPM-disable-code.patch
|
||||
|
||||
%endif
|
||||
|
||||
BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
|
||||
|
@ -1253,7 +1249,6 @@ ApplyOptionalPatch linux-2.6-v4l-dvb-experimental.patch
|
|||
ApplyPatch disable-i8042-check-on-apple-mac.patch
|
||||
|
||||
ApplyPatch epoll-limit-paths.patch
|
||||
ApplyPatch block-readahead-block-plug.patch
|
||||
|
||||
ApplyPatch bsg-fix-sysfs-link-remove-warning.patch
|
||||
|
||||
|
@ -1275,8 +1270,6 @@ ApplyPatch sysfs-msi-irq-per-device.patch
|
|||
# rhbz 754907
|
||||
ApplyPatch hpsa-add-irqf-shared.patch
|
||||
|
||||
ApplyPatch pci-Rework-ASPM-disable-code.patch
|
||||
|
||||
#rhbz 717735
|
||||
ApplyPatch nfs-client-freezer.patch
|
||||
|
||||
|
@ -1961,6 +1954,9 @@ fi
|
|||
# and build.
|
||||
|
||||
%changelog
|
||||
* Mon Feb 13 2012 Dave Jones <davej@redhat.com> 2.6.42.6-3
|
||||
- Linux 3.2.6
|
||||
|
||||
* Fri Feb 10 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Patch to prevent NULL pointer dereference in sd_revalidate_disk (rhbz 754518)
|
||||
|
||||
|
|
|
@ -1,287 +0,0 @@
|
|||
Path: news.gmane.org!not-for-mail
|
||||
From: Matthew Garrett <mjg@redhat.com>
|
||||
Newsgroups: gmane.linux.acpi.devel,gmane.linux.kernel.pci,gmane.linux.kernel
|
||||
Subject: [PATCH] pci: Rework ASPM disable code
|
||||
Date: Thu, 10 Nov 2011 16:38:33 -0500
|
||||
Lines: 232
|
||||
Approved: news@gmane.org
|
||||
Message-ID: <1320961113-5050-1-git-send-email-mjg@redhat.com>
|
||||
NNTP-Posting-Host: lo.gmane.org
|
||||
X-Trace: dough.gmane.org 1320961145 13112 80.91.229.12 (10 Nov 2011 21:39:05 GMT)
|
||||
X-Complaints-To: usenet@dough.gmane.org
|
||||
NNTP-Posting-Date: Thu, 10 Nov 2011 21:39:05 +0000 (UTC)
|
||||
Cc: linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org,
|
||||
linux-kernel@vger.kernel.org, Matthew Garrett <mjg@redhat.com>
|
||||
To: jbarnes@virtuousgeek.org
|
||||
Original-X-From: linux-acpi-owner@vger.kernel.org Thu Nov 10 22:38:57 2011
|
||||
Return-path: <linux-acpi-owner@vger.kernel.org>
|
||||
Envelope-to: glad-acpi-devel@lo.gmane.org
|
||||
Original-Received: from vger.kernel.org ([209.132.180.67])
|
||||
by lo.gmane.org with esmtp (Exim 4.69)
|
||||
(envelope-from <linux-acpi-owner@vger.kernel.org>)
|
||||
id 1ROcKm-0003jN-CL
|
||||
for glad-acpi-devel@lo.gmane.org; Thu, 10 Nov 2011 22:38:56 +0100
|
||||
Original-Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
||||
id S1751342Ab1KJViu (ORCPT <rfc822;glad-acpi-devel@m.gmane.org>);
|
||||
Thu, 10 Nov 2011 16:38:50 -0500
|
||||
Original-Received: from mx1.redhat.com ([209.132.183.28]:32030 "EHLO mx1.redhat.com"
|
||||
rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP
|
||||
id S1750805Ab1KJVit (ORCPT <rfc822;linux-acpi@vger.kernel.org>);
|
||||
Thu, 10 Nov 2011 16:38:49 -0500
|
||||
Original-Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22])
|
||||
by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id pAALcmdw013333
|
||||
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
|
||||
Thu, 10 Nov 2011 16:38:49 -0500
|
||||
Original-Received: from cavan.codon.org.uk (ovpn-113-157.phx2.redhat.com [10.3.113.157])
|
||||
by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id pAALclkW022022
|
||||
(version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NO);
|
||||
Thu, 10 Nov 2011 16:38:48 -0500
|
||||
Original-Received: from 209-6-41-104.c3-0.smr-ubr1.sbo-smr.ma.cable.rcn.com ([209.6.41.104] helo=localhost.localdomain)
|
||||
by cavan.codon.org.uk with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)
|
||||
(Exim 4.72)
|
||||
(envelope-from <mjg@redhat.com>)
|
||||
id 1ROcKa-0000F4-E4; Thu, 10 Nov 2011 21:38:44 +0000
|
||||
X-SA-Do-Not-Run: Yes
|
||||
X-SA-Exim-Connect-IP: 209.6.41.104
|
||||
X-SA-Exim-Mail-From: mjg@redhat.com
|
||||
X-SA-Exim-Scanned: No (on cavan.codon.org.uk); SAEximRunCond expanded to false
|
||||
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22
|
||||
Original-Sender: linux-acpi-owner@vger.kernel.org
|
||||
Precedence: bulk
|
||||
List-ID: <linux-acpi.vger.kernel.org>
|
||||
X-Mailing-List: linux-acpi@vger.kernel.org
|
||||
Xref: news.gmane.org gmane.linux.acpi.devel:51182 gmane.linux.kernel.pci:12503 gmane.linux.kernel:1214427
|
||||
Archived-At: <http://permalink.gmane.org/gmane.linux.acpi.devel/51182>
|
||||
|
||||
Right now we forcibly clear ASPM state on all devices if the BIOS indicates
|
||||
that the feature isn't supported. Based on the Microsoft presentation
|
||||
"PCI Express In Depth for Windows Vista and Beyond", I'm starting to think
|
||||
that this may be an error. The implication is that unless the platform
|
||||
grants full control via _OSC, Windows will not touch any PCIe features -
|
||||
including ASPM. In that case clearing ASPM state would be an error unless
|
||||
the platform has granted us that control.
|
||||
|
||||
This patch reworks the ASPM disabling code such that the actual clearing
|
||||
of state is triggered by a successful handoff of PCIe control to the OS.
|
||||
The general ASPM code undergoes some changes in order to ensure that the
|
||||
ability to clear the bits isn't overridden by ASPM having already been
|
||||
disabled. Further, this theoretically now allows for situations where
|
||||
only a subset of PCIe roots hand over control, leaving the others in the
|
||||
BIOS state.
|
||||
|
||||
It's difficult to know for sure that this is the right thing to do -
|
||||
there's zero public documentation on the interaction between all of these
|
||||
components. But enough vendors enable ASPM on platforms and then set this
|
||||
bit that it seems likely that they're expecting the OS to leave them alone.
|
||||
|
||||
Measured to save around 5W on an idle Thinkpad X220.
|
||||
|
||||
Signed-off-by: Matthew Garrett <mjg@redhat.com>
|
||||
---
|
||||
drivers/acpi/pci_root.c | 7 +++++
|
||||
drivers/pci/pci-acpi.c | 1 -
|
||||
drivers/pci/pcie/aspm.c | 58 +++++++++++++++++++++++++++++----------------
|
||||
include/linux/pci-aspm.h | 4 +-
|
||||
4 files changed, 46 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
|
||||
index 2672c79..7aff631 100644
|
||||
--- a/drivers/acpi/pci_root.c
|
||||
+++ b/drivers/acpi/pci_root.c
|
||||
@@ -596,6 +596,13 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
dev_info(root->bus->bridge,
|
||||
"ACPI _OSC control (0x%02x) granted\n", flags);
|
||||
+ if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) {
|
||||
+ /*
|
||||
+ * We have ASPM control, but the FADT indicates
|
||||
+ * that it's unsupported. Clear it.
|
||||
+ */
|
||||
+ pcie_clear_aspm(root->bus);
|
||||
+ }
|
||||
} else {
|
||||
dev_info(root->bus->bridge,
|
||||
"ACPI _OSC request failed (%s), "
|
||||
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
|
||||
index 4ecb640..c8e7585 100644
|
||||
--- a/drivers/pci/pci-acpi.c
|
||||
+++ b/drivers/pci/pci-acpi.c
|
||||
@@ -395,7 +395,6 @@ static int __init acpi_pci_init(void)
|
||||
|
||||
if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) {
|
||||
printk(KERN_INFO"ACPI FADT declares the system doesn't support PCIe ASPM, so disable it\n");
|
||||
- pcie_clear_aspm();
|
||||
pcie_no_aspm();
|
||||
}
|
||||
|
||||
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
|
||||
index cbfbab1..1cfbf22 100644
|
||||
--- a/drivers/pci/pcie/aspm.c
|
||||
+++ b/drivers/pci/pcie/aspm.c
|
||||
@@ -68,7 +68,7 @@ struct pcie_link_state {
|
||||
struct aspm_latency acceptable[8];
|
||||
};
|
||||
|
||||
-static int aspm_disabled, aspm_force, aspm_clear_state;
|
||||
+static int aspm_disabled, aspm_force;
|
||||
static bool aspm_support_enabled = true;
|
||||
static DEFINE_MUTEX(aspm_lock);
|
||||
static LIST_HEAD(link_list);
|
||||
@@ -500,9 +500,6 @@ static int pcie_aspm_sanity_check(struct pci_dev *pdev)
|
||||
int pos;
|
||||
u32 reg32;
|
||||
|
||||
- if (aspm_clear_state)
|
||||
- return -EINVAL;
|
||||
-
|
||||
/*
|
||||
* Some functions in a slot might not all be PCIe functions,
|
||||
* very strange. Disable ASPM for the whole slot
|
||||
@@ -574,9 +571,6 @@ void pcie_aspm_init_link_state(struct pci_dev *pdev)
|
||||
pdev->pcie_type != PCI_EXP_TYPE_DOWNSTREAM)
|
||||
return;
|
||||
|
||||
- if (aspm_disabled && !aspm_clear_state)
|
||||
- return;
|
||||
-
|
||||
/* VIA has a strange chipset, root port is under a bridge */
|
||||
if (pdev->pcie_type == PCI_EXP_TYPE_ROOT_PORT &&
|
||||
pdev->bus->self)
|
||||
@@ -608,7 +602,7 @@ void pcie_aspm_init_link_state(struct pci_dev *pdev)
|
||||
* the BIOS's expectation, we'll do so once pci_enable_device() is
|
||||
* called.
|
||||
*/
|
||||
- if (aspm_policy != POLICY_POWERSAVE || aspm_clear_state) {
|
||||
+ if (aspm_policy != POLICY_POWERSAVE) {
|
||||
pcie_config_aspm_path(link);
|
||||
pcie_set_clkpm(link, policy_to_clkpm_state(link));
|
||||
}
|
||||
@@ -649,8 +643,7 @@ void pcie_aspm_exit_link_state(struct pci_dev *pdev)
|
||||
struct pci_dev *parent = pdev->bus->self;
|
||||
struct pcie_link_state *link, *root, *parent_link;
|
||||
|
||||
- if ((aspm_disabled && !aspm_clear_state) || !pci_is_pcie(pdev) ||
|
||||
- !parent || !parent->link_state)
|
||||
+ if (!pci_is_pcie(pdev) || !parent || !parent->link_state)
|
||||
return;
|
||||
if ((parent->pcie_type != PCI_EXP_TYPE_ROOT_PORT) &&
|
||||
(parent->pcie_type != PCI_EXP_TYPE_DOWNSTREAM))
|
||||
@@ -734,13 +727,18 @@ void pcie_aspm_powersave_config_link(struct pci_dev *pdev)
|
||||
* pci_disable_link_state - disable pci device's link state, so the link will
|
||||
* never enter specific states
|
||||
*/
|
||||
-static void __pci_disable_link_state(struct pci_dev *pdev, int state, bool sem)
|
||||
+static void __pci_disable_link_state(struct pci_dev *pdev, int state, bool sem,
|
||||
+ bool force)
|
||||
{
|
||||
struct pci_dev *parent = pdev->bus->self;
|
||||
struct pcie_link_state *link;
|
||||
|
||||
- if (aspm_disabled || !pci_is_pcie(pdev))
|
||||
+ if (aspm_disabled && !force)
|
||||
+ return;
|
||||
+
|
||||
+ if (!pci_is_pcie(pdev))
|
||||
return;
|
||||
+
|
||||
if (pdev->pcie_type == PCI_EXP_TYPE_ROOT_PORT ||
|
||||
pdev->pcie_type == PCI_EXP_TYPE_DOWNSTREAM)
|
||||
parent = pdev;
|
||||
@@ -768,16 +766,31 @@ static void __pci_disable_link_state(struct pci_dev *pdev, int state, bool sem)
|
||||
|
||||
void pci_disable_link_state_locked(struct pci_dev *pdev, int state)
|
||||
{
|
||||
- __pci_disable_link_state(pdev, state, false);
|
||||
+ __pci_disable_link_state(pdev, state, false, false);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_disable_link_state_locked);
|
||||
|
||||
void pci_disable_link_state(struct pci_dev *pdev, int state)
|
||||
{
|
||||
- __pci_disable_link_state(pdev, state, true);
|
||||
+ __pci_disable_link_state(pdev, state, true, false);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_disable_link_state);
|
||||
|
||||
+void pcie_clear_aspm(struct pci_bus *bus)
|
||||
+{
|
||||
+ struct pci_dev *child;
|
||||
+
|
||||
+ /*
|
||||
+ * Clear any ASPM setup that the firmware has carried out on this bus
|
||||
+ */
|
||||
+ list_for_each_entry(child, &bus->devices, bus_list) {
|
||||
+ __pci_disable_link_state(child, PCIE_LINK_STATE_L0S |
|
||||
+ PCIE_LINK_STATE_L1 |
|
||||
+ PCIE_LINK_STATE_CLKPM,
|
||||
+ false, true);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static int pcie_aspm_set_policy(const char *val, struct kernel_param *kp)
|
||||
{
|
||||
int i;
|
||||
@@ -935,6 +948,7 @@ void pcie_aspm_remove_sysfs_dev_files(struct pci_dev *pdev)
|
||||
static int __init pcie_aspm_disable(char *str)
|
||||
{
|
||||
if (!strcmp(str, "off")) {
|
||||
+ aspm_policy = POLICY_DEFAULT;
|
||||
aspm_disabled = 1;
|
||||
aspm_support_enabled = false;
|
||||
printk(KERN_INFO "PCIe ASPM is disabled\n");
|
||||
@@ -947,16 +961,18 @@ static int __init pcie_aspm_disable(char *str)
|
||||
|
||||
__setup("pcie_aspm=", pcie_aspm_disable);
|
||||
|
||||
-void pcie_clear_aspm(void)
|
||||
-{
|
||||
- if (!aspm_force)
|
||||
- aspm_clear_state = 1;
|
||||
-}
|
||||
-
|
||||
void pcie_no_aspm(void)
|
||||
{
|
||||
- if (!aspm_force)
|
||||
+ /*
|
||||
+ * Disabling ASPM is intended to prevent the kernel from modifying
|
||||
+ * existing hardware state, not to clear existing state. To that end:
|
||||
+ * (a) set policy to POLICY_DEFAULT in order to avoid changing state
|
||||
+ * (b) prevent userspace from changing policy
|
||||
+ */
|
||||
+ if (!aspm_force) {
|
||||
+ aspm_policy = POLICY_DEFAULT;
|
||||
aspm_disabled = 1;
|
||||
+ }
|
||||
}
|
||||
|
||||
/**
|
||||
diff --git a/include/linux/pci-aspm.h b/include/linux/pci-aspm.h
|
||||
index 7cea7b6..c832014 100644
|
||||
--- a/include/linux/pci-aspm.h
|
||||
+++ b/include/linux/pci-aspm.h
|
||||
@@ -29,7 +29,7 @@ extern void pcie_aspm_pm_state_change(struct pci_dev *pdev);
|
||||
extern void pcie_aspm_powersave_config_link(struct pci_dev *pdev);
|
||||
extern void pci_disable_link_state(struct pci_dev *pdev, int state);
|
||||
extern void pci_disable_link_state_locked(struct pci_dev *pdev, int state);
|
||||
-extern void pcie_clear_aspm(void);
|
||||
+extern void pcie_clear_aspm(struct pci_bus *bus);
|
||||
extern void pcie_no_aspm(void);
|
||||
#else
|
||||
static inline void pcie_aspm_init_link_state(struct pci_dev *pdev)
|
||||
@@ -47,7 +47,7 @@ static inline void pcie_aspm_powersave_config_link(struct pci_dev *pdev)
|
||||
static inline void pci_disable_link_state(struct pci_dev *pdev, int state)
|
||||
{
|
||||
}
|
||||
-static inline void pcie_clear_aspm(void)
|
||||
+static inline void pcie_clear_aspm(struct pci_bus *bus)
|
||||
{
|
||||
}
|
||||
static inline void pcie_no_aspm(void)
|
||||
--
|
||||
1.7.7.1
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
||||
|
Loading…
Reference in New Issue