|
@@ -2802,10 +2802,11 @@ int ata_eh_reset(struct ata_link *link, int classify,
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * Some controllers can't be frozen very well and may set
|
|
|
- * spuruious error conditions during reset. Clear accumulated
|
|
|
- * error information. As reset is the final recovery action,
|
|
|
- * nothing is lost by doing this.
|
|
|
+ * Some controllers can't be frozen very well and may set spurious
|
|
|
+ * error conditions during reset. Clear accumulated error
|
|
|
+ * information and re-thaw the port if frozen. As reset is the
|
|
|
+ * final recovery action and we cross check link onlineness against
|
|
|
+ * device classification later, no hotplug event is lost by this.
|
|
|
*/
|
|
|
spin_lock_irqsave(link->ap->lock, flags);
|
|
|
memset(&link->eh_info, 0, sizeof(link->eh_info));
|
|
@@ -2814,6 +2815,9 @@ int ata_eh_reset(struct ata_link *link, int classify,
|
|
|
ap->pflags &= ~ATA_PFLAG_EH_PENDING;
|
|
|
spin_unlock_irqrestore(link->ap->lock, flags);
|
|
|
|
|
|
+ if (ap->pflags & ATA_PFLAG_FROZEN)
|
|
|
+ ata_eh_thaw_port(ap);
|
|
|
+
|
|
|
/*
|
|
|
* Make sure onlineness and classification result correspond.
|
|
|
* Hotplug could have happened during reset and some
|