summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Boyer <jwboyer@redhat.com>2012-04-18 13:54:46 -0400
committerJosh Boyer <jwboyer@redhat.com>2012-04-18 13:57:09 -0400
commita710a7d7ce54cd18fe8c182ff7150b440ece2d0f (patch)
treed010c0d6f60f623445b7c2f5bc598326b50953d7
parentbd9fffb7d6cb9ed2f2b4d4527db2b79a68c04047 (diff)
downloadkernel-a710a7d7ce54cd18fe8c182ff7150b440ece2d0f.tar.gz
kernel-a710a7d7ce54cd18fe8c182ff7150b440ece2d0f.tar.xz
kernel-a710a7d7ce54cd18fe8c182ff7150b440ece2d0f.zip
Change patch to resolve libata hotplug (rhbz 807632)
-rw-r--r--kernel.spec11
-rw-r--r--libata-disable-runtime-pm-for-hotpluggable-port.patch180
-rw-r--r--libata-forbid-port-runtime-pm-by-default.patch24
3 files changed, 31 insertions, 184 deletions
diff --git a/kernel.spec b/kernel.spec
index b4549466..91f665f5 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -735,8 +735,8 @@ Patch21260: x86-Avoid-invoking-RCU-when-CPU-is-idle.patch
#rhbz 804957 CVE-2012-1568
Patch21306: shlib_base_randomize.patch
-#rhbz 806676 807632
-Patch21385: libata-disable-runtime-pm-for-hotpluggable-port.patch
+#rhbz 807632
+Patch21385: libata-forbid-port-runtime-pm-by-default.patch
Patch21400: unhandled-irqs-switch-to-polling.patch
@@ -1439,8 +1439,8 @@ ApplyPatch selinux-apply-different-permission-to-ptrace-child.patch
#Highbank clock functions
ApplyPatch highbank-export-clock-functions.patch
-#rhbz 806676 807632
-ApplyPatch libata-disable-runtime-pm-for-hotpluggable-port.patch
+#rhbz 807632
+ApplyPatch libata-forbid-port-runtime-pm-by-default.patch
#vgaarb patches. blame mjg59
ApplyPatch vgaarb-vga_default_device.patch
@@ -2309,6 +2309,9 @@ fi
# ||----w |
# || ||
%changelog
+* Wed Apr 18 2012 Josh Boyer <jwboyer@redhat.com>
+- Change patch to resolve libata hotplug (rhbz 807632)
+
* Tue Apr 17 2012 Josh Boyer <jwboyer@redhat.com>
- Move the dlm module to modules-extra (rhbz 811547)
diff --git a/libata-disable-runtime-pm-for-hotpluggable-port.patch b/libata-disable-runtime-pm-for-hotpluggable-port.patch
deleted file mode 100644
index 06020fdd..00000000
--- a/libata-disable-runtime-pm-for-hotpluggable-port.patch
+++ /dev/null
@@ -1,180 +0,0 @@
-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
-
diff --git a/libata-forbid-port-runtime-pm-by-default.patch b/libata-forbid-port-runtime-pm-by-default.patch
new file mode 100644
index 00000000..0d93a19f
--- /dev/null
+++ b/libata-forbid-port-runtime-pm-by-default.patch
@@ -0,0 +1,24 @@
+From: Lin Ming <ming.m.lin@xxxxxxxxx>
+Date: Wed, 18 Apr 2012 09:13:41 +0800
+Subject: [PATCH] libata: forbid port runtime pm by default
+
+Forbid port runtime pm by default because it has known hotplug issue.
+User can allow it by, for example
+
+echo auto > /sys/devices/pci0000:00/0000:00:1f.2/ata2/power/control
+
+Signed-off-by: Lin Ming <ming.m.lin@xxxxxxxxx>
+---
+ drivers/ata/libata-transport.c | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+--- linux-3.3.noarch.orig/drivers/ata/libata-transport.c
++++ linux-3.3.noarch/drivers/ata/libata-transport.c
+@@ -294,6 +294,7 @@ int ata_tport_add(struct device *parent,
+ device_enable_async_suspend(dev);
+ pm_runtime_set_active(dev);
+ pm_runtime_enable(dev);
++ pm_runtime_forbid(dev);
+
+ transport_add_device(dev);
+ transport_configure_device(dev);