diff --git a/kernel.spec b/kernel.spec index b45494666..91f665f56 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 +- Change patch to resolve libata hotplug (rhbz 807632) + * Tue Apr 17 2012 Josh Boyer - 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 06020fdde..000000000 --- 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 -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 , - jslaby@suse.cz, cwillu@cwillu.com, jackdachef@gmail.com, - Sergei Shtylyov -To: Jeff Garzik -Original-X-From: linux-ide-owner@vger.kernel.org Tue Mar 13 02:57:43 2012 -Return-path: -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 ) - 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 ); - 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 ); - 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: -X-Mailing-List: linux-ide@vger.kernel.org -Xref: news.gmane.org gmane.linux.ide:51560 gmane.linux.kernel:1266262 -Archived-At: - -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 -Reported-and-tested-by: cwillu@cwillu.com -Reported-and-tested-by: jackdachef@gmail.com -Signed-off-by: Lin Ming ---- - 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 000000000..0d93a19f5 --- /dev/null +++ b/libata-forbid-port-runtime-pm-by-default.patch @@ -0,0 +1,24 @@ +From: Lin Ming +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 +--- + 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);