mirror of
https://github.com/genesi/linux-legacy.git
synced 2026-05-19 02:12:43 +00:00
sata_nv: make sure link is brough up online when skipping hardreset
commit 6489e3262e6b188a1a009b65e8a94b7aa17645b7 upstream. 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 Signed-off-by: Jeff Garzik <jgarzik@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
32f4683db4
commit
7613217197
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user