Disable runtime PM for hotpluggable ATA ports (rhbz 806676)
This commit is contained in:
parent
28582472ab
commit
f8ac3b70ec
11
kernel.spec
11
kernel.spec
@ -62,7 +62,7 @@ Summary: The Linux kernel
|
|||||||
# For non-released -rc kernels, this will be appended after the rcX and
|
# For non-released -rc kernels, this will be appended after the rcX and
|
||||||
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
|
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
|
||||||
#
|
#
|
||||||
%global baserelease 2
|
%global baserelease 3
|
||||||
%global fedora_build %{baserelease}
|
%global fedora_build %{baserelease}
|
||||||
|
|
||||||
# base_sublevel is the kernel version we're starting with and patching
|
# base_sublevel is the kernel version we're starting with and patching
|
||||||
@ -739,6 +739,9 @@ Patch21306: shlib_base_randomize.patch
|
|||||||
#rhbz 806433
|
#rhbz 806433
|
||||||
Patch21360: uvcvideo-Fix-race-induced-crash-in-uvc_video_clock_update.patch
|
Patch21360: uvcvideo-Fix-race-induced-crash-in-uvc_video_clock_update.patch
|
||||||
|
|
||||||
|
#rhbz 806676
|
||||||
|
Patch21385: libata-disable-runtime-pm-for-hotpluggable-port.patch
|
||||||
|
|
||||||
Patch21400: unhandled-irqs-switch-to-polling.patch
|
Patch21400: unhandled-irqs-switch-to-polling.patch
|
||||||
|
|
||||||
Patch22000: weird-root-dentry-name-debug.patch
|
Patch22000: weird-root-dentry-name-debug.patch
|
||||||
@ -1432,6 +1435,9 @@ ApplyPatch highbank-export-clock-functions.patch
|
|||||||
#rhbz 806433
|
#rhbz 806433
|
||||||
ApplyPatch uvcvideo-Fix-race-induced-crash-in-uvc_video_clock_update.patch
|
ApplyPatch uvcvideo-Fix-race-induced-crash-in-uvc_video_clock_update.patch
|
||||||
|
|
||||||
|
#rhbz 806676
|
||||||
|
ApplyPatch libata-disable-runtime-pm-for-hotpluggable-port.patch
|
||||||
|
|
||||||
# END OF PATCH APPLICATIONS
|
# END OF PATCH APPLICATIONS
|
||||||
|
|
||||||
%endif
|
%endif
|
||||||
@ -2287,6 +2293,9 @@ fi
|
|||||||
# ||----w |
|
# ||----w |
|
||||||
# || ||
|
# || ||
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Apr 04 2012 Josh Boyer <jwboyer@redhat.com>
|
||||||
|
- Disable runtime PM for hotpluggable ATA ports (rhbz 806676)
|
||||||
|
|
||||||
* Tue Apr 03 2012 Justin M. Forbes <jforbes@redhat.com> - 3.4.0-0.rc1.git1.2
|
* Tue Apr 03 2012 Justin M. Forbes <jforbes@redhat.com> - 3.4.0-0.rc1.git1.2
|
||||||
- BTRFS use after free patch
|
- BTRFS use after free patch
|
||||||
|
|
||||||
|
180
libata-disable-runtime-pm-for-hotpluggable-port.patch
Normal file
180
libata-disable-runtime-pm-for-hotpluggable-port.patch
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
Path: news.gmane.org!not-for-mail
|
||||||
|
From: Lin Ming <ming.m.lin@intel.com>
|
||||||
|
Newsgroups: gmane.linux.ide,gmane.linux.kernel
|
||||||
|
Subject: [PATCH v2] libata: disable runtime pm for hotpluggable port
|
||||||
|
Date: Tue, 13 Mar 2012 09:57:37 +0800
|
||||||
|
Lines: 131
|
||||||
|
Approved: news@gmane.org
|
||||||
|
Message-ID: <1331603857.3436.24.camel@minggr>
|
||||||
|
NNTP-Posting-Host: plane.gmane.org
|
||||||
|
Mime-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset="UTF-8"
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
X-Trace: dough.gmane.org 1331603865 12388 80.91.229.3 (13 Mar 2012 01:57:45 GMT)
|
||||||
|
X-Complaints-To: usenet@dough.gmane.org
|
||||||
|
NNTP-Posting-Date: Tue, 13 Mar 2012 01:57:45 +0000 (UTC)
|
||||||
|
Cc: linux-ide@vger.kernel.org, lkml <linux-kernel@vger.kernel.org>,
|
||||||
|
jslaby@suse.cz, cwillu@cwillu.com, jackdachef@gmail.com,
|
||||||
|
Sergei Shtylyov <sshtylyov@mvista.com>
|
||||||
|
To: Jeff Garzik <jgarzik@pobox.com>
|
||||||
|
Original-X-From: linux-ide-owner@vger.kernel.org Tue Mar 13 02:57:43 2012
|
||||||
|
Return-path: <linux-ide-owner@vger.kernel.org>
|
||||||
|
Envelope-to: lnx-linux-ide@plane.gmane.org
|
||||||
|
Original-Received: from vger.kernel.org ([209.132.180.67])
|
||||||
|
by plane.gmane.org with esmtp (Exim 4.69)
|
||||||
|
(envelope-from <linux-ide-owner@vger.kernel.org>)
|
||||||
|
id 1S7Gze-0005pE-Sg
|
||||||
|
for lnx-linux-ide@plane.gmane.org; Tue, 13 Mar 2012 02:57:43 +0100
|
||||||
|
Original-Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
||||||
|
id S1754650Ab2CMB5l (ORCPT <rfc822;lnx-linux-ide@m.gmane.org>);
|
||||||
|
Mon, 12 Mar 2012 21:57:41 -0400
|
||||||
|
Original-Received: from mga14.intel.com ([143.182.124.37]:15186 "EHLO mga14.intel.com"
|
||||||
|
rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP
|
||||||
|
id S1754582Ab2CMB5k (ORCPT <rfc822;linux-ide@vger.kernel.org>);
|
||||||
|
Mon, 12 Mar 2012 21:57:40 -0400
|
||||||
|
Original-Received: from azsmga002.ch.intel.com ([10.2.17.35])
|
||||||
|
by azsmga102.ch.intel.com with ESMTP; 12 Mar 2012 18:57:39 -0700
|
||||||
|
X-ExtLoop1: 1
|
||||||
|
X-IronPort-AV: E=Sophos;i="4.71,315,1320652800";
|
||||||
|
d="scan'208";a="76719701"
|
||||||
|
Original-Received: from minggr.sh.intel.com (HELO [10.239.36.45]) ([10.239.36.45])
|
||||||
|
by AZSMGA002.ch.intel.com with ESMTP; 12 Mar 2012 18:57:38 -0700
|
||||||
|
X-Mailer: Evolution 2.30.3
|
||||||
|
Original-Sender: linux-ide-owner@vger.kernel.org
|
||||||
|
Precedence: bulk
|
||||||
|
List-ID: <linux-ide.vger.kernel.org>
|
||||||
|
X-Mailing-List: linux-ide@vger.kernel.org
|
||||||
|
Xref: news.gmane.org gmane.linux.ide:51560 gmane.linux.kernel:1266262
|
||||||
|
Archived-At: <http://permalink.gmane.org/gmane.linux.ide/51560>
|
||||||
|
|
||||||
|
Currently, hotplug doesn't work if port is already runtime suspended.
|
||||||
|
For now, we simply disable runtime pm for hotpluggable port.
|
||||||
|
Later, we should add runtime pm support for hotpluggable port too.
|
||||||
|
|
||||||
|
Bug report:
|
||||||
|
https://lkml.org/lkml/2012/2/19/70
|
||||||
|
|
||||||
|
v2:
|
||||||
|
- Use bit 2 and 3 for flags ATA_FLAG_EXTERNAL and ATA_FLAG_PLUGGABLE.
|
||||||
|
|
||||||
|
TODO: add similar hotpluggable port check for controllers other than
|
||||||
|
AHCI.
|
||||||
|
|
||||||
|
Reported-and-tested-by: Jiri Slaby <jslaby@suse.cz>
|
||||||
|
Reported-and-tested-by: cwillu@cwillu.com
|
||||||
|
Reported-and-tested-by: jackdachef@gmail.com
|
||||||
|
Signed-off-by: Lin Ming <ming.m.lin@intel.com>
|
||||||
|
---
|
||||||
|
drivers/ata/ahci.c | 3 +++
|
||||||
|
drivers/ata/ahci.h | 3 +++
|
||||||
|
drivers/ata/libahci.c | 20 ++++++++++++++++++++
|
||||||
|
drivers/ata/libata-transport.c | 6 ++++--
|
||||||
|
include/linux/libata.h | 2 ++
|
||||||
|
5 files changed, 32 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
|
||||||
|
index d07bf03..02e93ff 100644
|
||||||
|
--- a/drivers/ata/ahci.c
|
||||||
|
+++ b/drivers/ata/ahci.c
|
||||||
|
@@ -1145,6 +1145,9 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
|
if (hpriv->cap & HOST_CAP_PMP)
|
||||||
|
pi.flags |= ATA_FLAG_PMP;
|
||||||
|
|
||||||
|
+ if (hpriv->cap & HOST_CAP_SXS)
|
||||||
|
+ pi.flags |= ATA_FLAG_EXTERNAL;
|
||||||
|
+
|
||||||
|
ahci_set_em_messages(hpriv, &pi);
|
||||||
|
|
||||||
|
if (ahci_broken_system_poweroff(pdev)) {
|
||||||
|
diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
|
||||||
|
index b175000..92f7172 100644
|
||||||
|
--- a/drivers/ata/ahci.h
|
||||||
|
+++ b/drivers/ata/ahci.h
|
||||||
|
@@ -172,6 +172,9 @@ enum {
|
||||||
|
PORT_CMD_ALPE = (1 << 26), /* Aggressive Link PM enable */
|
||||||
|
PORT_CMD_ATAPI = (1 << 24), /* Device is ATAPI */
|
||||||
|
PORT_CMD_FBSCP = (1 << 22), /* FBS Capable Port */
|
||||||
|
+ PORT_CMD_ESP = (1 << 21), /* External SATA Port */
|
||||||
|
+ PORT_CMD_MPSP = (1 << 19), /* Mechanical Presence Switch Attached to Port */
|
||||||
|
+ PORT_CMD_HPCP = (1 << 18), /* Hot Plug Capable Port */
|
||||||
|
PORT_CMD_PMP = (1 << 17), /* PMP attached */
|
||||||
|
PORT_CMD_LIST_ON = (1 << 15), /* cmd list DMA engine running */
|
||||||
|
PORT_CMD_FIS_ON = (1 << 14), /* FIS DMA engine running */
|
||||||
|
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
|
||||||
|
index a72bfd0..7d72d3c 100644
|
||||||
|
--- a/drivers/ata/libahci.c
|
||||||
|
+++ b/drivers/ata/libahci.c
|
||||||
|
@@ -1097,6 +1097,23 @@ static void ahci_port_init(struct device *dev, struct ata_port *ap,
|
||||||
|
writel(1 << port_no, mmio + HOST_IRQ_STAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static bool ahci_port_pluggable(struct ata_port *ap)
|
||||||
|
+{
|
||||||
|
+ void __iomem *port_mmio = ahci_port_base(ap);
|
||||||
|
+ u32 cmd;
|
||||||
|
+
|
||||||
|
+ cmd = readl(port_mmio + PORT_CMD);
|
||||||
|
+
|
||||||
|
+ if ((ap->flags & ATA_FLAG_EXTERNAL) &&
|
||||||
|
+ (cmd & PORT_CMD_ESP))
|
||||||
|
+ return true;
|
||||||
|
+
|
||||||
|
+ if (cmd & (PORT_CMD_MPSP | PORT_CMD_HPCP))
|
||||||
|
+ return true;
|
||||||
|
+
|
||||||
|
+ return false;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void ahci_init_controller(struct ata_host *host)
|
||||||
|
{
|
||||||
|
struct ahci_host_priv *hpriv = host->private_data;
|
||||||
|
@@ -1112,6 +1129,9 @@ void ahci_init_controller(struct ata_host *host)
|
||||||
|
if (ata_port_is_dummy(ap))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
+ if (ahci_port_pluggable(ap))
|
||||||
|
+ ap->flags |= ATA_FLAG_PLUGGABLE;
|
||||||
|
+
|
||||||
|
ahci_port_init(host->dev, ap, i, mmio, port_mmio);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/drivers/ata/libata-transport.c b/drivers/ata/libata-transport.c
|
||||||
|
index 74aaee3..a7166b9 100644
|
||||||
|
--- a/drivers/ata/libata-transport.c
|
||||||
|
+++ b/drivers/ata/libata-transport.c
|
||||||
|
@@ -292,8 +292,10 @@ int ata_tport_add(struct device *parent,
|
||||||
|
}
|
||||||
|
|
||||||
|
device_enable_async_suspend(dev);
|
||||||
|
- pm_runtime_set_active(dev);
|
||||||
|
- pm_runtime_enable(dev);
|
||||||
|
+ if (!(ap->flags & ATA_FLAG_PLUGGABLE)) {
|
||||||
|
+ pm_runtime_set_active(dev);
|
||||||
|
+ pm_runtime_enable(dev);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
transport_add_device(dev);
|
||||||
|
transport_configure_device(dev);
|
||||||
|
diff --git a/include/linux/libata.h b/include/linux/libata.h
|
||||||
|
index cafc09a..f46961d 100644
|
||||||
|
--- a/include/linux/libata.h
|
||||||
|
+++ b/include/linux/libata.h
|
||||||
|
@@ -187,6 +187,8 @@ enum {
|
||||||
|
ATA_FLAG_SLAVE_POSS = (1 << 0), /* host supports slave dev */
|
||||||
|
/* (doesn't imply presence) */
|
||||||
|
ATA_FLAG_SATA = (1 << 1),
|
||||||
|
+ ATA_FLAG_EXTERNAL = (1 << 2), /* Controller supports external SATA */
|
||||||
|
+ ATA_FLAG_PLUGGABLE = (1 << 3), /* Port is hotpluggable */
|
||||||
|
ATA_FLAG_NO_ATAPI = (1 << 6), /* No ATAPI support */
|
||||||
|
ATA_FLAG_PIO_DMA = (1 << 7), /* PIO cmds via DMA */
|
||||||
|
ATA_FLAG_PIO_LBA48 = (1 << 8), /* Host DMA engine is LBA28 only */
|
||||||
|
--
|
||||||
|
1.7.2.5
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
To unsubscribe from this list: send the line "unsubscribe linux-ide" 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
Block a user