| Submitter | Tejun Heo |
|---|---|
| Date | Oct. 14, 2009, 2:18 a.m. |
| Message ID | <4AD534F4.7000306@kernel.org> |
| Download | mbox | patch |
| Permalink | /patch/35908/ |
| State | Not Applicable |
| Delegated to: | David Miller |
| Headers | show |
Comments
On 10/13/2009 10:18 PM, Tejun Heo wrote: > prereset doesn't bring link online if hardreset is about to happen and > nv_hardreset() may skip if conditions are not right so softreset may > be entered with non-working link status if the system firmware didn't > bring it up before entering OS code which can happen during resume. > This patch makes nv_hardreset() to bring up the link if it's skipping > reset. > > This bug was reported by frodone@gmail.com in the following bug entry. > > http://bugzilla.kernel.org/show_bug.cgi?id=14329 > > Signed-off-by: Tejun Heo<tj@kernel.org> > Reported-by: frodone@gmail.com > Cc: stable@kernel.org > --- > drivers/ata/sata_nv.c | 18 +++++++++++++++--- > 1 file changed, 15 insertions(+), 3 deletions(-) applied -- man, what a pain this chip is -- 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
Patch
diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c index 86a4058..1eb4e02 100644 --- a/drivers/ata/sata_nv.c +++ b/drivers/ata/sata_nv.c @@ -1594,9 +1594,21 @@ static int nv_hardreset(struct ata_link *link, unsigned int *class, !ata_dev_enabled(link->device)) sata_link_hardreset(link, sata_deb_timing_hotplug, deadline, NULL, NULL); - else if (!(ehc->i.flags & ATA_EHI_QUIET)) - ata_link_printk(link, KERN_INFO, - "nv: skipping hardreset on occupied port\n"); + else { + const unsigned long *timing = sata_ehc_deb_timing(ehc); + int rc; + + if (!(ehc->i.flags & ATA_EHI_QUIET)) + ata_link_printk(link, KERN_INFO, "nv: skipping " + "hardreset on occupied port\n"); + + /* make sure the link is online */ + rc = sata_link_resume(link, timing, deadline); + /* whine about phy resume failure but proceed */ + if (rc && rc != -EOPNOTSUPP) + ata_link_printk(link, KERN_WARNING, "failed to resume " + "link (errno=%d)\n", rc); + } /* device signature acquisition is unreliable */ return -EAGAIN;
prereset doesn't bring link online if hardreset is about to happen and nv_hardreset() may skip if conditions are not right so softreset may be entered with non-working link status if the system firmware didn't bring it up before entering OS code which can happen during resume. This patch makes nv_hardreset() to bring up the link if it's skipping reset. This bug was reported by frodone@gmail.com in the following bug entry. http://bugzilla.kernel.org/show_bug.cgi?id=14329 Signed-off-by: Tejun Heo <tj@kernel.org> Reported-by: frodone@gmail.com Cc: stable@kernel.org --- drivers/ata/sata_nv.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) -- 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