[PATCH] UBUNTU: SAUCE: Fixed ata error message printing when sb600 workaround is tried out
Surbhi Palande
surbhi.palande at canonical.com
Fri Oct 9 12:53:17 UTC 2009
This patch fixes bug 444228 reported in launchpad.
It prevents early erroneous printing of ata error message.
It helps in a clean boot sequence.
This could also be applied for a merge upstream. Kindly do consider
merging this for Karmic.
The following changes since commit 823da90960aa2f2442bec8cb0dc711b49f7a48ca:
John Johansen (1):
UBUNTU: SAUCE: AppArmor: Fix off by 2 error in getprocattr mem
allocation
are available in the git repository at:
git://kernel.ubuntu.com/surbhi/ubuntu-karmic.git lp444228
Surbhi Palande (1):
UBUNTU: SAUCE: Fixed ata error message printing when sb600 work around
for a hardware bug is tried out
drivers/ata/ahci.c | 17 +++++++++++++++++
1 files changed, 17 insertions(+), 0 deletions(-)
>From 4ad8fa70a83537307bec3300c318194e7e2188cc
Author: Surbhi Palande <surbhi.palande at canonical.com>
Date: Fri Oct 9 15:02:09 2009 +0300
Buglink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/444228
Soft reset fails on some ATI chips with IPMS set when PMP is enabled but
SATA HDD/ODD is connected to SATA port. This is a hardware bug and a work
around is to try a soft reset later at port 0. Before this work around is
tried out a error message indicating that the device is not ready was
flashed out too early. Fixed this, to first try the work around if possible,
otherwise flash an error message.
Signed-off-by: Surbhi Palande <surbhi.palande at canonical.com>
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 289c4f8..1af5203 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -1704,6 +1704,15 @@ static int ahci_do_softreset(struct ata_link *link, unsigned int *class,
/* wait for link to become ready */
rc = ata_wait_after_reset(link, deadline, check_ready);
+
+ /*
+ * Soft reset fails on some ATI chips with IPMS set when PMP
+ * is enabled but SATA HDD/ODD is connected to SATA port.
+ * A workaround shall be applied in the calling function
+ * and we dont want to print error message without trying first
+ */
+ if (rc == -EIO)
+ return rc;
if (rc == -EBUSY && hpriv->flags & AHCI_HFLAG_SRST_TOUT_IS_OFFLINE) {
/*
* Workaround for cases where link online status can't
@@ -1789,6 +1798,14 @@ static int ahci_sb600_softreset(struct ata_link *link, unsigned int *class,
"and retrying\n");
rc = ahci_do_softreset(link, class, 0, deadline,
ahci_check_ready);
+ } else {
+ /* since no message was printed in ahci_do_softreset
+ * when ret value was -EIO and since we are not trying
+ * any work around, we should print the err msg here,
+ * (ideally we should not reach here)
+ */
+ ata_link_printk(link, KERN_ERR, "softreset failed "
+ "(device not ready)\n");
}
}
More information about the kernel-team
mailing list