Merge tag 'nds32-for-linus-4.18' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / drivers / ata / libata-eh.c
1 /*
2  *  libata-eh.c - libata error handling
3  *
4  *  Maintained by:  Tejun Heo <tj@kernel.org>
5  *                  Please ALWAYS copy linux-ide@vger.kernel.org
6  *                  on emails.
7  *
8  *  Copyright 2006 Tejun Heo <htejun@gmail.com>
9  *
10  *
11  *  This program is free software; you can redistribute it and/or
12  *  modify it under the terms of the GNU General Public License as
13  *  published by the Free Software Foundation; either version 2, or
14  *  (at your option) any later version.
15  *
16  *  This program is distributed in the hope that it will be useful,
17  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  *  General Public License for more details.
20  *
21  *  You should have received a copy of the GNU General Public License
22  *  along with this program; see the file COPYING.  If not, write to
23  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
24  *  USA.
25  *
26  *
27  *  libata documentation is available via 'make {ps|pdf}docs',
28  *  as Documentation/driver-api/libata.rst
29  *
30  *  Hardware documentation available from http://www.t13.org/ and
31  *  http://www.sata-io.org/
32  *
33  */
34
35 #include <linux/kernel.h>
36 #include <linux/blkdev.h>
37 #include <linux/export.h>
38 #include <linux/pci.h>
39 #include <scsi/scsi.h>
40 #include <scsi/scsi_host.h>
41 #include <scsi/scsi_eh.h>
42 #include <scsi/scsi_device.h>
43 #include <scsi/scsi_cmnd.h>
44 #include <scsi/scsi_dbg.h>
45 #include "../scsi/scsi_transport_api.h"
46
47 #include <linux/libata.h>
48
49 #include <trace/events/libata.h>
50 #include "libata.h"
51
52 enum {
53         /* speed down verdicts */
54         ATA_EH_SPDN_NCQ_OFF             = (1 << 0),
55         ATA_EH_SPDN_SPEED_DOWN          = (1 << 1),
56         ATA_EH_SPDN_FALLBACK_TO_PIO     = (1 << 2),
57         ATA_EH_SPDN_KEEP_ERRORS         = (1 << 3),
58
59         /* error flags */
60         ATA_EFLAG_IS_IO                 = (1 << 0),
61         ATA_EFLAG_DUBIOUS_XFER          = (1 << 1),
62         ATA_EFLAG_OLD_ER                = (1 << 31),
63
64         /* error categories */
65         ATA_ECAT_NONE                   = 0,
66         ATA_ECAT_ATA_BUS                = 1,
67         ATA_ECAT_TOUT_HSM               = 2,
68         ATA_ECAT_UNK_DEV                = 3,
69         ATA_ECAT_DUBIOUS_NONE           = 4,
70         ATA_ECAT_DUBIOUS_ATA_BUS        = 5,
71         ATA_ECAT_DUBIOUS_TOUT_HSM       = 6,
72         ATA_ECAT_DUBIOUS_UNK_DEV        = 7,
73         ATA_ECAT_NR                     = 8,
74
75         ATA_EH_CMD_DFL_TIMEOUT          =  5000,
76
77         /* always put at least this amount of time between resets */
78         ATA_EH_RESET_COOL_DOWN          =  5000,
79
80         /* Waiting in ->prereset can never be reliable.  It's
81          * sometimes nice to wait there but it can't be depended upon;
82          * otherwise, we wouldn't be resetting.  Just give it enough
83          * time for most drives to spin up.
84          */
85         ATA_EH_PRERESET_TIMEOUT         = 10000,
86         ATA_EH_FASTDRAIN_INTERVAL       =  3000,
87
88         ATA_EH_UA_TRIES                 = 5,
89
90         /* probe speed down parameters, see ata_eh_schedule_probe() */
91         ATA_EH_PROBE_TRIAL_INTERVAL     = 60000,        /* 1 min */
92         ATA_EH_PROBE_TRIALS             = 2,
93 };
94
95 /* The following table determines how we sequence resets.  Each entry
96  * represents timeout for that try.  The first try can be soft or
97  * hardreset.  All others are hardreset if available.  In most cases
98  * the first reset w/ 10sec timeout should succeed.  Following entries
99  * are mostly for error handling, hotplug and those outlier devices that
100  * take an exceptionally long time to recover from reset.
101  */
102 static const unsigned long ata_eh_reset_timeouts[] = {
103         10000,  /* most drives spin up by 10sec */
104         10000,  /* > 99% working drives spin up before 20sec */
105         35000,  /* give > 30 secs of idleness for outlier devices */
106          5000,  /* and sweet one last chance */
107         ULONG_MAX, /* > 1 min has elapsed, give up */
108 };
109
110 static const unsigned long ata_eh_identify_timeouts[] = {
111          5000,  /* covers > 99% of successes and not too boring on failures */
112         10000,  /* combined time till here is enough even for media access */
113         30000,  /* for true idiots */
114         ULONG_MAX,
115 };
116
117 static const unsigned long ata_eh_flush_timeouts[] = {
118         15000,  /* be generous with flush */
119         15000,  /* ditto */
120         30000,  /* and even more generous */
121         ULONG_MAX,
122 };
123
124 static const unsigned long ata_eh_other_timeouts[] = {
125          5000,  /* same rationale as identify timeout */
126         10000,  /* ditto */
127         /* but no merciful 30sec for other commands, it just isn't worth it */
128         ULONG_MAX,
129 };
130
131 struct ata_eh_cmd_timeout_ent {
132         const u8                *commands;
133         const unsigned long     *timeouts;
134 };
135
136 /* The following table determines timeouts to use for EH internal
137  * commands.  Each table entry is a command class and matches the
138  * commands the entry applies to and the timeout table to use.
139  *
140  * On the retry after a command timed out, the next timeout value from
141  * the table is used.  If the table doesn't contain further entries,
142  * the last value is used.
143  *
144  * ehc->cmd_timeout_idx keeps track of which timeout to use per
145  * command class, so if SET_FEATURES times out on the first try, the
146  * next try will use the second timeout value only for that class.
147  */
148 #define CMDS(cmds...)   (const u8 []){ cmds, 0 }
149 static const struct ata_eh_cmd_timeout_ent
150 ata_eh_cmd_timeout_table[ATA_EH_CMD_TIMEOUT_TABLE_SIZE] = {
151         { .commands = CMDS(ATA_CMD_ID_ATA, ATA_CMD_ID_ATAPI),
152           .timeouts = ata_eh_identify_timeouts, },
153         { .commands = CMDS(ATA_CMD_READ_NATIVE_MAX, ATA_CMD_READ_NATIVE_MAX_EXT),
154           .timeouts = ata_eh_other_timeouts, },
155         { .commands = CMDS(ATA_CMD_SET_MAX, ATA_CMD_SET_MAX_EXT),
156           .timeouts = ata_eh_other_timeouts, },
157         { .commands = CMDS(ATA_CMD_SET_FEATURES),
158           .timeouts = ata_eh_other_timeouts, },
159         { .commands = CMDS(ATA_CMD_INIT_DEV_PARAMS),
160           .timeouts = ata_eh_other_timeouts, },
161         { .commands = CMDS(ATA_CMD_FLUSH, ATA_CMD_FLUSH_EXT),
162           .timeouts = ata_eh_flush_timeouts },
163 };
164 #undef CMDS
165
166 static void __ata_port_freeze(struct ata_port *ap);
167 #ifdef CONFIG_PM
168 static void ata_eh_handle_port_suspend(struct ata_port *ap);
169 static void ata_eh_handle_port_resume(struct ata_port *ap);
170 #else /* CONFIG_PM */
171 static void ata_eh_handle_port_suspend(struct ata_port *ap)
172 { }
173
174 static void ata_eh_handle_port_resume(struct ata_port *ap)
175 { }
176 #endif /* CONFIG_PM */
177
178 static __printf(2, 0) void __ata_ehi_pushv_desc(struct ata_eh_info *ehi,
179                                  const char *fmt, va_list args)
180 {
181         ehi->desc_len += vscnprintf(ehi->desc + ehi->desc_len,
182                                      ATA_EH_DESC_LEN - ehi->desc_len,
183                                      fmt, args);
184 }
185
186 /**
187  *      __ata_ehi_push_desc - push error description without adding separator
188  *      @ehi: target EHI
189  *      @fmt: printf format string
190  *
191  *      Format string according to @fmt and append it to @ehi->desc.
192  *
193  *      LOCKING:
194  *      spin_lock_irqsave(host lock)
195  */
196 void __ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...)
197 {
198         va_list args;
199
200         va_start(args, fmt);
201         __ata_ehi_pushv_desc(ehi, fmt, args);
202         va_end(args);
203 }
204
205 /**
206  *      ata_ehi_push_desc - push error description with separator
207  *      @ehi: target EHI
208  *      @fmt: printf format string
209  *
210  *      Format string according to @fmt and append it to @ehi->desc.
211  *      If @ehi->desc is not empty, ", " is added in-between.
212  *
213  *      LOCKING:
214  *      spin_lock_irqsave(host lock)
215  */
216 void ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...)
217 {
218         va_list args;
219
220         if (ehi->desc_len)
221                 __ata_ehi_push_desc(ehi, ", ");
222
223         va_start(args, fmt);
224         __ata_ehi_pushv_desc(ehi, fmt, args);
225         va_end(args);
226 }
227
228 /**
229  *      ata_ehi_clear_desc - clean error description
230  *      @ehi: target EHI
231  *
232  *      Clear @ehi->desc.
233  *
234  *      LOCKING:
235  *      spin_lock_irqsave(host lock)
236  */
237 void ata_ehi_clear_desc(struct ata_eh_info *ehi)
238 {
239         ehi->desc[0] = '\0';
240         ehi->desc_len = 0;
241 }
242
243 /**
244  *      ata_port_desc - append port description
245  *      @ap: target ATA port
246  *      @fmt: printf format string
247  *
248  *      Format string according to @fmt and append it to port
249  *      description.  If port description is not empty, " " is added
250  *      in-between.  This function is to be used while initializing
251  *      ata_host.  The description is printed on host registration.
252  *
253  *      LOCKING:
254  *      None.
255  */
256 void ata_port_desc(struct ata_port *ap, const char *fmt, ...)
257 {
258         va_list args;
259
260         WARN_ON(!(ap->pflags & ATA_PFLAG_INITIALIZING));
261
262         if (ap->link.eh_info.desc_len)
263                 __ata_ehi_push_desc(&ap->link.eh_info, " ");
264
265         va_start(args, fmt);
266         __ata_ehi_pushv_desc(&ap->link.eh_info, fmt, args);
267         va_end(args);
268 }
269
270 #ifdef CONFIG_PCI
271
272 /**
273  *      ata_port_pbar_desc - append PCI BAR description
274  *      @ap: target ATA port
275  *      @bar: target PCI BAR
276  *      @offset: offset into PCI BAR
277  *      @name: name of the area
278  *
279  *      If @offset is negative, this function formats a string which
280  *      contains the name, address, size and type of the BAR and
281  *      appends it to the port description.  If @offset is zero or
282  *      positive, only name and offsetted address is appended.
283  *
284  *      LOCKING:
285  *      None.
286  */
287 void ata_port_pbar_desc(struct ata_port *ap, int bar, ssize_t offset,
288                         const char *name)
289 {
290         struct pci_dev *pdev = to_pci_dev(ap->host->dev);
291         char *type = "";
292         unsigned long long start, len;
293
294         if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM)
295                 type = "m";
296         else if (pci_resource_flags(pdev, bar) & IORESOURCE_IO)
297                 type = "i";
298
299         start = (unsigned long long)pci_resource_start(pdev, bar);
300         len = (unsigned long long)pci_resource_len(pdev, bar);
301
302         if (offset < 0)
303                 ata_port_desc(ap, "%s %s%llu@0x%llx", name, type, len, start);
304         else
305                 ata_port_desc(ap, "%s 0x%llx", name,
306                                 start + (unsigned long long)offset);
307 }
308
309 #endif /* CONFIG_PCI */
310
311 static int ata_lookup_timeout_table(u8 cmd)
312 {
313         int i;
314
315         for (i = 0; i < ATA_EH_CMD_TIMEOUT_TABLE_SIZE; i++) {
316                 const u8 *cur;
317
318                 for (cur = ata_eh_cmd_timeout_table[i].commands; *cur; cur++)
319                         if (*cur == cmd)
320                                 return i;
321         }
322
323         return -1;
324 }
325
326 /**
327  *      ata_internal_cmd_timeout - determine timeout for an internal command
328  *      @dev: target device
329  *      @cmd: internal command to be issued
330  *
331  *      Determine timeout for internal command @cmd for @dev.
332  *
333  *      LOCKING:
334  *      EH context.
335  *
336  *      RETURNS:
337  *      Determined timeout.
338  */
339 unsigned long ata_internal_cmd_timeout(struct ata_device *dev, u8 cmd)
340 {
341         struct ata_eh_context *ehc = &dev->link->eh_context;
342         int ent = ata_lookup_timeout_table(cmd);
343         int idx;
344
345         if (ent < 0)
346                 return ATA_EH_CMD_DFL_TIMEOUT;
347
348         idx = ehc->cmd_timeout_idx[dev->devno][ent];
349         return ata_eh_cmd_timeout_table[ent].timeouts[idx];
350 }
351
352 /**
353  *      ata_internal_cmd_timed_out - notification for internal command timeout
354  *      @dev: target device
355  *      @cmd: internal command which timed out
356  *
357  *      Notify EH that internal command @cmd for @dev timed out.  This
358  *      function should be called only for commands whose timeouts are
359  *      determined using ata_internal_cmd_timeout().
360  *
361  *      LOCKING:
362  *      EH context.
363  */
364 void ata_internal_cmd_timed_out(struct ata_device *dev, u8 cmd)
365 {
366         struct ata_eh_context *ehc = &dev->link->eh_context;
367         int ent = ata_lookup_timeout_table(cmd);
368         int idx;
369
370         if (ent < 0)
371                 return;
372
373         idx = ehc->cmd_timeout_idx[dev->devno][ent];
374         if (ata_eh_cmd_timeout_table[ent].timeouts[idx + 1] != ULONG_MAX)
375                 ehc->cmd_timeout_idx[dev->devno][ent]++;
376 }
377
378 static void ata_ering_record(struct ata_ering *ering, unsigned int eflags,
379                              unsigned int err_mask)
380 {
381         struct ata_ering_entry *ent;
382
383         WARN_ON(!err_mask);
384
385         ering->cursor++;
386         ering->cursor %= ATA_ERING_SIZE;
387
388         ent = &ering->ring[ering->cursor];
389         ent->eflags = eflags;
390         ent->err_mask = err_mask;
391         ent->timestamp = get_jiffies_64();
392 }
393
394 static struct ata_ering_entry *ata_ering_top(struct ata_ering *ering)
395 {
396         struct ata_ering_entry *ent = &ering->ring[ering->cursor];
397
398         if (ent->err_mask)
399                 return ent;
400         return NULL;
401 }
402
403 int ata_ering_map(struct ata_ering *ering,
404                   int (*map_fn)(struct ata_ering_entry *, void *),
405                   void *arg)
406 {
407         int idx, rc = 0;
408         struct ata_ering_entry *ent;
409
410         idx = ering->cursor;
411         do {
412                 ent = &ering->ring[idx];
413                 if (!ent->err_mask)
414                         break;
415                 rc = map_fn(ent, arg);
416                 if (rc)
417                         break;
418                 idx = (idx - 1 + ATA_ERING_SIZE) % ATA_ERING_SIZE;
419         } while (idx != ering->cursor);
420
421         return rc;
422 }
423
424 static int ata_ering_clear_cb(struct ata_ering_entry *ent, void *void_arg)
425 {
426         ent->eflags |= ATA_EFLAG_OLD_ER;
427         return 0;
428 }
429
430 static void ata_ering_clear(struct ata_ering *ering)
431 {
432         ata_ering_map(ering, ata_ering_clear_cb, NULL);
433 }
434
435 static unsigned int ata_eh_dev_action(struct ata_device *dev)
436 {
437         struct ata_eh_context *ehc = &dev->link->eh_context;
438
439         return ehc->i.action | ehc->i.dev_action[dev->devno];
440 }
441
442 static void ata_eh_clear_action(struct ata_link *link, struct ata_device *dev,
443                                 struct ata_eh_info *ehi, unsigned int action)
444 {
445         struct ata_device *tdev;
446
447         if (!dev) {
448                 ehi->action &= ~action;
449                 ata_for_each_dev(tdev, link, ALL)
450                         ehi->dev_action[tdev->devno] &= ~action;
451         } else {
452                 /* doesn't make sense for port-wide EH actions */
453                 WARN_ON(!(action & ATA_EH_PERDEV_MASK));
454
455                 /* break ehi->action into ehi->dev_action */
456                 if (ehi->action & action) {
457                         ata_for_each_dev(tdev, link, ALL)
458                                 ehi->dev_action[tdev->devno] |=
459                                         ehi->action & action;
460                         ehi->action &= ~action;
461                 }
462
463                 /* turn off the specified per-dev action */
464                 ehi->dev_action[dev->devno] &= ~action;
465         }
466 }
467
468 /**
469  *      ata_eh_acquire - acquire EH ownership
470  *      @ap: ATA port to acquire EH ownership for
471  *
472  *      Acquire EH ownership for @ap.  This is the basic exclusion
473  *      mechanism for ports sharing a host.  Only one port hanging off
474  *      the same host can claim the ownership of EH.
475  *
476  *      LOCKING:
477  *      EH context.
478  */
479 void ata_eh_acquire(struct ata_port *ap)
480 {
481         mutex_lock(&ap->host->eh_mutex);
482         WARN_ON_ONCE(ap->host->eh_owner);
483         ap->host->eh_owner = current;
484 }
485
486 /**
487  *      ata_eh_release - release EH ownership
488  *      @ap: ATA port to release EH ownership for
489  *
490  *      Release EH ownership for @ap if the caller.  The caller must
491  *      have acquired EH ownership using ata_eh_acquire() previously.
492  *
493  *      LOCKING:
494  *      EH context.
495  */
496 void ata_eh_release(struct ata_port *ap)
497 {
498         WARN_ON_ONCE(ap->host->eh_owner != current);
499         ap->host->eh_owner = NULL;
500         mutex_unlock(&ap->host->eh_mutex);
501 }
502
503 static void ata_eh_unload(struct ata_port *ap)
504 {
505         struct ata_link *link;
506         struct ata_device *dev;
507         unsigned long flags;
508
509         /* Restore SControl IPM and SPD for the next driver and
510          * disable attached devices.
511          */
512         ata_for_each_link(link, ap, PMP_FIRST) {
513                 sata_scr_write(link, SCR_CONTROL, link->saved_scontrol & 0xff0);
514                 ata_for_each_dev(dev, link, ALL)
515                         ata_dev_disable(dev);
516         }
517
518         /* freeze and set UNLOADED */
519         spin_lock_irqsave(ap->lock, flags);
520
521         ata_port_freeze(ap);                    /* won't be thawed */
522         ap->pflags &= ~ATA_PFLAG_EH_PENDING;    /* clear pending from freeze */
523         ap->pflags |= ATA_PFLAG_UNLOADED;
524
525         spin_unlock_irqrestore(ap->lock, flags);
526 }
527
528 /**
529  *      ata_scsi_error - SCSI layer error handler callback
530  *      @host: SCSI host on which error occurred
531  *
532  *      Handles SCSI-layer-thrown error events.
533  *
534  *      LOCKING:
535  *      Inherited from SCSI layer (none, can sleep)
536  *
537  *      RETURNS:
538  *      Zero.
539  */
540 void ata_scsi_error(struct Scsi_Host *host)
541 {
542         struct ata_port *ap = ata_shost_to_port(host);
543         unsigned long flags;
544         LIST_HEAD(eh_work_q);
545
546         DPRINTK("ENTER\n");
547
548         spin_lock_irqsave(host->host_lock, flags);
549         list_splice_init(&host->eh_cmd_q, &eh_work_q);
550         spin_unlock_irqrestore(host->host_lock, flags);
551
552         ata_scsi_cmd_error_handler(host, ap, &eh_work_q);
553
554         /* If we timed raced normal completion and there is nothing to
555            recover nr_timedout == 0 why exactly are we doing error recovery ? */
556         ata_scsi_port_error_handler(host, ap);
557
558         /* finish or retry handled scmd's and clean up */
559         WARN_ON(!list_empty(&eh_work_q));
560
561         DPRINTK("EXIT\n");
562 }
563
564 /**
565  * ata_scsi_cmd_error_handler - error callback for a list of commands
566  * @host:       scsi host containing the port
567  * @ap:         ATA port within the host
568  * @eh_work_q:  list of commands to process
569  *
570  * process the given list of commands and return those finished to the
571  * ap->eh_done_q.  This function is the first part of the libata error
572  * handler which processes a given list of failed commands.
573  */
574 void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port *ap,
575                                 struct list_head *eh_work_q)
576 {
577         int i;
578         unsigned long flags;
579
580         /* make sure sff pio task is not running */
581         ata_sff_flush_pio_task(ap);
582
583         /* synchronize with host lock and sort out timeouts */
584
585         /* For new EH, all qcs are finished in one of three ways -
586          * normal completion, error completion, and SCSI timeout.
587          * Both completions can race against SCSI timeout.  When normal
588          * completion wins, the qc never reaches EH.  When error
589          * completion wins, the qc has ATA_QCFLAG_FAILED set.
590          *
591          * When SCSI timeout wins, things are a bit more complex.
592          * Normal or error completion can occur after the timeout but
593          * before this point.  In such cases, both types of
594          * completions are honored.  A scmd is determined to have
595          * timed out iff its associated qc is active and not failed.
596          */
597         spin_lock_irqsave(ap->lock, flags);
598         if (ap->ops->error_handler) {
599                 struct scsi_cmnd *scmd, *tmp;
600                 int nr_timedout = 0;
601
602                 /* This must occur under the ap->lock as we don't want
603                    a polled recovery to race the real interrupt handler
604
605                    The lost_interrupt handler checks for any completed but
606                    non-notified command and completes much like an IRQ handler.
607
608                    We then fall into the error recovery code which will treat
609                    this as if normal completion won the race */
610
611                 if (ap->ops->lost_interrupt)
612                         ap->ops->lost_interrupt(ap);
613
614                 list_for_each_entry_safe(scmd, tmp, eh_work_q, eh_entry) {
615                         struct ata_queued_cmd *qc;
616
617                         ata_qc_for_each_raw(ap, qc, i) {
618                                 if (qc->flags & ATA_QCFLAG_ACTIVE &&
619                                     qc->scsicmd == scmd)
620                                         break;
621                         }
622
623                         if (i < ATA_MAX_QUEUE) {
624                                 /* the scmd has an associated qc */
625                                 if (!(qc->flags & ATA_QCFLAG_FAILED)) {
626                                         /* which hasn't failed yet, timeout */
627                                         qc->err_mask |= AC_ERR_TIMEOUT;
628                                         qc->flags |= ATA_QCFLAG_FAILED;
629                                         nr_timedout++;
630                                 }
631                         } else {
632                                 /* Normal completion occurred after
633                                  * SCSI timeout but before this point.
634                                  * Successfully complete it.
635                                  */
636                                 scmd->retries = scmd->allowed;
637                                 scsi_eh_finish_cmd(scmd, &ap->eh_done_q);
638                         }
639                 }
640
641                 /* If we have timed out qcs.  They belong to EH from
642                  * this point but the state of the controller is
643                  * unknown.  Freeze the port to make sure the IRQ
644                  * handler doesn't diddle with those qcs.  This must
645                  * be done atomically w.r.t. setting QCFLAG_FAILED.
646                  */
647                 if (nr_timedout)
648                         __ata_port_freeze(ap);
649
650
651                 /* initialize eh_tries */
652                 ap->eh_tries = ATA_EH_MAX_TRIES;
653         }
654         spin_unlock_irqrestore(ap->lock, flags);
655
656 }
657 EXPORT_SYMBOL(ata_scsi_cmd_error_handler);
658
659 /**
660  * ata_scsi_port_error_handler - recover the port after the commands
661  * @host:       SCSI host containing the port
662  * @ap:         the ATA port
663  *
664  * Handle the recovery of the port @ap after all the commands
665  * have been recovered.
666  */
667 void ata_scsi_port_error_handler(struct Scsi_Host *host, struct ata_port *ap)
668 {
669         unsigned long flags;
670
671         /* invoke error handler */
672         if (ap->ops->error_handler) {
673                 struct ata_link *link;
674
675                 /* acquire EH ownership */
676                 ata_eh_acquire(ap);
677  repeat:
678                 /* kill fast drain timer */
679                 del_timer_sync(&ap->fastdrain_timer);
680
681                 /* process port resume request */
682                 ata_eh_handle_port_resume(ap);
683
684                 /* fetch & clear EH info */
685                 spin_lock_irqsave(ap->lock, flags);
686
687                 ata_for_each_link(link, ap, HOST_FIRST) {
688                         struct ata_eh_context *ehc = &link->eh_context;
689                         struct ata_device *dev;
690
691                         memset(&link->eh_context, 0, sizeof(link->eh_context));
692                         link->eh_context.i = link->eh_info;
693                         memset(&link->eh_info, 0, sizeof(link->eh_info));
694
695                         ata_for_each_dev(dev, link, ENABLED) {
696                                 int devno = dev->devno;
697
698                                 ehc->saved_xfer_mode[devno] = dev->xfer_mode;
699                                 if (ata_ncq_enabled(dev))
700                                         ehc->saved_ncq_enabled |= 1 << devno;
701                         }
702                 }
703
704                 ap->pflags |= ATA_PFLAG_EH_IN_PROGRESS;
705                 ap->pflags &= ~ATA_PFLAG_EH_PENDING;
706                 ap->excl_link = NULL;   /* don't maintain exclusion over EH */
707
708                 spin_unlock_irqrestore(ap->lock, flags);
709
710                 /* invoke EH, skip if unloading or suspended */
711                 if (!(ap->pflags & (ATA_PFLAG_UNLOADING | ATA_PFLAG_SUSPENDED)))
712                         ap->ops->error_handler(ap);
713                 else {
714                         /* if unloading, commence suicide */
715                         if ((ap->pflags & ATA_PFLAG_UNLOADING) &&
716                             !(ap->pflags & ATA_PFLAG_UNLOADED))
717                                 ata_eh_unload(ap);
718                         ata_eh_finish(ap);
719                 }
720
721                 /* process port suspend request */
722                 ata_eh_handle_port_suspend(ap);
723
724                 /* Exception might have happened after ->error_handler
725                  * recovered the port but before this point.  Repeat
726                  * EH in such case.
727                  */
728                 spin_lock_irqsave(ap->lock, flags);
729
730                 if (ap->pflags & ATA_PFLAG_EH_PENDING) {
731                         if (--ap->eh_tries) {
732                                 spin_unlock_irqrestore(ap->lock, flags);
733                                 goto repeat;
734                         }
735                         ata_port_err(ap,
736                                      "EH pending after %d tries, giving up\n",
737                                      ATA_EH_MAX_TRIES);
738                         ap->pflags &= ~ATA_PFLAG_EH_PENDING;
739                 }
740
741                 /* this run is complete, make sure EH info is clear */
742                 ata_for_each_link(link, ap, HOST_FIRST)
743                         memset(&link->eh_info, 0, sizeof(link->eh_info));
744
745                 /* end eh (clear host_eh_scheduled) while holding
746                  * ap->lock such that if exception occurs after this
747                  * point but before EH completion, SCSI midlayer will
748                  * re-initiate EH.
749                  */
750                 ap->ops->end_eh(ap);
751
752                 spin_unlock_irqrestore(ap->lock, flags);
753                 ata_eh_release(ap);
754         } else {
755                 WARN_ON(ata_qc_from_tag(ap, ap->link.active_tag) == NULL);
756                 ap->ops->eng_timeout(ap);
757         }
758
759         scsi_eh_flush_done_q(&ap->eh_done_q);
760
761         /* clean up */
762         spin_lock_irqsave(ap->lock, flags);
763
764         if (ap->pflags & ATA_PFLAG_LOADING)
765                 ap->pflags &= ~ATA_PFLAG_LOADING;
766         else if ((ap->pflags & ATA_PFLAG_SCSI_HOTPLUG) &&
767                 !(ap->flags & ATA_FLAG_SAS_HOST))
768                 schedule_delayed_work(&ap->hotplug_task, 0);
769
770         if (ap->pflags & ATA_PFLAG_RECOVERED)
771                 ata_port_info(ap, "EH complete\n");
772
773         ap->pflags &= ~(ATA_PFLAG_SCSI_HOTPLUG | ATA_PFLAG_RECOVERED);
774
775         /* tell wait_eh that we're done */
776         ap->pflags &= ~ATA_PFLAG_EH_IN_PROGRESS;
777         wake_up_all(&ap->eh_wait_q);
778
779         spin_unlock_irqrestore(ap->lock, flags);
780 }
781 EXPORT_SYMBOL_GPL(ata_scsi_port_error_handler);
782
783 /**
784  *      ata_port_wait_eh - Wait for the currently pending EH to complete
785  *      @ap: Port to wait EH for
786  *
787  *      Wait until the currently pending EH is complete.
788  *
789  *      LOCKING:
790  *      Kernel thread context (may sleep).
791  */
792 void ata_port_wait_eh(struct ata_port *ap)
793 {
794         unsigned long flags;
795         DEFINE_WAIT(wait);
796
797  retry:
798         spin_lock_irqsave(ap->lock, flags);
799
800         while (ap->pflags & (ATA_PFLAG_EH_PENDING | ATA_PFLAG_EH_IN_PROGRESS)) {
801                 prepare_to_wait(&ap->eh_wait_q, &wait, TASK_UNINTERRUPTIBLE);
802                 spin_unlock_irqrestore(ap->lock, flags);
803                 schedule();
804                 spin_lock_irqsave(ap->lock, flags);
805         }
806         finish_wait(&ap->eh_wait_q, &wait);
807
808         spin_unlock_irqrestore(ap->lock, flags);
809
810         /* make sure SCSI EH is complete */
811         if (scsi_host_in_recovery(ap->scsi_host)) {
812                 ata_msleep(ap, 10);
813                 goto retry;
814         }
815 }
816 EXPORT_SYMBOL_GPL(ata_port_wait_eh);
817
818 static int ata_eh_nr_in_flight(struct ata_port *ap)
819 {
820         struct ata_queued_cmd *qc;
821         unsigned int tag;
822         int nr = 0;
823
824         /* count only non-internal commands */
825         ata_qc_for_each(ap, qc, tag) {
826                 if (qc)
827                         nr++;
828         }
829
830         return nr;
831 }
832
833 void ata_eh_fastdrain_timerfn(struct timer_list *t)
834 {
835         struct ata_port *ap = from_timer(ap, t, fastdrain_timer);
836         unsigned long flags;
837         int cnt;
838
839         spin_lock_irqsave(ap->lock, flags);
840
841         cnt = ata_eh_nr_in_flight(ap);
842
843         /* are we done? */
844         if (!cnt)
845                 goto out_unlock;
846
847         if (cnt == ap->fastdrain_cnt) {
848                 struct ata_queued_cmd *qc;
849                 unsigned int tag;
850
851                 /* No progress during the last interval, tag all
852                  * in-flight qcs as timed out and freeze the port.
853                  */
854                 ata_qc_for_each(ap, qc, tag) {
855                         if (qc)
856                                 qc->err_mask |= AC_ERR_TIMEOUT;
857                 }
858
859                 ata_port_freeze(ap);
860         } else {
861                 /* some qcs have finished, give it another chance */
862                 ap->fastdrain_cnt = cnt;
863                 ap->fastdrain_timer.expires =
864                         ata_deadline(jiffies, ATA_EH_FASTDRAIN_INTERVAL);
865                 add_timer(&ap->fastdrain_timer);
866         }
867
868  out_unlock:
869         spin_unlock_irqrestore(ap->lock, flags);
870 }
871
872 /**
873  *      ata_eh_set_pending - set ATA_PFLAG_EH_PENDING and activate fast drain
874  *      @ap: target ATA port
875  *      @fastdrain: activate fast drain
876  *
877  *      Set ATA_PFLAG_EH_PENDING and activate fast drain if @fastdrain
878  *      is non-zero and EH wasn't pending before.  Fast drain ensures
879  *      that EH kicks in in timely manner.
880  *
881  *      LOCKING:
882  *      spin_lock_irqsave(host lock)
883  */
884 static void ata_eh_set_pending(struct ata_port *ap, int fastdrain)
885 {
886         int cnt;
887
888         /* already scheduled? */
889         if (ap->pflags & ATA_PFLAG_EH_PENDING)
890                 return;
891
892         ap->pflags |= ATA_PFLAG_EH_PENDING;
893
894         if (!fastdrain)
895                 return;
896
897         /* do we have in-flight qcs? */
898         cnt = ata_eh_nr_in_flight(ap);
899         if (!cnt)
900                 return;
901
902         /* activate fast drain */
903         ap->fastdrain_cnt = cnt;
904         ap->fastdrain_timer.expires =
905                 ata_deadline(jiffies, ATA_EH_FASTDRAIN_INTERVAL);
906         add_timer(&ap->fastdrain_timer);
907 }
908
909 /**
910  *      ata_qc_schedule_eh - schedule qc for error handling
911  *      @qc: command to schedule error handling for
912  *
913  *      Schedule error handling for @qc.  EH will kick in as soon as
914  *      other commands are drained.
915  *
916  *      LOCKING:
917  *      spin_lock_irqsave(host lock)
918  */
919 void ata_qc_schedule_eh(struct ata_queued_cmd *qc)
920 {
921         struct ata_port *ap = qc->ap;
922         struct request_queue *q = qc->scsicmd->device->request_queue;
923         unsigned long flags;
924
925         WARN_ON(!ap->ops->error_handler);
926
927         qc->flags |= ATA_QCFLAG_FAILED;
928         ata_eh_set_pending(ap, 1);
929
930         /* The following will fail if timeout has already expired.
931          * ata_scsi_error() takes care of such scmds on EH entry.
932          * Note that ATA_QCFLAG_FAILED is unconditionally set after
933          * this function completes.
934          */
935         spin_lock_irqsave(q->queue_lock, flags);
936         blk_abort_request(qc->scsicmd->request);
937         spin_unlock_irqrestore(q->queue_lock, flags);
938 }
939
940 /**
941  * ata_std_sched_eh - non-libsas ata_ports issue eh with this common routine
942  * @ap: ATA port to schedule EH for
943  *
944  *      LOCKING: inherited from ata_port_schedule_eh
945  *      spin_lock_irqsave(host lock)
946  */
947 void ata_std_sched_eh(struct ata_port *ap)
948 {
949         WARN_ON(!ap->ops->error_handler);
950
951         if (ap->pflags & ATA_PFLAG_INITIALIZING)
952                 return;
953
954         ata_eh_set_pending(ap, 1);
955         scsi_schedule_eh(ap->scsi_host);
956
957         DPRINTK("port EH scheduled\n");
958 }
959 EXPORT_SYMBOL_GPL(ata_std_sched_eh);
960
961 /**
962  * ata_std_end_eh - non-libsas ata_ports complete eh with this common routine
963  * @ap: ATA port to end EH for
964  *
965  * In the libata object model there is a 1:1 mapping of ata_port to
966  * shost, so host fields can be directly manipulated under ap->lock, in
967  * the libsas case we need to hold a lock at the ha->level to coordinate
968  * these events.
969  *
970  *      LOCKING:
971  *      spin_lock_irqsave(host lock)
972  */
973 void ata_std_end_eh(struct ata_port *ap)
974 {
975         struct Scsi_Host *host = ap->scsi_host;
976
977         host->host_eh_scheduled = 0;
978 }
979 EXPORT_SYMBOL(ata_std_end_eh);
980
981
982 /**
983  *      ata_port_schedule_eh - schedule error handling without a qc
984  *      @ap: ATA port to schedule EH for
985  *
986  *      Schedule error handling for @ap.  EH will kick in as soon as
987  *      all commands are drained.
988  *
989  *      LOCKING:
990  *      spin_lock_irqsave(host lock)
991  */
992 void ata_port_schedule_eh(struct ata_port *ap)
993 {
994         /* see: ata_std_sched_eh, unless you know better */
995         ap->ops->sched_eh(ap);
996 }
997
998 static int ata_do_link_abort(struct ata_port *ap, struct ata_link *link)
999 {
1000         struct ata_queued_cmd *qc;
1001         int tag, nr_aborted = 0;
1002
1003         WARN_ON(!ap->ops->error_handler);
1004
1005         /* we're gonna abort all commands, no need for fast drain */
1006         ata_eh_set_pending(ap, 0);
1007
1008         /* include internal tag in iteration */
1009         ata_qc_for_each_with_internal(ap, qc, tag) {
1010                 if (qc && (!link || qc->dev->link == link)) {
1011                         qc->flags |= ATA_QCFLAG_FAILED;
1012                         ata_qc_complete(qc);
1013                         nr_aborted++;
1014                 }
1015         }
1016
1017         if (!nr_aborted)
1018                 ata_port_schedule_eh(ap);
1019
1020         return nr_aborted;
1021 }
1022
1023 /**
1024  *      ata_link_abort - abort all qc's on the link
1025  *      @link: ATA link to abort qc's for
1026  *
1027  *      Abort all active qc's active on @link and schedule EH.
1028  *
1029  *      LOCKING:
1030  *      spin_lock_irqsave(host lock)
1031  *
1032  *      RETURNS:
1033  *      Number of aborted qc's.
1034  */
1035 int ata_link_abort(struct ata_link *link)
1036 {
1037         return ata_do_link_abort(link->ap, link);
1038 }
1039
1040 /**
1041  *      ata_port_abort - abort all qc's on the port
1042  *      @ap: ATA port to abort qc's for
1043  *
1044  *      Abort all active qc's of @ap and schedule EH.
1045  *
1046  *      LOCKING:
1047  *      spin_lock_irqsave(host_set lock)
1048  *
1049  *      RETURNS:
1050  *      Number of aborted qc's.
1051  */
1052 int ata_port_abort(struct ata_port *ap)
1053 {
1054         return ata_do_link_abort(ap, NULL);
1055 }
1056
1057 /**
1058  *      __ata_port_freeze - freeze port
1059  *      @ap: ATA port to freeze
1060  *
1061  *      This function is called when HSM violation or some other
1062  *      condition disrupts normal operation of the port.  Frozen port
1063  *      is not allowed to perform any operation until the port is
1064  *      thawed, which usually follows a successful reset.
1065  *
1066  *      ap->ops->freeze() callback can be used for freezing the port
1067  *      hardware-wise (e.g. mask interrupt and stop DMA engine).  If a
1068  *      port cannot be frozen hardware-wise, the interrupt handler
1069  *      must ack and clear interrupts unconditionally while the port
1070  *      is frozen.
1071  *
1072  *      LOCKING:
1073  *      spin_lock_irqsave(host lock)
1074  */
1075 static void __ata_port_freeze(struct ata_port *ap)
1076 {
1077         WARN_ON(!ap->ops->error_handler);
1078
1079         if (ap->ops->freeze)
1080                 ap->ops->freeze(ap);
1081
1082         ap->pflags |= ATA_PFLAG_FROZEN;
1083
1084         DPRINTK("ata%u port frozen\n", ap->print_id);
1085 }
1086
1087 /**
1088  *      ata_port_freeze - abort & freeze port
1089  *      @ap: ATA port to freeze
1090  *
1091  *      Abort and freeze @ap.  The freeze operation must be called
1092  *      first, because some hardware requires special operations
1093  *      before the taskfile registers are accessible.
1094  *
1095  *      LOCKING:
1096  *      spin_lock_irqsave(host lock)
1097  *
1098  *      RETURNS:
1099  *      Number of aborted commands.
1100  */
1101 int ata_port_freeze(struct ata_port *ap)
1102 {
1103         int nr_aborted;
1104
1105         WARN_ON(!ap->ops->error_handler);
1106
1107         __ata_port_freeze(ap);
1108         nr_aborted = ata_port_abort(ap);
1109
1110         return nr_aborted;
1111 }
1112
1113 /**
1114  *      sata_async_notification - SATA async notification handler
1115  *      @ap: ATA port where async notification is received
1116  *
1117  *      Handler to be called when async notification via SDB FIS is
1118  *      received.  This function schedules EH if necessary.
1119  *
1120  *      LOCKING:
1121  *      spin_lock_irqsave(host lock)
1122  *
1123  *      RETURNS:
1124  *      1 if EH is scheduled, 0 otherwise.
1125  */
1126 int sata_async_notification(struct ata_port *ap)
1127 {
1128         u32 sntf;
1129         int rc;
1130
1131         if (!(ap->flags & ATA_FLAG_AN))
1132                 return 0;
1133
1134         rc = sata_scr_read(&ap->link, SCR_NOTIFICATION, &sntf);
1135         if (rc == 0)
1136                 sata_scr_write(&ap->link, SCR_NOTIFICATION, sntf);
1137
1138         if (!sata_pmp_attached(ap) || rc) {
1139                 /* PMP is not attached or SNTF is not available */
1140                 if (!sata_pmp_attached(ap)) {
1141                         /* PMP is not attached.  Check whether ATAPI
1142                          * AN is configured.  If so, notify media
1143                          * change.
1144                          */
1145                         struct ata_device *dev = ap->link.device;
1146
1147                         if ((dev->class == ATA_DEV_ATAPI) &&
1148                             (dev->flags & ATA_DFLAG_AN))
1149                                 ata_scsi_media_change_notify(dev);
1150                         return 0;
1151                 } else {
1152                         /* PMP is attached but SNTF is not available.
1153                          * ATAPI async media change notification is
1154                          * not used.  The PMP must be reporting PHY
1155                          * status change, schedule EH.
1156                          */
1157                         ata_port_schedule_eh(ap);
1158                         return 1;
1159                 }
1160         } else {
1161                 /* PMP is attached and SNTF is available */
1162                 struct ata_link *link;
1163
1164                 /* check and notify ATAPI AN */
1165                 ata_for_each_link(link, ap, EDGE) {
1166                         if (!(sntf & (1 << link->pmp)))
1167                                 continue;
1168
1169                         if ((link->device->class == ATA_DEV_ATAPI) &&
1170                             (link->device->flags & ATA_DFLAG_AN))
1171                                 ata_scsi_media_change_notify(link->device);
1172                 }
1173
1174                 /* If PMP is reporting that PHY status of some
1175                  * downstream ports has changed, schedule EH.
1176                  */
1177                 if (sntf & (1 << SATA_PMP_CTRL_PORT)) {
1178                         ata_port_schedule_eh(ap);
1179                         return 1;
1180                 }
1181
1182                 return 0;
1183         }
1184 }
1185
1186 /**
1187  *      ata_eh_freeze_port - EH helper to freeze port
1188  *      @ap: ATA port to freeze
1189  *
1190  *      Freeze @ap.
1191  *
1192  *      LOCKING:
1193  *      None.
1194  */
1195 void ata_eh_freeze_port(struct ata_port *ap)
1196 {
1197         unsigned long flags;
1198
1199         if (!ap->ops->error_handler)
1200                 return;
1201
1202         spin_lock_irqsave(ap->lock, flags);
1203         __ata_port_freeze(ap);
1204         spin_unlock_irqrestore(ap->lock, flags);
1205 }
1206
1207 /**
1208  *      ata_port_thaw_port - EH helper to thaw port
1209  *      @ap: ATA port to thaw
1210  *
1211  *      Thaw frozen port @ap.
1212  *
1213  *      LOCKING:
1214  *      None.
1215  */
1216 void ata_eh_thaw_port(struct ata_port *ap)
1217 {
1218         unsigned long flags;
1219
1220         if (!ap->ops->error_handler)
1221                 return;
1222
1223         spin_lock_irqsave(ap->lock, flags);
1224
1225         ap->pflags &= ~ATA_PFLAG_FROZEN;
1226
1227         if (ap->ops->thaw)
1228                 ap->ops->thaw(ap);
1229
1230         spin_unlock_irqrestore(ap->lock, flags);
1231
1232         DPRINTK("ata%u port thawed\n", ap->print_id);
1233 }
1234
1235 static void ata_eh_scsidone(struct scsi_cmnd *scmd)
1236 {
1237         /* nada */
1238 }
1239
1240 static void __ata_eh_qc_complete(struct ata_queued_cmd *qc)
1241 {
1242         struct ata_port *ap = qc->ap;
1243         struct scsi_cmnd *scmd = qc->scsicmd;
1244         unsigned long flags;
1245
1246         spin_lock_irqsave(ap->lock, flags);
1247         qc->scsidone = ata_eh_scsidone;
1248         __ata_qc_complete(qc);
1249         WARN_ON(ata_tag_valid(qc->tag));
1250         spin_unlock_irqrestore(ap->lock, flags);
1251
1252         scsi_eh_finish_cmd(scmd, &ap->eh_done_q);
1253 }
1254
1255 /**
1256  *      ata_eh_qc_complete - Complete an active ATA command from EH
1257  *      @qc: Command to complete
1258  *
1259  *      Indicate to the mid and upper layers that an ATA command has
1260  *      completed.  To be used from EH.
1261  */
1262 void ata_eh_qc_complete(struct ata_queued_cmd *qc)
1263 {
1264         struct scsi_cmnd *scmd = qc->scsicmd;
1265         scmd->retries = scmd->allowed;
1266         __ata_eh_qc_complete(qc);
1267 }
1268
1269 /**
1270  *      ata_eh_qc_retry - Tell midlayer to retry an ATA command after EH
1271  *      @qc: Command to retry
1272  *
1273  *      Indicate to the mid and upper layers that an ATA command
1274  *      should be retried.  To be used from EH.
1275  *
1276  *      SCSI midlayer limits the number of retries to scmd->allowed.
1277  *      scmd->allowed is incremented for commands which get retried
1278  *      due to unrelated failures (qc->err_mask is zero).
1279  */
1280 void ata_eh_qc_retry(struct ata_queued_cmd *qc)
1281 {
1282         struct scsi_cmnd *scmd = qc->scsicmd;
1283         if (!qc->err_mask)
1284                 scmd->allowed++;
1285         __ata_eh_qc_complete(qc);
1286 }
1287
1288 /**
1289  *      ata_dev_disable - disable ATA device
1290  *      @dev: ATA device to disable
1291  *
1292  *      Disable @dev.
1293  *
1294  *      Locking:
1295  *      EH context.
1296  */
1297 void ata_dev_disable(struct ata_device *dev)
1298 {
1299         if (!ata_dev_enabled(dev))
1300                 return;
1301
1302         if (ata_msg_drv(dev->link->ap))
1303                 ata_dev_warn(dev, "disabled\n");
1304         ata_acpi_on_disable(dev);
1305         ata_down_xfermask_limit(dev, ATA_DNXFER_FORCE_PIO0 | ATA_DNXFER_QUIET);
1306         dev->class++;
1307
1308         /* From now till the next successful probe, ering is used to
1309          * track probe failures.  Clear accumulated device error info.
1310          */
1311         ata_ering_clear(&dev->ering);
1312 }
1313
1314 /**
1315  *      ata_eh_detach_dev - detach ATA device
1316  *      @dev: ATA device to detach
1317  *
1318  *      Detach @dev.
1319  *
1320  *      LOCKING:
1321  *      None.
1322  */
1323 void ata_eh_detach_dev(struct ata_device *dev)
1324 {
1325         struct ata_link *link = dev->link;
1326         struct ata_port *ap = link->ap;
1327         struct ata_eh_context *ehc = &link->eh_context;
1328         unsigned long flags;
1329
1330         ata_dev_disable(dev);
1331
1332         spin_lock_irqsave(ap->lock, flags);
1333
1334         dev->flags &= ~ATA_DFLAG_DETACH;
1335
1336         if (ata_scsi_offline_dev(dev)) {
1337                 dev->flags |= ATA_DFLAG_DETACHED;
1338                 ap->pflags |= ATA_PFLAG_SCSI_HOTPLUG;
1339         }
1340
1341         /* clear per-dev EH info */
1342         ata_eh_clear_action(link, dev, &link->eh_info, ATA_EH_PERDEV_MASK);
1343         ata_eh_clear_action(link, dev, &link->eh_context.i, ATA_EH_PERDEV_MASK);
1344         ehc->saved_xfer_mode[dev->devno] = 0;
1345         ehc->saved_ncq_enabled &= ~(1 << dev->devno);
1346
1347         spin_unlock_irqrestore(ap->lock, flags);
1348 }
1349
1350 /**
1351  *      ata_eh_about_to_do - about to perform eh_action
1352  *      @link: target ATA link
1353  *      @dev: target ATA dev for per-dev action (can be NULL)
1354  *      @action: action about to be performed
1355  *
1356  *      Called just before performing EH actions to clear related bits
1357  *      in @link->eh_info such that eh actions are not unnecessarily
1358  *      repeated.
1359  *
1360  *      LOCKING:
1361  *      None.
1362  */
1363 void ata_eh_about_to_do(struct ata_link *link, struct ata_device *dev,
1364                         unsigned int action)
1365 {
1366         struct ata_port *ap = link->ap;
1367         struct ata_eh_info *ehi = &link->eh_info;
1368         struct ata_eh_context *ehc = &link->eh_context;
1369         unsigned long flags;
1370
1371         spin_lock_irqsave(ap->lock, flags);
1372
1373         ata_eh_clear_action(link, dev, ehi, action);
1374
1375         /* About to take EH action, set RECOVERED.  Ignore actions on
1376          * slave links as master will do them again.
1377          */
1378         if (!(ehc->i.flags & ATA_EHI_QUIET) && link != ap->slave_link)
1379                 ap->pflags |= ATA_PFLAG_RECOVERED;
1380
1381         spin_unlock_irqrestore(ap->lock, flags);
1382 }
1383
1384 /**
1385  *      ata_eh_done - EH action complete
1386  *      @link: ATA link for which EH actions are complete
1387  *      @dev: target ATA dev for per-dev action (can be NULL)
1388  *      @action: action just completed
1389  *
1390  *      Called right after performing EH actions to clear related bits
1391  *      in @link->eh_context.
1392  *
1393  *      LOCKING:
1394  *      None.
1395  */
1396 void ata_eh_done(struct ata_link *link, struct ata_device *dev,
1397                  unsigned int action)
1398 {
1399         struct ata_eh_context *ehc = &link->eh_context;
1400
1401         ata_eh_clear_action(link, dev, &ehc->i, action);
1402 }
1403
1404 /**
1405  *      ata_err_string - convert err_mask to descriptive string
1406  *      @err_mask: error mask to convert to string
1407  *
1408  *      Convert @err_mask to descriptive string.  Errors are
1409  *      prioritized according to severity and only the most severe
1410  *      error is reported.
1411  *
1412  *      LOCKING:
1413  *      None.
1414  *
1415  *      RETURNS:
1416  *      Descriptive string for @err_mask
1417  */
1418 static const char *ata_err_string(unsigned int err_mask)
1419 {
1420         if (err_mask & AC_ERR_HOST_BUS)
1421                 return "host bus error";
1422         if (err_mask & AC_ERR_ATA_BUS)
1423                 return "ATA bus error";
1424         if (err_mask & AC_ERR_TIMEOUT)
1425                 return "timeout";
1426         if (err_mask & AC_ERR_HSM)
1427                 return "HSM violation";
1428         if (err_mask & AC_ERR_SYSTEM)
1429                 return "internal error";
1430         if (err_mask & AC_ERR_MEDIA)
1431                 return "media error";
1432         if (err_mask & AC_ERR_INVALID)
1433                 return "invalid argument";
1434         if (err_mask & AC_ERR_DEV)
1435                 return "device error";
1436         if (err_mask & AC_ERR_NCQ)
1437                 return "NCQ error";
1438         if (err_mask & AC_ERR_NODEV_HINT)
1439                 return "Polling detection error";
1440         return "unknown error";
1441 }
1442
1443 /**
1444  *      ata_eh_read_log_10h - Read log page 10h for NCQ error details
1445  *      @dev: Device to read log page 10h from
1446  *      @tag: Resulting tag of the failed command
1447  *      @tf: Resulting taskfile registers of the failed command
1448  *
1449  *      Read log page 10h to obtain NCQ error details and clear error
1450  *      condition.
1451  *
1452  *      LOCKING:
1453  *      Kernel thread context (may sleep).
1454  *
1455  *      RETURNS:
1456  *      0 on success, -errno otherwise.
1457  */
1458 static int ata_eh_read_log_10h(struct ata_device *dev,
1459                                int *tag, struct ata_taskfile *tf)
1460 {
1461         u8 *buf = dev->link->ap->sector_buf;
1462         unsigned int err_mask;
1463         u8 csum;
1464         int i;
1465
1466         err_mask = ata_read_log_page(dev, ATA_LOG_SATA_NCQ, 0, buf, 1);
1467         if (err_mask)
1468                 return -EIO;
1469
1470         csum = 0;
1471         for (i = 0; i < ATA_SECT_SIZE; i++)
1472                 csum += buf[i];
1473         if (csum)
1474                 ata_dev_warn(dev, "invalid checksum 0x%x on log page 10h\n",
1475                              csum);
1476
1477         if (buf[0] & 0x80)
1478                 return -ENOENT;
1479
1480         *tag = buf[0] & 0x1f;
1481
1482         tf->command = buf[2];
1483         tf->feature = buf[3];
1484         tf->lbal = buf[4];
1485         tf->lbam = buf[5];
1486         tf->lbah = buf[6];
1487         tf->device = buf[7];
1488         tf->hob_lbal = buf[8];
1489         tf->hob_lbam = buf[9];
1490         tf->hob_lbah = buf[10];
1491         tf->nsect = buf[12];
1492         tf->hob_nsect = buf[13];
1493         if (ata_id_has_ncq_autosense(dev->id))
1494                 tf->auxiliary = buf[14] << 16 | buf[15] << 8 | buf[16];
1495
1496         return 0;
1497 }
1498
1499 /**
1500  *      atapi_eh_tur - perform ATAPI TEST_UNIT_READY
1501  *      @dev: target ATAPI device
1502  *      @r_sense_key: out parameter for sense_key
1503  *
1504  *      Perform ATAPI TEST_UNIT_READY.
1505  *
1506  *      LOCKING:
1507  *      EH context (may sleep).
1508  *
1509  *      RETURNS:
1510  *      0 on success, AC_ERR_* mask on failure.
1511  */
1512 unsigned int atapi_eh_tur(struct ata_device *dev, u8 *r_sense_key)
1513 {
1514         u8 cdb[ATAPI_CDB_LEN] = { TEST_UNIT_READY, 0, 0, 0, 0, 0 };
1515         struct ata_taskfile tf;
1516         unsigned int err_mask;
1517
1518         ata_tf_init(dev, &tf);
1519
1520         tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1521         tf.command = ATA_CMD_PACKET;
1522         tf.protocol = ATAPI_PROT_NODATA;
1523
1524         err_mask = ata_exec_internal(dev, &tf, cdb, DMA_NONE, NULL, 0, 0);
1525         if (err_mask == AC_ERR_DEV)
1526                 *r_sense_key = tf.feature >> 4;
1527         return err_mask;
1528 }
1529
1530 /**
1531  *      ata_eh_request_sense - perform REQUEST_SENSE_DATA_EXT
1532  *      @qc: qc to perform REQUEST_SENSE_SENSE_DATA_EXT to
1533  *      @cmd: scsi command for which the sense code should be set
1534  *
1535  *      Perform REQUEST_SENSE_DATA_EXT after the device reported CHECK
1536  *      SENSE.  This function is an EH helper.
1537  *
1538  *      LOCKING:
1539  *      Kernel thread context (may sleep).
1540  */
1541 static void ata_eh_request_sense(struct ata_queued_cmd *qc,
1542                                  struct scsi_cmnd *cmd)
1543 {
1544         struct ata_device *dev = qc->dev;
1545         struct ata_taskfile tf;
1546         unsigned int err_mask;
1547
1548         if (qc->ap->pflags & ATA_PFLAG_FROZEN) {
1549                 ata_dev_warn(dev, "sense data available but port frozen\n");
1550                 return;
1551         }
1552
1553         if (!cmd || qc->flags & ATA_QCFLAG_SENSE_VALID)
1554                 return;
1555
1556         if (!ata_id_sense_reporting_enabled(dev->id)) {
1557                 ata_dev_warn(qc->dev, "sense data reporting disabled\n");
1558                 return;
1559         }
1560
1561         DPRINTK("ATA request sense\n");
1562
1563         ata_tf_init(dev, &tf);
1564         tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1565         tf.flags |= ATA_TFLAG_LBA | ATA_TFLAG_LBA48;
1566         tf.command = ATA_CMD_REQ_SENSE_DATA;
1567         tf.protocol = ATA_PROT_NODATA;
1568
1569         err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
1570         /* Ignore err_mask; ATA_ERR might be set */
1571         if (tf.command & ATA_SENSE) {
1572                 ata_scsi_set_sense(dev, cmd, tf.lbah, tf.lbam, tf.lbal);
1573                 qc->flags |= ATA_QCFLAG_SENSE_VALID;
1574         } else {
1575                 ata_dev_warn(dev, "request sense failed stat %02x emask %x\n",
1576                              tf.command, err_mask);
1577         }
1578 }
1579
1580 /**
1581  *      atapi_eh_request_sense - perform ATAPI REQUEST_SENSE
1582  *      @dev: device to perform REQUEST_SENSE to
1583  *      @sense_buf: result sense data buffer (SCSI_SENSE_BUFFERSIZE bytes long)
1584  *      @dfl_sense_key: default sense key to use
1585  *
1586  *      Perform ATAPI REQUEST_SENSE after the device reported CHECK
1587  *      SENSE.  This function is EH helper.
1588  *
1589  *      LOCKING:
1590  *      Kernel thread context (may sleep).
1591  *
1592  *      RETURNS:
1593  *      0 on success, AC_ERR_* mask on failure
1594  */
1595 unsigned int atapi_eh_request_sense(struct ata_device *dev,
1596                                            u8 *sense_buf, u8 dfl_sense_key)
1597 {
1598         u8 cdb[ATAPI_CDB_LEN] =
1599                 { REQUEST_SENSE, 0, 0, 0, SCSI_SENSE_BUFFERSIZE, 0 };
1600         struct ata_port *ap = dev->link->ap;
1601         struct ata_taskfile tf;
1602
1603         DPRINTK("ATAPI request sense\n");
1604
1605         memset(sense_buf, 0, SCSI_SENSE_BUFFERSIZE);
1606
1607         /* initialize sense_buf with the error register,
1608          * for the case where they are -not- overwritten
1609          */
1610         sense_buf[0] = 0x70;
1611         sense_buf[2] = dfl_sense_key;
1612
1613         /* some devices time out if garbage left in tf */
1614         ata_tf_init(dev, &tf);
1615
1616         tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1617         tf.command = ATA_CMD_PACKET;
1618
1619         /* is it pointless to prefer PIO for "safety reasons"? */
1620         if (ap->flags & ATA_FLAG_PIO_DMA) {
1621                 tf.protocol = ATAPI_PROT_DMA;
1622                 tf.feature |= ATAPI_PKT_DMA;
1623         } else {
1624                 tf.protocol = ATAPI_PROT_PIO;
1625                 tf.lbam = SCSI_SENSE_BUFFERSIZE;
1626                 tf.lbah = 0;
1627         }
1628
1629         return ata_exec_internal(dev, &tf, cdb, DMA_FROM_DEVICE,
1630                                  sense_buf, SCSI_SENSE_BUFFERSIZE, 0);
1631 }
1632
1633 /**
1634  *      ata_eh_analyze_serror - analyze SError for a failed port
1635  *      @link: ATA link to analyze SError for
1636  *
1637  *      Analyze SError if available and further determine cause of
1638  *      failure.
1639  *
1640  *      LOCKING:
1641  *      None.
1642  */
1643 static void ata_eh_analyze_serror(struct ata_link *link)
1644 {
1645         struct ata_eh_context *ehc = &link->eh_context;
1646         u32 serror = ehc->i.serror;
1647         unsigned int err_mask = 0, action = 0;
1648         u32 hotplug_mask;
1649
1650         if (serror & (SERR_PERSISTENT | SERR_DATA)) {
1651                 err_mask |= AC_ERR_ATA_BUS;
1652                 action |= ATA_EH_RESET;
1653         }
1654         if (serror & SERR_PROTOCOL) {
1655                 err_mask |= AC_ERR_HSM;
1656                 action |= ATA_EH_RESET;
1657         }
1658         if (serror & SERR_INTERNAL) {
1659                 err_mask |= AC_ERR_SYSTEM;
1660                 action |= ATA_EH_RESET;
1661         }
1662
1663         /* Determine whether a hotplug event has occurred.  Both
1664          * SError.N/X are considered hotplug events for enabled or
1665          * host links.  For disabled PMP links, only N bit is
1666          * considered as X bit is left at 1 for link plugging.
1667          */
1668         if (link->lpm_policy > ATA_LPM_MAX_POWER)
1669                 hotplug_mask = 0;       /* hotplug doesn't work w/ LPM */
1670         else if (!(link->flags & ATA_LFLAG_DISABLED) || ata_is_host_link(link))
1671                 hotplug_mask = SERR_PHYRDY_CHG | SERR_DEV_XCHG;
1672         else
1673                 hotplug_mask = SERR_PHYRDY_CHG;
1674
1675         if (serror & hotplug_mask)
1676                 ata_ehi_hotplugged(&ehc->i);
1677
1678         ehc->i.err_mask |= err_mask;
1679         ehc->i.action |= action;
1680 }
1681
1682 /**
1683  *      ata_eh_analyze_ncq_error - analyze NCQ error
1684  *      @link: ATA link to analyze NCQ error for
1685  *
1686  *      Read log page 10h, determine the offending qc and acquire
1687  *      error status TF.  For NCQ device errors, all LLDDs have to do
1688  *      is setting AC_ERR_DEV in ehi->err_mask.  This function takes
1689  *      care of the rest.
1690  *
1691  *      LOCKING:
1692  *      Kernel thread context (may sleep).
1693  */
1694 void ata_eh_analyze_ncq_error(struct ata_link *link)
1695 {
1696         struct ata_port *ap = link->ap;
1697         struct ata_eh_context *ehc = &link->eh_context;
1698         struct ata_device *dev = link->device;
1699         struct ata_queued_cmd *qc;
1700         struct ata_taskfile tf;
1701         int tag, rc;
1702
1703         /* if frozen, we can't do much */
1704         if (ap->pflags & ATA_PFLAG_FROZEN)
1705                 return;
1706
1707         /* is it NCQ device error? */
1708         if (!link->sactive || !(ehc->i.err_mask & AC_ERR_DEV))
1709                 return;
1710
1711         /* has LLDD analyzed already? */
1712         ata_qc_for_each_raw(ap, qc, tag) {
1713                 if (!(qc->flags & ATA_QCFLAG_FAILED))
1714                         continue;
1715
1716                 if (qc->err_mask)
1717                         return;
1718         }
1719
1720         /* okay, this error is ours */
1721         memset(&tf, 0, sizeof(tf));
1722         rc = ata_eh_read_log_10h(dev, &tag, &tf);
1723         if (rc) {
1724                 ata_link_err(link, "failed to read log page 10h (errno=%d)\n",
1725                              rc);
1726                 return;
1727         }
1728
1729         if (!(link->sactive & (1 << tag))) {
1730                 ata_link_err(link, "log page 10h reported inactive tag %d\n",
1731                              tag);
1732                 return;
1733         }
1734
1735         /* we've got the perpetrator, condemn it */
1736         qc = __ata_qc_from_tag(ap, tag);
1737         memcpy(&qc->result_tf, &tf, sizeof(tf));
1738         qc->result_tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_LBA | ATA_TFLAG_LBA48;
1739         qc->err_mask |= AC_ERR_DEV | AC_ERR_NCQ;
1740         if ((qc->result_tf.command & ATA_SENSE) || qc->result_tf.auxiliary) {
1741                 char sense_key, asc, ascq;
1742
1743                 sense_key = (qc->result_tf.auxiliary >> 16) & 0xff;
1744                 asc = (qc->result_tf.auxiliary >> 8) & 0xff;
1745                 ascq = qc->result_tf.auxiliary & 0xff;
1746                 ata_scsi_set_sense(dev, qc->scsicmd, sense_key, asc, ascq);
1747                 ata_scsi_set_sense_information(dev, qc->scsicmd,
1748                                                &qc->result_tf);
1749                 qc->flags |= ATA_QCFLAG_SENSE_VALID;
1750         }
1751
1752         ehc->i.err_mask &= ~AC_ERR_DEV;
1753 }
1754
1755 /**
1756  *      ata_eh_analyze_tf - analyze taskfile of a failed qc
1757  *      @qc: qc to analyze
1758  *      @tf: Taskfile registers to analyze
1759  *
1760  *      Analyze taskfile of @qc and further determine cause of
1761  *      failure.  This function also requests ATAPI sense data if
1762  *      available.
1763  *
1764  *      LOCKING:
1765  *      Kernel thread context (may sleep).
1766  *
1767  *      RETURNS:
1768  *      Determined recovery action
1769  */
1770 static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc,
1771                                       const struct ata_taskfile *tf)
1772 {
1773         unsigned int tmp, action = 0;
1774         u8 stat = tf->command, err = tf->feature;
1775
1776         if ((stat & (ATA_BUSY | ATA_DRQ | ATA_DRDY)) != ATA_DRDY) {
1777                 qc->err_mask |= AC_ERR_HSM;
1778                 return ATA_EH_RESET;
1779         }
1780
1781         if (stat & (ATA_ERR | ATA_DF)) {
1782                 qc->err_mask |= AC_ERR_DEV;
1783                 /*
1784                  * Sense data reporting does not work if the
1785                  * device fault bit is set.
1786                  */
1787                 if (stat & ATA_DF)
1788                         stat &= ~ATA_SENSE;
1789         } else {
1790                 return 0;
1791         }
1792
1793         switch (qc->dev->class) {
1794         case ATA_DEV_ATA:
1795         case ATA_DEV_ZAC:
1796                 if (stat & ATA_SENSE)
1797                         ata_eh_request_sense(qc, qc->scsicmd);
1798                 if (err & ATA_ICRC)
1799                         qc->err_mask |= AC_ERR_ATA_BUS;
1800                 if (err & (ATA_UNC | ATA_AMNF))
1801                         qc->err_mask |= AC_ERR_MEDIA;
1802                 if (err & ATA_IDNF)
1803                         qc->err_mask |= AC_ERR_INVALID;
1804                 break;
1805
1806         case ATA_DEV_ATAPI:
1807                 if (!(qc->ap->pflags & ATA_PFLAG_FROZEN)) {
1808                         tmp = atapi_eh_request_sense(qc->dev,
1809                                                 qc->scsicmd->sense_buffer,
1810                                                 qc->result_tf.feature >> 4);
1811                         if (!tmp)
1812                                 qc->flags |= ATA_QCFLAG_SENSE_VALID;
1813                         else
1814                                 qc->err_mask |= tmp;
1815                 }
1816         }
1817
1818         if (qc->flags & ATA_QCFLAG_SENSE_VALID) {
1819                 int ret = scsi_check_sense(qc->scsicmd);
1820                 /*
1821                  * SUCCESS here means that the sense code could be
1822                  * evaluated and should be passed to the upper layers
1823                  * for correct evaluation.
1824                  * FAILED means the sense code could not be interpreted
1825                  * and the device would need to be reset.
1826                  * NEEDS_RETRY and ADD_TO_MLQUEUE means that the
1827                  * command would need to be retried.
1828                  */
1829                 if (ret == NEEDS_RETRY || ret == ADD_TO_MLQUEUE) {
1830                         qc->flags |= ATA_QCFLAG_RETRY;
1831                         qc->err_mask |= AC_ERR_OTHER;
1832                 } else if (ret != SUCCESS) {
1833                         qc->err_mask |= AC_ERR_HSM;
1834                 }
1835         }
1836         if (qc->err_mask & (AC_ERR_HSM | AC_ERR_TIMEOUT | AC_ERR_ATA_BUS))
1837                 action |= ATA_EH_RESET;
1838
1839         return action;
1840 }
1841
1842 static int ata_eh_categorize_error(unsigned int eflags, unsigned int err_mask,
1843                                    int *xfer_ok)
1844 {
1845         int base = 0;
1846
1847         if (!(eflags & ATA_EFLAG_DUBIOUS_XFER))
1848                 *xfer_ok = 1;
1849
1850         if (!*xfer_ok)
1851                 base = ATA_ECAT_DUBIOUS_NONE;
1852
1853         if (err_mask & AC_ERR_ATA_BUS)
1854                 return base + ATA_ECAT_ATA_BUS;
1855
1856         if (err_mask & AC_ERR_TIMEOUT)
1857                 return base + ATA_ECAT_TOUT_HSM;
1858
1859         if (eflags & ATA_EFLAG_IS_IO) {
1860                 if (err_mask & AC_ERR_HSM)
1861                         return base + ATA_ECAT_TOUT_HSM;
1862                 if ((err_mask &
1863                      (AC_ERR_DEV|AC_ERR_MEDIA|AC_ERR_INVALID)) == AC_ERR_DEV)
1864                         return base + ATA_ECAT_UNK_DEV;
1865         }
1866
1867         return 0;
1868 }
1869
1870 struct speed_down_verdict_arg {
1871         u64 since;
1872         int xfer_ok;
1873         int nr_errors[ATA_ECAT_NR];
1874 };
1875
1876 static int speed_down_verdict_cb(struct ata_ering_entry *ent, void *void_arg)
1877 {
1878         struct speed_down_verdict_arg *arg = void_arg;
1879         int cat;
1880
1881         if ((ent->eflags & ATA_EFLAG_OLD_ER) || (ent->timestamp < arg->since))
1882                 return -1;
1883
1884         cat = ata_eh_categorize_error(ent->eflags, ent->err_mask,
1885                                       &arg->xfer_ok);
1886         arg->nr_errors[cat]++;
1887
1888         return 0;
1889 }
1890
1891 /**
1892  *      ata_eh_speed_down_verdict - Determine speed down verdict
1893  *      @dev: Device of interest
1894  *
1895  *      This function examines error ring of @dev and determines
1896  *      whether NCQ needs to be turned off, transfer speed should be
1897  *      stepped down, or falling back to PIO is necessary.
1898  *
1899  *      ECAT_ATA_BUS    : ATA_BUS error for any command
1900  *
1901  *      ECAT_TOUT_HSM   : TIMEOUT for any command or HSM violation for
1902  *                        IO commands
1903  *
1904  *      ECAT_UNK_DEV    : Unknown DEV error for IO commands
1905  *
1906  *      ECAT_DUBIOUS_*  : Identical to above three but occurred while
1907  *                        data transfer hasn't been verified.
1908  *
1909  *      Verdicts are
1910  *
1911  *      NCQ_OFF         : Turn off NCQ.
1912  *
1913  *      SPEED_DOWN      : Speed down transfer speed but don't fall back
1914  *                        to PIO.
1915  *
1916  *      FALLBACK_TO_PIO : Fall back to PIO.
1917  *
1918  *      Even if multiple verdicts are returned, only one action is
1919  *      taken per error.  An action triggered by non-DUBIOUS errors
1920  *      clears ering, while one triggered by DUBIOUS_* errors doesn't.
1921  *      This is to expedite speed down decisions right after device is
1922  *      initially configured.
1923  *
1924  *      The following are speed down rules.  #1 and #2 deal with
1925  *      DUBIOUS errors.
1926  *
1927  *      1. If more than one DUBIOUS_ATA_BUS or DUBIOUS_TOUT_HSM errors
1928  *         occurred during last 5 mins, SPEED_DOWN and FALLBACK_TO_PIO.
1929  *
1930  *      2. If more than one DUBIOUS_TOUT_HSM or DUBIOUS_UNK_DEV errors
1931  *         occurred during last 5 mins, NCQ_OFF.
1932  *
1933  *      3. If more than 8 ATA_BUS, TOUT_HSM or UNK_DEV errors
1934  *         occurred during last 5 mins, FALLBACK_TO_PIO
1935  *
1936  *      4. If more than 3 TOUT_HSM or UNK_DEV errors occurred
1937  *         during last 10 mins, NCQ_OFF.
1938  *
1939  *      5. If more than 3 ATA_BUS or TOUT_HSM errors, or more than 6
1940  *         UNK_DEV errors occurred during last 10 mins, SPEED_DOWN.
1941  *
1942  *      LOCKING:
1943  *      Inherited from caller.
1944  *
1945  *      RETURNS:
1946  *      OR of ATA_EH_SPDN_* flags.
1947  */
1948 static unsigned int ata_eh_speed_down_verdict(struct ata_device *dev)
1949 {
1950         const u64 j5mins = 5LLU * 60 * HZ, j10mins = 10LLU * 60 * HZ;
1951         u64 j64 = get_jiffies_64();
1952         struct speed_down_verdict_arg arg;
1953         unsigned int verdict = 0;
1954
1955         /* scan past 5 mins of error history */
1956         memset(&arg, 0, sizeof(arg));
1957         arg.since = j64 - min(j64, j5mins);
1958         ata_ering_map(&dev->ering, speed_down_verdict_cb, &arg);
1959
1960         if (arg.nr_errors[ATA_ECAT_DUBIOUS_ATA_BUS] +
1961             arg.nr_errors[ATA_ECAT_DUBIOUS_TOUT_HSM] > 1)
1962                 verdict |= ATA_EH_SPDN_SPEED_DOWN |
1963                         ATA_EH_SPDN_FALLBACK_TO_PIO | ATA_EH_SPDN_KEEP_ERRORS;
1964
1965         if (arg.nr_errors[ATA_ECAT_DUBIOUS_TOUT_HSM] +
1966             arg.nr_errors[ATA_ECAT_DUBIOUS_UNK_DEV] > 1)
1967                 verdict |= ATA_EH_SPDN_NCQ_OFF | ATA_EH_SPDN_KEEP_ERRORS;
1968
1969         if (arg.nr_errors[ATA_ECAT_ATA_BUS] +
1970             arg.nr_errors[ATA_ECAT_TOUT_HSM] +
1971             arg.nr_errors[ATA_ECAT_UNK_DEV] > 6)
1972                 verdict |= ATA_EH_SPDN_FALLBACK_TO_PIO;
1973
1974         /* scan past 10 mins of error history */
1975         memset(&arg, 0, sizeof(arg));
1976         arg.since = j64 - min(j64, j10mins);
1977         ata_ering_map(&dev->ering, speed_down_verdict_cb, &arg);
1978
1979         if (arg.nr_errors[ATA_ECAT_TOUT_HSM] +
1980             arg.nr_errors[ATA_ECAT_UNK_DEV] > 3)
1981                 verdict |= ATA_EH_SPDN_NCQ_OFF;
1982
1983         if (arg.nr_errors[ATA_ECAT_ATA_BUS] +
1984             arg.nr_errors[ATA_ECAT_TOUT_HSM] > 3 ||
1985             arg.nr_errors[ATA_ECAT_UNK_DEV] > 6)
1986                 verdict |= ATA_EH_SPDN_SPEED_DOWN;
1987
1988         return verdict;
1989 }
1990
1991 /**
1992  *      ata_eh_speed_down - record error and speed down if necessary
1993  *      @dev: Failed device
1994  *      @eflags: mask of ATA_EFLAG_* flags
1995  *      @err_mask: err_mask of the error
1996  *
1997  *      Record error and examine error history to determine whether
1998  *      adjusting transmission speed is necessary.  It also sets
1999  *      transmission limits appropriately if such adjustment is
2000  *      necessary.
2001  *
2002  *      LOCKING:
2003  *      Kernel thread context (may sleep).
2004  *
2005  *      RETURNS:
2006  *      Determined recovery action.
2007  */
2008 static unsigned int ata_eh_speed_down(struct ata_device *dev,
2009                                 unsigned int eflags, unsigned int err_mask)
2010 {
2011         struct ata_link *link = ata_dev_phys_link(dev);
2012         int xfer_ok = 0;
2013         unsigned int verdict;
2014         unsigned int action = 0;
2015
2016         /* don't bother if Cat-0 error */
2017         if (ata_eh_categorize_error(eflags, err_mask, &xfer_ok) == 0)
2018                 return 0;
2019
2020         /* record error and determine whether speed down is necessary */
2021         ata_ering_record(&dev->ering, eflags, err_mask);
2022         verdict = ata_eh_speed_down_verdict(dev);
2023
2024         /* turn off NCQ? */
2025         if ((verdict & ATA_EH_SPDN_NCQ_OFF) &&
2026             (dev->flags & (ATA_DFLAG_PIO | ATA_DFLAG_NCQ |
2027                            ATA_DFLAG_NCQ_OFF)) == ATA_DFLAG_NCQ) {
2028                 dev->flags |= ATA_DFLAG_NCQ_OFF;
2029                 ata_dev_warn(dev, "NCQ disabled due to excessive errors\n");
2030                 goto done;
2031         }
2032
2033         /* speed down? */
2034         if (verdict & ATA_EH_SPDN_SPEED_DOWN) {
2035                 /* speed down SATA link speed if possible */
2036                 if (sata_down_spd_limit(link, 0) == 0) {
2037                         action |= ATA_EH_RESET;
2038                         goto done;
2039                 }
2040
2041                 /* lower transfer mode */
2042                 if (dev->spdn_cnt < 2) {
2043                         static const int dma_dnxfer_sel[] =
2044                                 { ATA_DNXFER_DMA, ATA_DNXFER_40C };
2045                         static const int pio_dnxfer_sel[] =
2046                                 { ATA_DNXFER_PIO, ATA_DNXFER_FORCE_PIO0 };
2047                         int sel;
2048
2049                         if (dev->xfer_shift != ATA_SHIFT_PIO)
2050                                 sel = dma_dnxfer_sel[dev->spdn_cnt];
2051                         else
2052                                 sel = pio_dnxfer_sel[dev->spdn_cnt];
2053
2054                         dev->spdn_cnt++;
2055
2056                         if (ata_down_xfermask_limit(dev, sel) == 0) {
2057                                 action |= ATA_EH_RESET;
2058                                 goto done;
2059                         }
2060                 }
2061         }
2062
2063         /* Fall back to PIO?  Slowing down to PIO is meaningless for
2064          * SATA ATA devices.  Consider it only for PATA and SATAPI.
2065          */
2066         if ((verdict & ATA_EH_SPDN_FALLBACK_TO_PIO) && (dev->spdn_cnt >= 2) &&
2067             (link->ap->cbl != ATA_CBL_SATA || dev->class == ATA_DEV_ATAPI) &&
2068             (dev->xfer_shift != ATA_SHIFT_PIO)) {
2069                 if (ata_down_xfermask_limit(dev, ATA_DNXFER_FORCE_PIO) == 0) {
2070                         dev->spdn_cnt = 0;
2071                         action |= ATA_EH_RESET;
2072                         goto done;
2073                 }
2074         }
2075
2076         return 0;
2077  done:
2078         /* device has been slowed down, blow error history */
2079         if (!(verdict & ATA_EH_SPDN_KEEP_ERRORS))
2080                 ata_ering_clear(&dev->ering);
2081         return action;
2082 }
2083
2084 /**
2085  *      ata_eh_worth_retry - analyze error and decide whether to retry
2086  *      @qc: qc to possibly retry
2087  *
2088  *      Look at the cause of the error and decide if a retry
2089  *      might be useful or not.  We don't want to retry media errors
2090  *      because the drive itself has probably already taken 10-30 seconds
2091  *      doing its own internal retries before reporting the failure.
2092  */
2093 static inline int ata_eh_worth_retry(struct ata_queued_cmd *qc)
2094 {
2095         if (qc->err_mask & AC_ERR_MEDIA)
2096                 return 0;       /* don't retry media errors */
2097         if (qc->flags & ATA_QCFLAG_IO)
2098                 return 1;       /* otherwise retry anything from fs stack */
2099         if (qc->err_mask & AC_ERR_INVALID)
2100                 return 0;       /* don't retry these */
2101         return qc->err_mask != AC_ERR_DEV;  /* retry if not dev error */
2102 }
2103
2104 /**
2105  *      ata_eh_quiet - check if we need to be quiet about a command error
2106  *      @qc: qc to check
2107  *
2108  *      Look at the qc flags anbd its scsi command request flags to determine
2109  *      if we need to be quiet about the command failure.
2110  */
2111 static inline bool ata_eh_quiet(struct ata_queued_cmd *qc)
2112 {
2113         if (qc->scsicmd &&
2114             qc->scsicmd->request->rq_flags & RQF_QUIET)
2115                 qc->flags |= ATA_QCFLAG_QUIET;
2116         return qc->flags & ATA_QCFLAG_QUIET;
2117 }
2118
2119 /**
2120  *      ata_eh_link_autopsy - analyze error and determine recovery action
2121  *      @link: host link to perform autopsy on
2122  *
2123  *      Analyze why @link failed and determine which recovery actions
2124  *      are needed.  This function also sets more detailed AC_ERR_*
2125  *      values and fills sense data for ATAPI CHECK SENSE.
2126  *
2127  *      LOCKING:
2128  *      Kernel thread context (may sleep).
2129  */
2130 static void ata_eh_link_autopsy(struct ata_link *link)
2131 {
2132         struct ata_port *ap = link->ap;
2133         struct ata_eh_context *ehc = &link->eh_context;
2134         struct ata_queued_cmd *qc;
2135         struct ata_device *dev;
2136         unsigned int all_err_mask = 0, eflags = 0;
2137         int tag, nr_failed = 0, nr_quiet = 0;
2138         u32 serror;
2139         int rc;
2140
2141         DPRINTK("ENTER\n");
2142
2143         if (ehc->i.flags & ATA_EHI_NO_AUTOPSY)
2144                 return;
2145
2146         /* obtain and analyze SError */
2147         rc = sata_scr_read(link, SCR_ERROR, &serror);
2148         if (rc == 0) {
2149                 ehc->i.serror |= serror;
2150                 ata_eh_analyze_serror(link);
2151         } else if (rc != -EOPNOTSUPP) {
2152                 /* SError read failed, force reset and probing */
2153                 ehc->i.probe_mask |= ATA_ALL_DEVICES;
2154                 ehc->i.action |= ATA_EH_RESET;
2155                 ehc->i.err_mask |= AC_ERR_OTHER;
2156         }
2157
2158         /* analyze NCQ failure */
2159         ata_eh_analyze_ncq_error(link);
2160
2161         /* any real error trumps AC_ERR_OTHER */
2162         if (ehc->i.err_mask & ~AC_ERR_OTHER)
2163                 ehc->i.err_mask &= ~AC_ERR_OTHER;
2164
2165         all_err_mask |= ehc->i.err_mask;
2166
2167         ata_qc_for_each_raw(ap, qc, tag) {
2168                 if (!(qc->flags & ATA_QCFLAG_FAILED) ||
2169                     ata_dev_phys_link(qc->dev) != link)
2170                         continue;
2171
2172                 /* inherit upper level err_mask */
2173                 qc->err_mask |= ehc->i.err_mask;
2174
2175                 /* analyze TF */
2176                 ehc->i.action |= ata_eh_analyze_tf(qc, &qc->result_tf);
2177
2178                 /* DEV errors are probably spurious in case of ATA_BUS error */
2179                 if (qc->err_mask & AC_ERR_ATA_BUS)
2180                         qc->err_mask &= ~(AC_ERR_DEV | AC_ERR_MEDIA |
2181                                           AC_ERR_INVALID);
2182
2183                 /* any real error trumps unknown error */
2184                 if (qc->err_mask & ~AC_ERR_OTHER)
2185                         qc->err_mask &= ~AC_ERR_OTHER;
2186
2187                 /*
2188                  * SENSE_VALID trumps dev/unknown error and revalidation. Upper
2189                  * layers will determine whether the command is worth retrying
2190                  * based on the sense data and device class/type. Otherwise,
2191                  * determine directly if the command is worth retrying using its
2192                  * error mask and flags.
2193                  */
2194                 if (qc->flags & ATA_QCFLAG_SENSE_VALID)
2195                         qc->err_mask &= ~(AC_ERR_DEV | AC_ERR_OTHER);
2196                 else if (ata_eh_worth_retry(qc))
2197                         qc->flags |= ATA_QCFLAG_RETRY;
2198
2199                 /* accumulate error info */
2200                 ehc->i.dev = qc->dev;
2201                 all_err_mask |= qc->err_mask;
2202                 if (qc->flags & ATA_QCFLAG_IO)
2203                         eflags |= ATA_EFLAG_IS_IO;
2204                 trace_ata_eh_link_autopsy_qc(qc);
2205
2206                 /* Count quiet errors */
2207                 if (ata_eh_quiet(qc))
2208                         nr_quiet++;
2209                 nr_failed++;
2210         }
2211
2212         /* If all failed commands requested silence, then be quiet */
2213         if (nr_quiet == nr_failed)
2214                 ehc->i.flags |= ATA_EHI_QUIET;
2215
2216         /* enforce default EH actions */
2217         if (ap->pflags & ATA_PFLAG_FROZEN ||
2218             all_err_mask & (AC_ERR_HSM | AC_ERR_TIMEOUT))
2219                 ehc->i.action |= ATA_EH_RESET;
2220         else if (((eflags & ATA_EFLAG_IS_IO) && all_err_mask) ||
2221                  (!(eflags & ATA_EFLAG_IS_IO) && (all_err_mask & ~AC_ERR_DEV)))
2222                 ehc->i.action |= ATA_EH_REVALIDATE;
2223
2224         /* If we have offending qcs and the associated failed device,
2225          * perform per-dev EH action only on the offending device.
2226          */
2227         if (ehc->i.dev) {
2228                 ehc->i.dev_action[ehc->i.dev->devno] |=
2229                         ehc->i.action & ATA_EH_PERDEV_MASK;
2230                 ehc->i.action &= ~ATA_EH_PERDEV_MASK;
2231         }
2232
2233         /* propagate timeout to host link */
2234         if ((all_err_mask & AC_ERR_TIMEOUT) && !ata_is_host_link(link))
2235                 ap->link.eh_context.i.err_mask |= AC_ERR_TIMEOUT;
2236
2237         /* record error and consider speeding down */
2238         dev = ehc->i.dev;
2239         if (!dev && ((ata_link_max_devices(link) == 1 &&
2240                       ata_dev_enabled(link->device))))
2241             dev = link->device;
2242
2243         if (dev) {
2244                 if (dev->flags & ATA_DFLAG_DUBIOUS_XFER)
2245                         eflags |= ATA_EFLAG_DUBIOUS_XFER;
2246                 ehc->i.action |= ata_eh_speed_down(dev, eflags, all_err_mask);
2247                 trace_ata_eh_link_autopsy(dev, ehc->i.action, all_err_mask);
2248         }
2249         DPRINTK("EXIT\n");
2250 }
2251
2252 /**
2253  *      ata_eh_autopsy - analyze error and determine recovery action
2254  *      @ap: host port to perform autopsy on
2255  *
2256  *      Analyze all links of @ap and determine why they failed and
2257  *      which recovery actions are needed.
2258  *
2259  *      LOCKING:
2260  *      Kernel thread context (may sleep).
2261  */
2262 void ata_eh_autopsy(struct ata_port *ap)
2263 {
2264         struct ata_link *link;
2265
2266         ata_for_each_link(link, ap, EDGE)
2267                 ata_eh_link_autopsy(link);
2268
2269         /* Handle the frigging slave link.  Autopsy is done similarly
2270          * but actions and flags are transferred over to the master
2271          * link and handled from there.
2272          */
2273         if (ap->slave_link) {
2274                 struct ata_eh_context *mehc = &ap->link.eh_context;
2275                 struct ata_eh_context *sehc = &ap->slave_link->eh_context;
2276
2277                 /* transfer control flags from master to slave */
2278                 sehc->i.flags |= mehc->i.flags & ATA_EHI_TO_SLAVE_MASK;
2279
2280                 /* perform autopsy on the slave link */
2281                 ata_eh_link_autopsy(ap->slave_link);
2282
2283                 /* transfer actions from slave to master and clear slave */
2284                 ata_eh_about_to_do(ap->slave_link, NULL, ATA_EH_ALL_ACTIONS);
2285                 mehc->i.action          |= sehc->i.action;
2286                 mehc->i.dev_action[1]   |= sehc->i.dev_action[1];
2287                 mehc->i.flags           |= sehc->i.flags;
2288                 ata_eh_done(ap->slave_link, NULL, ATA_EH_ALL_ACTIONS);
2289         }
2290
2291         /* Autopsy of fanout ports can affect host link autopsy.
2292          * Perform host link autopsy last.
2293          */
2294         if (sata_pmp_attached(ap))
2295                 ata_eh_link_autopsy(&ap->link);
2296 }
2297
2298 /**
2299  *      ata_get_cmd_descript - get description for ATA command
2300  *      @command: ATA command code to get description for
2301  *
2302  *      Return a textual description of the given command, or NULL if the
2303  *      command is not known.
2304  *
2305  *      LOCKING:
2306  *      None
2307  */
2308 const char *ata_get_cmd_descript(u8 command)
2309 {
2310 #ifdef CONFIG_ATA_VERBOSE_ERROR
2311         static const struct
2312         {
2313                 u8 command;
2314                 const char *text;
2315         } cmd_descr[] = {
2316                 { ATA_CMD_DEV_RESET,            "DEVICE RESET" },
2317                 { ATA_CMD_CHK_POWER,            "CHECK POWER MODE" },
2318                 { ATA_CMD_STANDBY,              "STANDBY" },
2319                 { ATA_CMD_IDLE,                 "IDLE" },
2320                 { ATA_CMD_EDD,                  "EXECUTE DEVICE DIAGNOSTIC" },
2321                 { ATA_CMD_DOWNLOAD_MICRO,       "DOWNLOAD MICROCODE" },
2322                 { ATA_CMD_DOWNLOAD_MICRO_DMA,   "DOWNLOAD MICROCODE DMA" },
2323                 { ATA_CMD_NOP,                  "NOP" },
2324                 { ATA_CMD_FLUSH,                "FLUSH CACHE" },
2325                 { ATA_CMD_FLUSH_EXT,            "FLUSH CACHE EXT" },
2326                 { ATA_CMD_ID_ATA,               "IDENTIFY DEVICE" },
2327                 { ATA_CMD_ID_ATAPI,             "IDENTIFY PACKET DEVICE" },
2328                 { ATA_CMD_SERVICE,              "SERVICE" },
2329                 { ATA_CMD_READ,                 "READ DMA" },
2330                 { ATA_CMD_READ_EXT,             "READ DMA EXT" },
2331                 { ATA_CMD_READ_QUEUED,          "READ DMA QUEUED" },
2332                 { ATA_CMD_READ_STREAM_EXT,      "READ STREAM EXT" },
2333                 { ATA_CMD_READ_STREAM_DMA_EXT,  "READ STREAM DMA EXT" },
2334                 { ATA_CMD_WRITE,                "WRITE DMA" },
2335                 { ATA_CMD_WRITE_EXT,            "WRITE DMA EXT" },
2336                 { ATA_CMD_WRITE_QUEUED,         "WRITE DMA QUEUED EXT" },
2337                 { ATA_CMD_WRITE_STREAM_EXT,     "WRITE STREAM EXT" },
2338                 { ATA_CMD_WRITE_STREAM_DMA_EXT, "WRITE STREAM DMA EXT" },
2339                 { ATA_CMD_WRITE_FUA_EXT,        "WRITE DMA FUA EXT" },
2340                 { ATA_CMD_WRITE_QUEUED_FUA_EXT, "WRITE DMA QUEUED FUA EXT" },
2341                 { ATA_CMD_FPDMA_READ,           "READ FPDMA QUEUED" },
2342                 { ATA_CMD_FPDMA_WRITE,          "WRITE FPDMA QUEUED" },
2343                 { ATA_CMD_FPDMA_SEND,           "SEND FPDMA QUEUED" },
2344                 { ATA_CMD_FPDMA_RECV,           "RECEIVE FPDMA QUEUED" },
2345                 { ATA_CMD_PIO_READ,             "READ SECTOR(S)" },
2346                 { ATA_CMD_PIO_READ_EXT,         "READ SECTOR(S) EXT" },
2347                 { ATA_CMD_PIO_WRITE,            "WRITE SECTOR(S)" },
2348                 { ATA_CMD_PIO_WRITE_EXT,        "WRITE SECTOR(S) EXT" },
2349                 { ATA_CMD_READ_MULTI,           "READ MULTIPLE" },
2350                 { ATA_CMD_READ_MULTI_EXT,       "READ MULTIPLE EXT" },
2351                 { ATA_CMD_WRITE_MULTI,          "WRITE MULTIPLE" },
2352                 { ATA_CMD_WRITE_MULTI_EXT,      "WRITE MULTIPLE EXT" },
2353                 { ATA_CMD_WRITE_MULTI_FUA_EXT,  "WRITE MULTIPLE FUA EXT" },
2354                 { ATA_CMD_SET_FEATURES,         "SET FEATURES" },
2355                 { ATA_CMD_SET_MULTI,            "SET MULTIPLE MODE" },
2356                 { ATA_CMD_VERIFY,               "READ VERIFY SECTOR(S)" },
2357                 { ATA_CMD_VERIFY_EXT,           "READ VERIFY SECTOR(S) EXT" },
2358                 { ATA_CMD_WRITE_UNCORR_EXT,     "WRITE UNCORRECTABLE EXT" },
2359                 { ATA_CMD_STANDBYNOW1,          "STANDBY IMMEDIATE" },
2360                 { ATA_CMD_IDLEIMMEDIATE,        "IDLE IMMEDIATE" },
2361                 { ATA_CMD_SLEEP,                "SLEEP" },
2362                 { ATA_CMD_INIT_DEV_PARAMS,      "INITIALIZE DEVICE PARAMETERS" },
2363                 { ATA_CMD_READ_NATIVE_MAX,      "READ NATIVE MAX ADDRESS" },
2364                 { ATA_CMD_READ_NATIVE_MAX_EXT,  "READ NATIVE MAX ADDRESS EXT" },
2365                 { ATA_CMD_SET_MAX,              "SET MAX ADDRESS" },
2366                 { ATA_CMD_SET_MAX_EXT,          "SET MAX ADDRESS EXT" },
2367                 { ATA_CMD_READ_LOG_EXT,         "READ LOG EXT" },
2368                 { ATA_CMD_WRITE_LOG_EXT,        "WRITE LOG EXT" },
2369                 { ATA_CMD_READ_LOG_DMA_EXT,     "READ LOG DMA EXT" },
2370                 { ATA_CMD_WRITE_LOG_DMA_EXT,    "WRITE LOG DMA EXT" },
2371                 { ATA_CMD_TRUSTED_NONDATA,      "TRUSTED NON-DATA" },
2372                 { ATA_CMD_TRUSTED_RCV,          "TRUSTED RECEIVE" },
2373                 { ATA_CMD_TRUSTED_RCV_DMA,      "TRUSTED RECEIVE DMA" },
2374                 { ATA_CMD_TRUSTED_SND,          "TRUSTED SEND" },
2375                 { ATA_CMD_TRUSTED_SND_DMA,      "TRUSTED SEND DMA" },
2376                 { ATA_CMD_PMP_READ,             "READ BUFFER" },
2377                 { ATA_CMD_PMP_READ_DMA,         "READ BUFFER DMA" },
2378                 { ATA_CMD_PMP_WRITE,            "WRITE BUFFER" },
2379                 { ATA_CMD_PMP_WRITE_DMA,        "WRITE BUFFER DMA" },
2380                 { ATA_CMD_CONF_OVERLAY,         "DEVICE CONFIGURATION OVERLAY" },
2381                 { ATA_CMD_SEC_SET_PASS,         "SECURITY SET PASSWORD" },
2382                 { ATA_CMD_SEC_UNLOCK,           "SECURITY UNLOCK" },
2383                 { ATA_CMD_SEC_ERASE_PREP,       "SECURITY ERASE PREPARE" },
2384                 { ATA_CMD_SEC_ERASE_UNIT,       "SECURITY ERASE UNIT" },
2385                 { ATA_CMD_SEC_FREEZE_LOCK,      "SECURITY FREEZE LOCK" },
2386                 { ATA_CMD_SEC_DISABLE_PASS,     "SECURITY DISABLE PASSWORD" },
2387                 { ATA_CMD_CONFIG_STREAM,        "CONFIGURE STREAM" },
2388                 { ATA_CMD_SMART,                "SMART" },
2389                 { ATA_CMD_MEDIA_LOCK,           "DOOR LOCK" },
2390                 { ATA_CMD_MEDIA_UNLOCK,         "DOOR UNLOCK" },
2391                 { ATA_CMD_DSM,                  "DATA SET MANAGEMENT" },
2392                 { ATA_CMD_CHK_MED_CRD_TYP,      "CHECK MEDIA CARD TYPE" },
2393                 { ATA_CMD_CFA_REQ_EXT_ERR,      "CFA REQUEST EXTENDED ERROR" },
2394                 { ATA_CMD_CFA_WRITE_NE,         "CFA WRITE SECTORS WITHOUT ERASE" },
2395                 { ATA_CMD_CFA_TRANS_SECT,       "CFA TRANSLATE SECTOR" },
2396                 { ATA_CMD_CFA_ERASE,            "CFA ERASE SECTORS" },
2397                 { ATA_CMD_CFA_WRITE_MULT_NE,    "CFA WRITE MULTIPLE WITHOUT ERASE" },
2398                 { ATA_CMD_REQ_SENSE_DATA,       "REQUEST SENSE DATA EXT" },
2399                 { ATA_CMD_SANITIZE_DEVICE,      "SANITIZE DEVICE" },
2400                 { ATA_CMD_ZAC_MGMT_IN,          "ZAC MANAGEMENT IN" },
2401                 { ATA_CMD_ZAC_MGMT_OUT,         "ZAC MANAGEMENT OUT" },
2402                 { ATA_CMD_READ_LONG,            "READ LONG (with retries)" },
2403                 { ATA_CMD_READ_LONG_ONCE,       "READ LONG (without retries)" },
2404                 { ATA_CMD_WRITE_LONG,           "WRITE LONG (with retries)" },
2405                 { ATA_CMD_WRITE_LONG_ONCE,      "WRITE LONG (without retries)" },
2406                 { ATA_CMD_RESTORE,              "RECALIBRATE" },
2407                 { 0,                            NULL } /* terminate list */
2408         };
2409
2410         unsigned int i;
2411         for (i = 0; cmd_descr[i].text; i++)
2412                 if (cmd_descr[i].command == command)
2413                         return cmd_descr[i].text;
2414 #endif
2415
2416         return NULL;
2417 }
2418 EXPORT_SYMBOL_GPL(ata_get_cmd_descript);
2419
2420 /**
2421  *      ata_eh_link_report - report error handling to user
2422  *      @link: ATA link EH is going on
2423  *
2424  *      Report EH to user.
2425  *
2426  *      LOCKING:
2427  *      None.
2428  */
2429 static void ata_eh_link_report(struct ata_link *link)
2430 {
2431         struct ata_port *ap = link->ap;
2432         struct ata_eh_context *ehc = &link->eh_context;
2433         struct ata_queued_cmd *qc;
2434         const char *frozen, *desc;
2435         char tries_buf[6] = "";
2436         int tag, nr_failed = 0;
2437
2438         if (ehc->i.flags & ATA_EHI_QUIET)
2439                 return;
2440
2441         desc = NULL;
2442         if (ehc->i.desc[0] != '\0')
2443                 desc = ehc->i.desc;
2444
2445         ata_qc_for_each_raw(ap, qc, tag) {
2446                 if (!(qc->flags & ATA_QCFLAG_FAILED) ||
2447                     ata_dev_phys_link(qc->dev) != link ||
2448                     ((qc->flags & ATA_QCFLAG_QUIET) &&
2449                      qc->err_mask == AC_ERR_DEV))
2450                         continue;
2451                 if (qc->flags & ATA_QCFLAG_SENSE_VALID && !qc->err_mask)
2452                         continue;
2453
2454                 nr_failed++;
2455         }
2456
2457         if (!nr_failed && !ehc->i.err_mask)
2458                 return;
2459
2460         frozen = "";
2461         if (ap->pflags & ATA_PFLAG_FROZEN)
2462                 frozen = " frozen";
2463
2464         if (ap->eh_tries < ATA_EH_MAX_TRIES)
2465                 snprintf(tries_buf, sizeof(tries_buf), " t%d",
2466                          ap->eh_tries);
2467
2468         if (ehc->i.dev) {
2469                 ata_dev_err(ehc->i.dev, "exception Emask 0x%x "
2470                             "SAct 0x%x SErr 0x%x action 0x%x%s%s\n",
2471                             ehc->i.err_mask, link->sactive, ehc->i.serror,
2472                             ehc->i.action, frozen, tries_buf);
2473                 if (desc)
2474                         ata_dev_err(ehc->i.dev, "%s\n", desc);
2475         } else {
2476                 ata_link_err(link, "exception Emask 0x%x "
2477                              "SAct 0x%x SErr 0x%x action 0x%x%s%s\n",
2478                              ehc->i.err_mask, link->sactive, ehc->i.serror,
2479                              ehc->i.action, frozen, tries_buf);
2480                 if (desc)
2481                         ata_link_err(link, "%s\n", desc);
2482         }
2483
2484 #ifdef CONFIG_ATA_VERBOSE_ERROR
2485         if (ehc->i.serror)
2486                 ata_link_err(link,
2487                   "SError: { %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s}\n",
2488                   ehc->i.serror & SERR_DATA_RECOVERED ? "RecovData " : "",
2489                   ehc->i.serror & SERR_COMM_RECOVERED ? "RecovComm " : "",
2490                   ehc->i.serror & SERR_DATA ? "UnrecovData " : "",
2491                   ehc->i.serror & SERR_PERSISTENT ? "Persist " : "",
2492                   ehc->i.serror & SERR_PROTOCOL ? "Proto " : "",
2493                   ehc->i.serror & SERR_INTERNAL ? "HostInt " : "",
2494                   ehc->i.serror & SERR_PHYRDY_CHG ? "PHYRdyChg " : "",
2495                   ehc->i.serror & SERR_PHY_INT_ERR ? "PHYInt " : "",
2496                   ehc->i.serror & SERR_COMM_WAKE ? "CommWake " : "",
2497                   ehc->i.serror & SERR_10B_8B_ERR ? "10B8B " : "",
2498                   ehc->i.serror & SERR_DISPARITY ? "Dispar " : "",
2499                   ehc->i.serror & SERR_CRC ? "BadCRC " : "",
2500                   ehc->i.serror & SERR_HANDSHAKE ? "Handshk " : "",
2501                   ehc->i.serror & SERR_LINK_SEQ_ERR ? "LinkSeq " : "",
2502                   ehc->i.serror & SERR_TRANS_ST_ERROR ? "TrStaTrns " : "",
2503                   ehc->i.serror & SERR_UNRECOG_FIS ? "UnrecFIS " : "",
2504                   ehc->i.serror & SERR_DEV_XCHG ? "DevExch " : "");
2505 #endif
2506
2507         ata_qc_for_each_raw(ap, qc, tag) {
2508                 struct ata_taskfile *cmd = &qc->tf, *res = &qc->result_tf;
2509                 char data_buf[20] = "";
2510                 char cdb_buf[70] = "";
2511
2512                 if (!(qc->flags & ATA_QCFLAG_FAILED) ||
2513                     ata_dev_phys_link(qc->dev) != link || !qc->err_mask)
2514                         continue;
2515
2516                 if (qc->dma_dir != DMA_NONE) {
2517                         static const char *dma_str[] = {
2518                                 [DMA_BIDIRECTIONAL]     = "bidi",
2519                                 [DMA_TO_DEVICE]         = "out",
2520                                 [DMA_FROM_DEVICE]       = "in",
2521                         };
2522                         const char *prot_str = NULL;
2523
2524                         switch (qc->tf.protocol) {
2525                         case ATA_PROT_UNKNOWN:
2526                                 prot_str = "unknown";
2527                                 break;
2528                         case ATA_PROT_NODATA:
2529                                 prot_str = "nodata";
2530                                 break;
2531                         case ATA_PROT_PIO:
2532                                 prot_str = "pio";
2533                                 break;
2534                         case ATA_PROT_DMA:
2535                                 prot_str = "dma";
2536                                 break;
2537                         case ATA_PROT_NCQ:
2538                                 prot_str = "ncq dma";
2539                                 break;
2540                         case ATA_PROT_NCQ_NODATA:
2541                                 prot_str = "ncq nodata";
2542                                 break;
2543                         case ATAPI_PROT_NODATA:
2544                                 prot_str = "nodata";
2545                                 break;
2546                         case ATAPI_PROT_PIO:
2547                                 prot_str = "pio";
2548                                 break;
2549                         case ATAPI_PROT_DMA:
2550                                 prot_str = "dma";
2551                                 break;
2552                         }
2553                         snprintf(data_buf, sizeof(data_buf), " %s %u %s",
2554                                  prot_str, qc->nbytes, dma_str[qc->dma_dir]);
2555                 }
2556
2557                 if (ata_is_atapi(qc->tf.protocol)) {
2558                         const u8 *cdb = qc->cdb;
2559                         size_t cdb_len = qc->dev->cdb_len;
2560
2561                         if (qc->scsicmd) {
2562                                 cdb = qc->scsicmd->cmnd;
2563                                 cdb_len = qc->scsicmd->cmd_len;
2564                         }
2565                         __scsi_format_command(cdb_buf, sizeof(cdb_buf),
2566                                               cdb, cdb_len);
2567                 } else {
2568                         const char *descr = ata_get_cmd_descript(cmd->command);
2569                         if (descr)
2570                                 ata_dev_err(qc->dev, "failed command: %s\n",
2571                                             descr);
2572                 }
2573
2574                 ata_dev_err(qc->dev,
2575                         "cmd %02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x "
2576                         "tag %d%s\n         %s"
2577                         "res %02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x "
2578                         "Emask 0x%x (%s)%s\n",
2579                         cmd->command, cmd->feature, cmd->nsect,
2580                         cmd->lbal, cmd->lbam, cmd->lbah,
2581                         cmd->hob_feature, cmd->hob_nsect,
2582                         cmd->hob_lbal, cmd->hob_lbam, cmd->hob_lbah,
2583                         cmd->device, qc->tag, data_buf, cdb_buf,
2584                         res->command, res->feature, res->nsect,
2585                         res->lbal, res->lbam, res->lbah,
2586                         res->hob_feature, res->hob_nsect,
2587                         res->hob_lbal, res->hob_lbam, res->hob_lbah,
2588                         res->device, qc->err_mask, ata_err_string(qc->err_mask),
2589                         qc->err_mask & AC_ERR_NCQ ? " <F>" : "");
2590
2591 #ifdef CONFIG_ATA_VERBOSE_ERROR
2592                 if (res->command & (ATA_BUSY | ATA_DRDY | ATA_DF | ATA_DRQ |
2593                                     ATA_SENSE | ATA_ERR)) {
2594                         if (res->command & ATA_BUSY)
2595                                 ata_dev_err(qc->dev, "status: { Busy }\n");
2596                         else
2597                                 ata_dev_err(qc->dev, "status: { %s%s%s%s%s}\n",
2598                                   res->command & ATA_DRDY ? "DRDY " : "",
2599                                   res->command & ATA_DF ? "DF " : "",
2600                                   res->command & ATA_DRQ ? "DRQ " : "",
2601                                   res->command & ATA_SENSE ? "SENSE " : "",
2602                                   res->command & ATA_ERR ? "ERR " : "");
2603                 }
2604
2605                 if (cmd->command != ATA_CMD_PACKET &&
2606                     (res->feature & (ATA_ICRC | ATA_UNC | ATA_AMNF |
2607                                      ATA_IDNF | ATA_ABORTED)))
2608                         ata_dev_err(qc->dev, "error: { %s%s%s%s%s}\n",
2609                           res->feature & ATA_ICRC ? "ICRC " : "",
2610                           res->feature & ATA_UNC ? "UNC " : "",
2611                           res->feature & ATA_AMNF ? "AMNF " : "",
2612                           res->feature & ATA_IDNF ? "IDNF " : "",
2613                           res->feature & ATA_ABORTED ? "ABRT " : "");
2614 #endif
2615         }
2616 }
2617
2618 /**
2619  *      ata_eh_report - report error handling to user
2620  *      @ap: ATA port to report EH about
2621  *
2622  *      Report EH to user.
2623  *
2624  *      LOCKING:
2625  *      None.
2626  */
2627 void ata_eh_report(struct ata_port *ap)
2628 {
2629         struct ata_link *link;
2630
2631         ata_for_each_link(link, ap, HOST_FIRST)
2632                 ata_eh_link_report(link);
2633 }
2634
2635 static int ata_do_reset(struct ata_link *link, ata_reset_fn_t reset,
2636                         unsigned int *classes, unsigned long deadline,
2637                         bool clear_classes)
2638 {
2639         struct ata_device *dev;
2640
2641         if (clear_classes)
2642                 ata_for_each_dev(dev, link, ALL)
2643                         classes[dev->devno] = ATA_DEV_UNKNOWN;
2644
2645         return reset(link, classes, deadline);
2646 }
2647
2648 static int ata_eh_followup_srst_needed(struct ata_link *link, int rc)
2649 {
2650         if ((link->flags & ATA_LFLAG_NO_SRST) || ata_link_offline(link))
2651                 return 0;
2652         if (rc == -EAGAIN)
2653                 return 1;
2654         if (sata_pmp_supported(link->ap) && ata_is_host_link(link))
2655                 return 1;
2656         return 0;
2657 }
2658
2659 int ata_eh_reset(struct ata_link *link, int classify,
2660                  ata_prereset_fn_t prereset, ata_reset_fn_t softreset,
2661                  ata_reset_fn_t hardreset, ata_postreset_fn_t postreset)
2662 {
2663         struct ata_port *ap = link->ap;
2664         struct ata_link *slave = ap->slave_link;
2665         struct ata_eh_context *ehc = &link->eh_context;
2666         struct ata_eh_context *sehc = slave ? &slave->eh_context : NULL;
2667         unsigned int *classes = ehc->classes;
2668         unsigned int lflags = link->flags;
2669         int verbose = !(ehc->i.flags & ATA_EHI_QUIET);
2670         int max_tries = 0, try = 0;
2671         struct ata_link *failed_link;
2672         struct ata_device *dev;
2673         unsigned long deadline, now;
2674         ata_reset_fn_t reset;
2675         unsigned long flags;
2676         u32 sstatus;
2677         int nr_unknown, rc;
2678
2679         /*
2680          * Prepare to reset
2681          */
2682         while (ata_eh_reset_timeouts[max_tries] != ULONG_MAX)
2683                 max_tries++;
2684         if (link->flags & ATA_LFLAG_RST_ONCE)
2685                 max_tries = 1;
2686         if (link->flags & ATA_LFLAG_NO_HRST)
2687                 hardreset = NULL;
2688         if (link->flags & ATA_LFLAG_NO_SRST)
2689                 softreset = NULL;
2690
2691         /* make sure each reset attempt is at least COOL_DOWN apart */
2692         if (ehc->i.flags & ATA_EHI_DID_RESET) {
2693                 now = jiffies;
2694                 WARN_ON(time_after(ehc->last_reset, now));
2695                 deadline = ata_deadline(ehc->last_reset,
2696                                         ATA_EH_RESET_COOL_DOWN);
2697                 if (time_before(now, deadline))
2698                         schedule_timeout_uninterruptible(deadline - now);
2699         }
2700
2701         spin_lock_irqsave(ap->lock, flags);
2702         ap->pflags |= ATA_PFLAG_RESETTING;
2703         spin_unlock_irqrestore(ap->lock, flags);
2704
2705         ata_eh_about_to_do(link, NULL, ATA_EH_RESET);
2706
2707         ata_for_each_dev(dev, link, ALL) {
2708                 /* If we issue an SRST then an ATA drive (not ATAPI)
2709                  * may change configuration and be in PIO0 timing. If
2710                  * we do a hard reset (or are coming from power on)
2711                  * this is true for ATA or ATAPI. Until we've set a
2712                  * suitable controller mode we should not touch the
2713                  * bus as we may be talking too fast.
2714                  */
2715                 dev->pio_mode = XFER_PIO_0;
2716                 dev->dma_mode = 0xff;
2717
2718                 /* If the controller has a pio mode setup function
2719                  * then use it to set the chipset to rights. Don't
2720                  * touch the DMA setup as that will be dealt with when
2721                  * configuring devices.
2722                  */
2723                 if (ap->ops->set_piomode)
2724                         ap->ops->set_piomode(ap, dev);
2725         }
2726
2727         /* prefer hardreset */
2728         reset = NULL;
2729         ehc->i.action &= ~ATA_EH_RESET;
2730         if (hardreset) {
2731                 reset = hardreset;
2732                 ehc->i.action |= ATA_EH_HARDRESET;
2733         } else if (softreset) {
2734                 reset = softreset;
2735                 ehc->i.action |= ATA_EH_SOFTRESET;
2736         }
2737
2738         if (prereset) {
2739                 unsigned long deadline = ata_deadline(jiffies,
2740                                                       ATA_EH_PRERESET_TIMEOUT);
2741
2742                 if (slave) {
2743                         sehc->i.action &= ~ATA_EH_RESET;
2744                         sehc->i.action |= ehc->i.action;
2745                 }
2746
2747                 rc = prereset(link, deadline);
2748
2749                 /* If present, do prereset on slave link too.  Reset
2750                  * is skipped iff both master and slave links report
2751                  * -ENOENT or clear ATA_EH_RESET.
2752                  */
2753                 if (slave && (rc == 0 || rc == -ENOENT)) {
2754                         int tmp;
2755
2756                         tmp = prereset(slave, deadline);
2757                         if (tmp != -ENOENT)
2758                                 rc = tmp;
2759
2760                         ehc->i.action |= sehc->i.action;
2761                 }
2762
2763                 if (rc) {
2764                         if (rc == -ENOENT) {
2765                                 ata_link_dbg(link, "port disabled--ignoring\n");
2766                                 ehc->i.action &= ~ATA_EH_RESET;
2767
2768                                 ata_for_each_dev(dev, link, ALL)
2769                                         classes[dev->devno] = ATA_DEV_NONE;
2770
2771                                 rc = 0;
2772                         } else
2773                                 ata_link_err(link,
2774                                              "prereset failed (errno=%d)\n",
2775                                              rc);
2776                         goto out;
2777                 }
2778
2779                 /* prereset() might have cleared ATA_EH_RESET.  If so,
2780                  * bang classes, thaw and return.
2781                  */
2782                 if (reset && !(ehc->i.action & ATA_EH_RESET)) {
2783                         ata_for_each_dev(dev, link, ALL)
2784                                 classes[dev->devno] = ATA_DEV_NONE;
2785                         if ((ap->pflags & ATA_PFLAG_FROZEN) &&
2786                             ata_is_host_link(link))
2787                                 ata_eh_thaw_port(ap);
2788                         rc = 0;
2789                         goto out;
2790                 }
2791         }
2792
2793  retry:
2794         /*
2795          * Perform reset
2796          */
2797         if (ata_is_host_link(link))
2798                 ata_eh_freeze_port(ap);
2799
2800         deadline = ata_deadline(jiffies, ata_eh_reset_timeouts[try++]);
2801
2802         if (reset) {
2803                 if (verbose)
2804                         ata_link_info(link, "%s resetting link\n",
2805                                       reset == softreset ? "soft" : "hard");
2806
2807                 /* mark that this EH session started with reset */
2808                 ehc->last_reset = jiffies;
2809                 if (reset == hardreset)
2810                         ehc->i.flags |= ATA_EHI_DID_HARDRESET;
2811                 else
2812                         ehc->i.flags |= ATA_EHI_DID_SOFTRESET;
2813
2814                 rc = ata_do_reset(link, reset, classes, deadline, true);
2815                 if (rc && rc != -EAGAIN) {
2816                         failed_link = link;
2817                         goto fail;
2818                 }
2819
2820                 /* hardreset slave link if existent */
2821                 if (slave && reset == hardreset) {
2822                         int tmp;
2823
2824                         if (verbose)
2825                                 ata_link_info(slave, "hard resetting link\n");
2826
2827                         ata_eh_about_to_do(slave, NULL, ATA_EH_RESET);
2828                         tmp = ata_do_reset(slave, reset, classes, deadline,
2829                                            false);
2830                         switch (tmp) {
2831                         case -EAGAIN:
2832                                 rc = -EAGAIN;
2833                         case 0:
2834                                 break;
2835                         default:
2836                                 failed_link = slave;
2837                                 rc = tmp;
2838                                 goto fail;
2839                         }
2840                 }
2841
2842                 /* perform follow-up SRST if necessary */
2843                 if (reset == hardreset &&
2844                     ata_eh_followup_srst_needed(link, rc)) {
2845                         reset = softreset;
2846
2847                         if (!reset) {
2848                                 ata_link_err(link,
2849              "follow-up softreset required but no softreset available\n");
2850                                 failed_link = link;
2851                                 rc = -EINVAL;
2852                                 goto fail;
2853                         }
2854
2855                         ata_eh_about_to_do(link, NULL, ATA_EH_RESET);
2856                         rc = ata_do_reset(link, reset, classes, deadline, true);
2857                         if (rc) {
2858                                 failed_link = link;
2859                                 goto fail;
2860                         }
2861                 }
2862         } else {
2863                 if (verbose)
2864                         ata_link_info(link,
2865         "no reset method available, skipping reset\n");
2866                 if (!(lflags & ATA_LFLAG_ASSUME_CLASS))
2867                         lflags |= ATA_LFLAG_ASSUME_ATA;
2868         }
2869
2870         /*
2871          * Post-reset processing
2872          */
2873         ata_for_each_dev(dev, link, ALL) {
2874                 /* After the reset, the device state is PIO 0 and the
2875                  * controller state is undefined.  Reset also wakes up
2876                  * drives from sleeping mode.
2877                  */
2878                 dev->pio_mode = XFER_PIO_0;
2879                 dev->flags &= ~ATA_DFLAG_SLEEPING;
2880
2881                 if (ata_phys_link_offline(ata_dev_phys_link(dev)))
2882                         continue;
2883
2884                 /* apply class override */
2885                 if (lflags & ATA_LFLAG_ASSUME_ATA)
2886                         classes[dev->devno] = ATA_DEV_ATA;
2887                 else if (lflags & ATA_LFLAG_ASSUME_SEMB)
2888                         classes[dev->devno] = ATA_DEV_SEMB_UNSUP;
2889         }
2890
2891         /* record current link speed */
2892         if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0)
2893                 link->sata_spd = (sstatus >> 4) & 0xf;
2894         if (slave && sata_scr_read(slave, SCR_STATUS, &sstatus) == 0)
2895                 slave->sata_spd = (sstatus >> 4) & 0xf;
2896
2897         /* thaw the port */
2898         if (ata_is_host_link(link))
2899                 ata_eh_thaw_port(ap);
2900
2901         /* postreset() should clear hardware SError.  Although SError
2902          * is cleared during link resume, clearing SError here is
2903          * necessary as some PHYs raise hotplug events after SRST.
2904          * This introduces race condition where hotplug occurs between
2905          * reset and here.  This race is mediated by cross checking
2906          * link onlineness and classification result later.
2907          */
2908         if (postreset) {
2909                 postreset(link, classes);
2910                 if (slave)
2911                         postreset(slave, classes);
2912         }
2913
2914         /*
2915          * Some controllers can't be frozen very well and may set spurious
2916          * error conditions during reset.  Clear accumulated error
2917          * information and re-thaw the port if frozen.  As reset is the
2918          * final recovery action and we cross check link onlineness against
2919          * device classification later, no hotplug event is lost by this.
2920          */
2921         spin_lock_irqsave(link->ap->lock, flags);
2922         memset(&link->eh_info, 0, sizeof(link->eh_info));
2923         if (slave)
2924                 memset(&slave->eh_info, 0, sizeof(link->eh_info));
2925         ap->pflags &= ~ATA_PFLAG_EH_PENDING;
2926         spin_unlock_irqrestore(link->ap->lock, flags);
2927
2928         if (ap->pflags & ATA_PFLAG_FROZEN)
2929                 ata_eh_thaw_port(ap);
2930
2931         /*
2932          * Make sure onlineness and classification result correspond.
2933          * Hotplug could have happened during reset and some
2934          * controllers fail to wait while a drive is spinning up after
2935          * being hotplugged causing misdetection.  By cross checking
2936          * link on/offlineness and classification result, those
2937          * conditions can be reliably detected and retried.
2938          */
2939         nr_unknown = 0;
2940         ata_for_each_dev(dev, link, ALL) {
2941                 if (ata_phys_link_online(ata_dev_phys_link(dev))) {
2942                         if (classes[dev->devno] == ATA_DEV_UNKNOWN) {
2943                                 ata_dev_dbg(dev, "link online but device misclassified\n");
2944                                 classes[dev->devno] = ATA_DEV_NONE;
2945                                 nr_unknown++;
2946                         }
2947                 } else if (ata_phys_link_offline(ata_dev_phys_link(dev))) {
2948                         if (ata_class_enabled(classes[dev->devno]))
2949                                 ata_dev_dbg(dev,
2950                                             "link offline, clearing class %d to NONE\n",
2951                                             classes[dev->devno]);
2952                         classes[dev->devno] = ATA_DEV_NONE;
2953                 } else if (classes[dev->devno] == ATA_DEV_UNKNOWN) {
2954                         ata_dev_dbg(dev,
2955                                     "link status unknown, clearing UNKNOWN to NONE\n");
2956                         classes[dev->devno] = ATA_DEV_NONE;
2957                 }
2958         }
2959
2960         if (classify && nr_unknown) {
2961                 if (try < max_tries) {
2962                         ata_link_warn(link,
2963                                       "link online but %d devices misclassified, retrying\n",
2964                                       nr_unknown);
2965                         failed_link = link;
2966                         rc = -EAGAIN;
2967                         goto fail;
2968                 }
2969                 ata_link_warn(link,
2970                               "link online but %d devices misclassified, "
2971                               "device detection might fail\n", nr_unknown);
2972         }
2973
2974         /* reset successful, schedule revalidation */
2975         ata_eh_done(link, NULL, ATA_EH_RESET);
2976         if (slave)
2977                 ata_eh_done(slave, NULL, ATA_EH_RESET);
2978         ehc->last_reset = jiffies;              /* update to completion time */
2979         ehc->i.action |= ATA_EH_REVALIDATE;
2980         link->lpm_policy = ATA_LPM_UNKNOWN;     /* reset LPM state */
2981
2982         rc = 0;
2983  out:
2984         /* clear hotplug flag */
2985         ehc->i.flags &= ~ATA_EHI_HOTPLUGGED;
2986         if (slave)
2987                 sehc->i.flags &= ~ATA_EHI_HOTPLUGGED;
2988
2989         spin_lock_irqsave(ap->lock, flags);
2990         ap->pflags &= ~ATA_PFLAG_RESETTING;
2991         spin_unlock_irqrestore(ap->lock, flags);
2992
2993         return rc;
2994
2995  fail:
2996         /* if SCR isn't accessible on a fan-out port, PMP needs to be reset */
2997         if (!ata_is_host_link(link) &&
2998             sata_scr_read(link, SCR_STATUS, &sstatus))
2999                 rc = -ERESTART;
3000
3001         if (try >= max_tries) {
3002                 /*
3003                  * Thaw host port even if reset failed, so that the port
3004                  * can be retried on the next phy event.  This risks
3005                  * repeated EH runs but seems to be a better tradeoff than
3006                  * shutting down a port after a botched hotplug attempt.
3007                  */
3008                 if (ata_is_host_link(link))
3009                         ata_eh_thaw_port(ap);
3010                 goto out;
3011         }
3012
3013         now = jiffies;
3014         if (time_before(now, deadline)) {
3015                 unsigned long delta = deadline - now;
3016
3017                 ata_link_warn(failed_link,
3018                         "reset failed (errno=%d), retrying in %u secs\n",
3019                         rc, DIV_ROUND_UP(jiffies_to_msecs(delta), 1000));
3020
3021                 ata_eh_release(ap);
3022                 while (delta)
3023                         delta = schedule_timeout_uninterruptible(delta);
3024                 ata_eh_acquire(ap);
3025         }
3026
3027         /*
3028          * While disks spinup behind PMP, some controllers fail sending SRST.
3029          * They need to be reset - as well as the PMP - before retrying.
3030          */
3031         if (rc == -ERESTART) {
3032                 if (ata_is_host_link(link))
3033                         ata_eh_thaw_port(ap);
3034                 goto out;
3035         }
3036
3037         if (try == max_tries - 1) {
3038                 sata_down_spd_limit(link, 0);
3039                 if (slave)
3040                         sata_down_spd_limit(slave, 0);
3041         } else if (rc == -EPIPE)
3042                 sata_down_spd_limit(failed_link, 0);
3043
3044         if (hardreset)
3045                 reset = hardreset;
3046         goto retry;
3047 }
3048
3049 static inline void ata_eh_pull_park_action(struct ata_port *ap)
3050 {
3051         struct ata_link *link;
3052         struct ata_device *dev;
3053         unsigned long flags;
3054
3055         /*
3056          * This function can be thought of as an extended version of
3057          * ata_eh_about_to_do() specially crafted to accommodate the
3058          * requirements of ATA_EH_PARK handling. Since the EH thread
3059          * does not leave the do {} while () loop in ata_eh_recover as
3060          * long as the timeout for a park request to *one* device on
3061          * the port has not expired, and since we still want to pick
3062          * up park requests to other devices on the same port or
3063          * timeout updates for the same device, we have to pull
3064          * ATA_EH_PARK actions from eh_info into eh_context.i
3065          * ourselves at the beginning of each pass over the loop.
3066          *
3067          * Additionally, all write accesses to &ap->park_req_pending
3068          * through reinit_completion() (see below) or complete_all()
3069          * (see ata_scsi_park_store()) are protected by the host lock.
3070          * As a result we have that park_req_pending.done is zero on
3071          * exit from this function, i.e. when ATA_EH_PARK actions for
3072          * *all* devices on port ap have been pulled into the
3073          * respective eh_context structs. If, and only if,
3074          * park_req_pending.done is non-zero by the time we reach
3075          * wait_for_completion_timeout(), another ATA_EH_PARK action
3076          * has been scheduled for at least one of the devices on port
3077          * ap and we have to cycle over the do {} while () loop in
3078          * ata_eh_recover() again.
3079          */
3080
3081         spin_lock_irqsave(ap->lock, flags);
3082         reinit_completion(&ap->park_req_pending);
3083         ata_for_each_link(link, ap, EDGE) {
3084                 ata_for_each_dev(dev, link, ALL) {
3085                         struct ata_eh_info *ehi = &link->eh_info;
3086
3087                         link->eh_context.i.dev_action[dev->devno] |=
3088                                 ehi->dev_action[dev->devno] & ATA_EH_PARK;
3089                         ata_eh_clear_action(link, dev, ehi, ATA_EH_PARK);
3090                 }
3091         }
3092         spin_unlock_irqrestore(ap->lock, flags);
3093 }
3094
3095 static void ata_eh_park_issue_cmd(struct ata_device *dev, int park)
3096 {
3097         struct ata_eh_context *ehc = &dev->link->eh_context;
3098         struct ata_taskfile tf;
3099         unsigned int err_mask;
3100
3101         ata_tf_init(dev, &tf);
3102         if (park) {
3103                 ehc->unloaded_mask |= 1 << dev->devno;
3104                 tf.command = ATA_CMD_IDLEIMMEDIATE;
3105                 tf.feature = 0x44;
3106                 tf.lbal = 0x4c;
3107                 tf.lbam = 0x4e;
3108                 tf.lbah = 0x55;
3109         } else {
3110                 ehc->unloaded_mask &= ~(1 << dev->devno);
3111                 tf.command = ATA_CMD_CHK_POWER;
3112         }
3113
3114         tf.flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR;
3115         tf.protocol = ATA_PROT_NODATA;
3116         err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
3117         if (park && (err_mask || tf.lbal != 0xc4)) {
3118                 ata_dev_err(dev, "head unload failed!\n");
3119                 ehc->unloaded_mask &= ~(1 << dev->devno);
3120         }
3121 }
3122
3123 static int ata_eh_revalidate_and_attach(struct ata_link *link,
3124                                         struct ata_device **r_failed_dev)
3125 {
3126         struct ata_port *ap = link->ap;
3127         struct ata_eh_context *ehc = &link->eh_context;
3128         struct ata_device *dev;
3129         unsigned int new_mask = 0;
3130         unsigned long flags;
3131         int rc = 0;
3132
3133         DPRINTK("ENTER\n");
3134
3135         /* For PATA drive side cable detection to work, IDENTIFY must
3136          * be done backwards such that PDIAG- is released by the slave
3137          * device before the master device is identified.
3138          */
3139         ata_for_each_dev(dev, link, ALL_REVERSE) {
3140                 unsigned int action = ata_eh_dev_action(dev);
3141                 unsigned int readid_flags = 0;
3142
3143                 if (ehc->i.flags & ATA_EHI_DID_RESET)
3144                         readid_flags |= ATA_READID_POSTRESET;
3145
3146                 if ((action & ATA_EH_REVALIDATE) && ata_dev_enabled(dev)) {
3147                         WARN_ON(dev->class == ATA_DEV_PMP);
3148
3149                         if (ata_phys_link_offline(ata_dev_phys_link(dev))) {
3150                                 rc = -EIO;
3151                                 goto err;
3152                         }
3153
3154                         ata_eh_about_to_do(link, dev, ATA_EH_REVALIDATE);
3155                         rc = ata_dev_revalidate(dev, ehc->classes[dev->devno],
3156                                                 readid_flags);
3157                         if (rc)
3158                                 goto err;
3159
3160                         ata_eh_done(link, dev, ATA_EH_REVALIDATE);
3161
3162                         /* Configuration may have changed, reconfigure
3163                          * transfer mode.
3164                          */
3165                         ehc->i.flags |= ATA_EHI_SETMODE;
3166
3167                         /* schedule the scsi_rescan_device() here */
3168                         schedule_work(&(ap->scsi_rescan_task));
3169                 } else if (dev->class == ATA_DEV_UNKNOWN &&
3170                            ehc->tries[dev->devno] &&
3171                            ata_class_enabled(ehc->classes[dev->devno])) {
3172                         /* Temporarily set dev->class, it will be
3173                          * permanently set once all configurations are
3174                          * complete.  This is necessary because new
3175                          * device configuration is done in two
3176                          * separate loops.
3177                          */
3178                         dev->class = ehc->classes[dev->devno];
3179
3180                         if (dev->class == ATA_DEV_PMP)
3181                                 rc = sata_pmp_attach(dev);
3182                         else
3183                                 rc = ata_dev_read_id(dev, &dev->class,
3184                                                      readid_flags, dev->id);
3185
3186                         /* read_id might have changed class, store and reset */
3187                         ehc->classes[dev->devno] = dev->class;
3188                         dev->class = ATA_DEV_UNKNOWN;
3189
3190                         switch (rc) {
3191                         case 0:
3192                                 /* clear error info accumulated during probe */
3193                                 ata_ering_clear(&dev->ering);
3194                                 new_mask |= 1 << dev->devno;
3195                                 break;
3196                         case -ENOENT:
3197                                 /* IDENTIFY was issued to non-existent
3198                                  * device.  No need to reset.  Just
3199                                  * thaw and ignore the device.
3200                                  */
3201                                 ata_eh_thaw_port(ap);
3202                                 break;
3203                         default:
3204                                 goto err;
3205                         }
3206                 }
3207         }
3208
3209         /* PDIAG- should have been released, ask cable type if post-reset */
3210         if ((ehc->i.flags & ATA_EHI_DID_RESET) && ata_is_host_link(link)) {
3211                 if (ap->ops->cable_detect)
3212                         ap->cbl = ap->ops->cable_detect(ap);
3213                 ata_force_cbl(ap);
3214         }
3215
3216         /* Configure new devices forward such that user doesn't see
3217          * device detection messages backwards.
3218          */
3219         ata_for_each_dev(dev, link, ALL) {
3220                 if (!(new_mask & (1 << dev->devno)))
3221                         continue;
3222
3223                 dev->class = ehc->classes[dev->devno];
3224
3225                 if (dev->class == ATA_DEV_PMP)
3226                         continue;
3227
3228                 ehc->i.flags |= ATA_EHI_PRINTINFO;
3229                 rc = ata_dev_configure(dev);
3230                 ehc->i.flags &= ~ATA_EHI_PRINTINFO;
3231                 if (rc) {
3232                         dev->class = ATA_DEV_UNKNOWN;
3233                         goto err;
3234                 }
3235
3236                 spin_lock_irqsave(ap->lock, flags);
3237                 ap->pflags |= ATA_PFLAG_SCSI_HOTPLUG;
3238                 spin_unlock_irqrestore(ap->lock, flags);
3239
3240                 /* new device discovered, configure xfermode */
3241                 ehc->i.flags |= ATA_EHI_SETMODE;
3242         }
3243
3244         return 0;
3245
3246  err:
3247         *r_failed_dev = dev;
3248         DPRINTK("EXIT rc=%d\n", rc);
3249         return rc;
3250 }
3251
3252 /**
3253  *      ata_set_mode - Program timings and issue SET FEATURES - XFER
3254  *      @link: link on which timings will be programmed
3255  *      @r_failed_dev: out parameter for failed device
3256  *
3257  *      Set ATA device disk transfer mode (PIO3, UDMA6, etc.).  If
3258  *      ata_set_mode() fails, pointer to the failing device is
3259  *      returned in @r_failed_dev.
3260  *
3261  *      LOCKING:
3262  *      PCI/etc. bus probe sem.
3263  *
3264  *      RETURNS:
3265  *      0 on success, negative errno otherwise
3266  */
3267 int ata_set_mode(struct ata_link *link, struct ata_device **r_failed_dev)
3268 {
3269         struct ata_port *ap = link->ap;
3270         struct ata_device *dev;
3271         int rc;
3272
3273         /* if data transfer is verified, clear DUBIOUS_XFER on ering top */
3274         ata_for_each_dev(dev, link, ENABLED) {
3275                 if (!(dev->flags & ATA_DFLAG_DUBIOUS_XFER)) {
3276                         struct ata_ering_entry *ent;
3277
3278                         ent = ata_ering_top(&dev->ering);
3279                         if (ent)
3280                                 ent->eflags &= ~ATA_EFLAG_DUBIOUS_XFER;
3281                 }
3282         }
3283
3284         /* has private set_mode? */
3285         if (ap->ops->set_mode)
3286                 rc = ap->ops->set_mode(link, r_failed_dev);
3287         else
3288                 rc = ata_do_set_mode(link, r_failed_dev);
3289
3290         /* if transfer mode has changed, set DUBIOUS_XFER on device */
3291         ata_for_each_dev(dev, link, ENABLED) {
3292                 struct ata_eh_context *ehc = &link->eh_context;
3293                 u8 saved_xfer_mode = ehc->saved_xfer_mode[dev->devno];
3294                 u8 saved_ncq = !!(ehc->saved_ncq_enabled & (1 << dev->devno));
3295
3296                 if (dev->xfer_mode != saved_xfer_mode ||
3297                     ata_ncq_enabled(dev) != saved_ncq)
3298                         dev->flags |= ATA_DFLAG_DUBIOUS_XFER;
3299         }
3300
3301         return rc;
3302 }
3303
3304 /**
3305  *      atapi_eh_clear_ua - Clear ATAPI UNIT ATTENTION after reset
3306  *      @dev: ATAPI device to clear UA for
3307  *
3308  *      Resets and other operations can make an ATAPI device raise
3309  *      UNIT ATTENTION which causes the next operation to fail.  This
3310  *      function clears UA.
3311  *
3312  *      LOCKING:
3313  *      EH context (may sleep).
3314  *
3315  *      RETURNS:
3316  *      0 on success, -errno on failure.
3317  */
3318 static int atapi_eh_clear_ua(struct ata_device *dev)
3319 {
3320         int i;
3321
3322         for (i = 0; i < ATA_EH_UA_TRIES; i++) {
3323                 u8 *sense_buffer = dev->link->ap->sector_buf;
3324                 u8 sense_key = 0;
3325                 unsigned int err_mask;
3326
3327                 err_mask = atapi_eh_tur(dev, &sense_key);
3328                 if (err_mask != 0 && err_mask != AC_ERR_DEV) {
3329                         ata_dev_warn(dev,
3330                                      "TEST_UNIT_READY failed (err_mask=0x%x)\n",
3331                                      err_mask);
3332                         return -EIO;
3333                 }
3334
3335                 if (!err_mask || sense_key != UNIT_ATTENTION)
3336                         return 0;
3337
3338                 err_mask = atapi_eh_request_sense(dev, sense_buffer, sense_key);
3339                 if (err_mask) {
3340                         ata_dev_warn(dev, "failed to clear "
3341                                 "UNIT ATTENTION (err_mask=0x%x)\n", err_mask);
3342                         return -EIO;
3343                 }
3344         }
3345
3346         ata_dev_warn(dev, "UNIT ATTENTION persists after %d tries\n",
3347                      ATA_EH_UA_TRIES);
3348
3349         return 0;
3350 }
3351
3352 /**
3353  *      ata_eh_maybe_retry_flush - Retry FLUSH if necessary
3354  *      @dev: ATA device which may need FLUSH retry
3355  *
3356  *      If @dev failed FLUSH, it needs to be reported upper layer
3357  *      immediately as it means that @dev failed to remap and already
3358  *      lost at least a sector and further FLUSH retrials won't make
3359  *      any difference to the lost sector.  However, if FLUSH failed
3360  *      for other reasons, for example transmission error, FLUSH needs
3361  *      to be retried.
3362  *
3363  *      This function determines whether FLUSH failure retry is
3364  *      necessary and performs it if so.
3365  *
3366  *      RETURNS:
3367  *      0 if EH can continue, -errno if EH needs to be repeated.
3368  */
3369 static int ata_eh_maybe_retry_flush(struct ata_device *dev)
3370 {
3371         struct ata_link *link = dev->link;
3372         struct ata_port *ap = link->ap;
3373         struct ata_queued_cmd *qc;
3374         struct ata_taskfile tf;
3375         unsigned int err_mask;
3376         int rc = 0;
3377
3378         /* did flush fail for this device? */
3379         if (!ata_tag_valid(link->active_tag))
3380                 return 0;
3381
3382         qc = __ata_qc_from_tag(ap, link->active_tag);
3383         if (qc->dev != dev || (qc->tf.command != ATA_CMD_FLUSH_EXT &&
3384                                qc->tf.command != ATA_CMD_FLUSH))
3385                 return 0;
3386
3387         /* if the device failed it, it should be reported to upper layers */
3388         if (qc->err_mask & AC_ERR_DEV)
3389                 return 0;
3390
3391         /* flush failed for some other reason, give it another shot */
3392         ata_tf_init(dev, &tf);
3393
3394         tf.command = qc->tf.command;
3395         tf.flags |= ATA_TFLAG_DEVICE;
3396         tf.protocol = ATA_PROT_NODATA;
3397
3398         ata_dev_warn(dev, "retrying FLUSH 0x%x Emask 0x%x\n",
3399                        tf.command, qc->err_mask);
3400
3401         err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
3402         if (!err_mask) {
3403                 /*
3404                  * FLUSH is complete but there's no way to
3405                  * successfully complete a failed command from EH.
3406                  * Making sure retry is allowed at least once and
3407                  * retrying it should do the trick - whatever was in
3408                  * the cache is already on the platter and this won't
3409                  * cause infinite loop.
3410                  */
3411                 qc->scsicmd->allowed = max(qc->scsicmd->allowed, 1);
3412         } else {
3413                 ata_dev_warn(dev, "FLUSH failed Emask 0x%x\n",
3414                                err_mask);
3415                 rc = -EIO;
3416
3417                 /* if device failed it, report it to upper layers */
3418                 if (err_mask & AC_ERR_DEV) {
3419                         qc->err_mask |= AC_ERR_DEV;
3420                         qc->result_tf = tf;
3421                         if (!(ap->pflags & ATA_PFLAG_FROZEN))
3422                                 rc = 0;
3423                 }
3424         }
3425         return rc;
3426 }
3427
3428 /**
3429  *      ata_eh_set_lpm - configure SATA interface power management
3430  *      @link: link to configure power management
3431  *      @policy: the link power management policy
3432  *      @r_failed_dev: out parameter for failed device
3433  *
3434  *      Enable SATA Interface power management.  This will enable
3435  *      Device Interface Power Management (DIPM) for min_power and
3436  *      medium_power_with_dipm policies, and then call driver specific
3437  *      callbacks for enabling Host Initiated Power management.
3438  *
3439  *      LOCKING:
3440  *      EH context.
3441  *
3442  *      RETURNS:
3443  *      0 on success, -errno on failure.
3444  */
3445 static int ata_eh_set_lpm(struct ata_link *link, enum ata_lpm_policy policy,
3446                           struct ata_device **r_failed_dev)
3447 {
3448         struct ata_port *ap = ata_is_host_link(link) ? link->ap : NULL;
3449         struct ata_eh_context *ehc = &link->eh_context;
3450         struct ata_device *dev, *link_dev = NULL, *lpm_dev = NULL;
3451         enum ata_lpm_policy old_policy = link->lpm_policy;
3452         bool no_dipm = link->ap->flags & ATA_FLAG_NO_DIPM;
3453         unsigned int hints = ATA_LPM_EMPTY | ATA_LPM_HIPM;
3454         unsigned int err_mask;
3455         int rc;
3456
3457         /* if the link or host doesn't do LPM, noop */
3458         if ((link->flags & ATA_LFLAG_NO_LPM) || (ap && !ap->ops->set_lpm))
3459                 return 0;
3460
3461         /*
3462          * DIPM is enabled only for MIN_POWER as some devices
3463          * misbehave when the host NACKs transition to SLUMBER.  Order
3464          * device and link configurations such that the host always
3465          * allows DIPM requests.
3466          */
3467         ata_for_each_dev(dev, link, ENABLED) {
3468                 bool hipm = ata_id_has_hipm(dev->id);
3469                 bool dipm = ata_id_has_dipm(dev->id) && !no_dipm;
3470
3471                 /* find the first enabled and LPM enabled devices */
3472                 if (!link_dev)
3473                         link_dev = dev;
3474
3475                 if (!lpm_dev && (hipm || dipm))
3476                         lpm_dev = dev;
3477
3478                 hints &= ~ATA_LPM_EMPTY;
3479                 if (!hipm)
3480                         hints &= ~ATA_LPM_HIPM;
3481
3482                 /* disable DIPM before changing link config */
3483                 if (policy < ATA_LPM_MED_POWER_WITH_DIPM && dipm) {
3484                         err_mask = ata_dev_set_feature(dev,
3485                                         SETFEATURES_SATA_DISABLE, SATA_DIPM);
3486                         if (err_mask && err_mask != AC_ERR_DEV) {
3487                                 ata_dev_warn(dev,
3488                                              "failed to disable DIPM, Emask 0x%x\n",
3489                                              err_mask);
3490                                 rc = -EIO;
3491                                 goto fail;
3492                         }
3493                 }
3494         }
3495
3496         if (ap) {
3497                 rc = ap->ops->set_lpm(link, policy, hints);
3498                 if (!rc && ap->slave_link)
3499                         rc = ap->ops->set_lpm(ap->slave_link, policy, hints);
3500         } else
3501                 rc = sata_pmp_set_lpm(link, policy, hints);
3502
3503         /*
3504          * Attribute link config failure to the first (LPM) enabled
3505          * device on the link.
3506          */
3507         if (rc) {
3508                 if (rc == -EOPNOTSUPP) {
3509                         link->flags |= ATA_LFLAG_NO_LPM;
3510                         return 0;
3511                 }
3512                 dev = lpm_dev ? lpm_dev : link_dev;
3513                 goto fail;
3514         }
3515
3516         /*
3517          * Low level driver acked the transition.  Issue DIPM command
3518          * with the new policy set.
3519          */
3520         link->lpm_policy = policy;
3521         if (ap && ap->slave_link)
3522                 ap->slave_link->lpm_policy = policy;
3523
3524         /* host config updated, enable DIPM if transitioning to MIN_POWER */
3525         ata_for_each_dev(dev, link, ENABLED) {
3526                 if (policy >= ATA_LPM_MED_POWER_WITH_DIPM && !no_dipm &&
3527                     ata_id_has_dipm(dev->id)) {
3528                         err_mask = ata_dev_set_feature(dev,
3529                                         SETFEATURES_SATA_ENABLE, SATA_DIPM);
3530                         if (err_mask && err_mask != AC_ERR_DEV) {
3531                                 ata_dev_warn(dev,
3532                                         "failed to enable DIPM, Emask 0x%x\n",
3533                                         err_mask);
3534                                 rc = -EIO;
3535                                 goto fail;
3536                         }
3537                 }
3538         }
3539
3540         link->last_lpm_change = jiffies;
3541         link->flags |= ATA_LFLAG_CHANGED;
3542
3543         return 0;
3544
3545 fail:
3546         /* restore the old policy */
3547         link->lpm_policy = old_policy;
3548         if (ap && ap->slave_link)
3549                 ap->slave_link->lpm_policy = old_policy;
3550
3551         /* if no device or only one more chance is left, disable LPM */
3552         if (!dev || ehc->tries[dev->devno] <= 2) {
3553                 ata_link_warn(link, "disabling LPM on the link\n");
3554                 link->flags |= ATA_LFLAG_NO_LPM;
3555         }
3556         if (r_failed_dev)
3557                 *r_failed_dev = dev;
3558         return rc;
3559 }
3560
3561 int ata_link_nr_enabled(struct ata_link *link)
3562 {
3563         struct ata_device *dev;
3564         int cnt = 0;
3565
3566         ata_for_each_dev(dev, link, ENABLED)
3567                 cnt++;
3568         return cnt;
3569 }
3570
3571 static int ata_link_nr_vacant(struct ata_link *link)
3572 {
3573         struct ata_device *dev;
3574         int cnt = 0;
3575
3576         ata_for_each_dev(dev, link, ALL)
3577                 if (dev->class == ATA_DEV_UNKNOWN)
3578                         cnt++;
3579         return cnt;
3580 }
3581
3582 static int ata_eh_skip_recovery(struct ata_link *link)
3583 {
3584         struct ata_port *ap = link->ap;
3585         struct ata_eh_context *ehc = &link->eh_context;
3586         struct ata_device *dev;
3587
3588         /* skip disabled links */
3589         if (link->flags & ATA_LFLAG_DISABLED)
3590                 return 1;
3591
3592         /* skip if explicitly requested */
3593         if (ehc->i.flags & ATA_EHI_NO_RECOVERY)
3594                 return 1;
3595
3596         /* thaw frozen port and recover failed devices */
3597         if ((ap->pflags & ATA_PFLAG_FROZEN) || ata_link_nr_enabled(link))
3598                 return 0;
3599
3600         /* reset at least once if reset is requested */
3601         if ((ehc->i.action & ATA_EH_RESET) &&
3602             !(ehc->i.flags & ATA_EHI_DID_RESET))
3603                 return 0;
3604
3605         /* skip if class codes for all vacant slots are ATA_DEV_NONE */
3606         ata_for_each_dev(dev, link, ALL) {
3607                 if (dev->class == ATA_DEV_UNKNOWN &&
3608                     ehc->classes[dev->devno] != ATA_DEV_NONE)
3609                         return 0;
3610         }
3611
3612         return 1;
3613 }
3614
3615 static int ata_count_probe_trials_cb(struct ata_ering_entry *ent, void *void_arg)
3616 {
3617         u64 interval = msecs_to_jiffies(ATA_EH_PROBE_TRIAL_INTERVAL);
3618         u64 now = get_jiffies_64();
3619         int *trials = void_arg;
3620
3621         if ((ent->eflags & ATA_EFLAG_OLD_ER) ||
3622             (ent->timestamp < now - min(now, interval)))
3623                 return -1;
3624
3625         (*trials)++;
3626         return 0;
3627 }
3628
3629 static int ata_eh_schedule_probe(struct ata_device *dev)
3630 {
3631         struct ata_eh_context *ehc = &dev->link->eh_context;
3632         struct ata_link *link = ata_dev_phys_link(dev);
3633         int trials = 0;
3634
3635         if (!(ehc->i.probe_mask & (1 << dev->devno)) ||
3636             (ehc->did_probe_mask & (1 << dev->devno)))
3637                 return 0;
3638
3639         ata_eh_detach_dev(dev);
3640         ata_dev_init(dev);
3641         ehc->did_probe_mask |= (1 << dev->devno);
3642         ehc->i.action |= ATA_EH_RESET;
3643         ehc->saved_xfer_mode[dev->devno] = 0;
3644         ehc->saved_ncq_enabled &= ~(1 << dev->devno);
3645
3646         /* the link maybe in a deep sleep, wake it up */
3647         if (link->lpm_policy > ATA_LPM_MAX_POWER) {
3648                 if (ata_is_host_link(link))
3649                         link->ap->ops->set_lpm(link, ATA_LPM_MAX_POWER,
3650                                                ATA_LPM_EMPTY);
3651                 else
3652                         sata_pmp_set_lpm(link, ATA_LPM_MAX_POWER,
3653                                          ATA_LPM_EMPTY);
3654         }
3655
3656         /* Record and count probe trials on the ering.  The specific
3657          * error mask used is irrelevant.  Because a successful device
3658          * detection clears the ering, this count accumulates only if
3659          * there are consecutive failed probes.
3660          *
3661          * If the count is equal to or higher than ATA_EH_PROBE_TRIALS
3662          * in the last ATA_EH_PROBE_TRIAL_INTERVAL, link speed is
3663          * forced to 1.5Gbps.
3664          *
3665          * This is to work around cases where failed link speed
3666          * negotiation results in device misdetection leading to
3667          * infinite DEVXCHG or PHRDY CHG events.
3668          */
3669         ata_ering_record(&dev->ering, 0, AC_ERR_OTHER);
3670         ata_ering_map(&dev->ering, ata_count_probe_trials_cb, &trials);
3671
3672         if (trials > ATA_EH_PROBE_TRIALS)
3673                 sata_down_spd_limit(link, 1);
3674
3675         return 1;
3676 }
3677
3678 static int ata_eh_handle_dev_fail(struct ata_device *dev, int err)
3679 {
3680         struct ata_eh_context *ehc = &dev->link->eh_context;
3681
3682         /* -EAGAIN from EH routine indicates retry without prejudice.
3683          * The requester is responsible for ensuring forward progress.
3684          */
3685         if (err != -EAGAIN)
3686                 ehc->tries[dev->devno]--;
3687
3688         switch (err) {
3689         case -ENODEV:
3690                 /* device missing or wrong IDENTIFY data, schedule probing */
3691                 ehc->i.probe_mask |= (1 << dev->devno);
3692                 /* fall through */
3693         case -EINVAL:
3694                 /* give it just one more chance */
3695                 ehc->tries[dev->devno] = min(ehc->tries[dev->devno], 1);
3696                 /* fall through */
3697         case -EIO:
3698                 if (ehc->tries[dev->devno] == 1) {
3699                         /* This is the last chance, better to slow
3700                          * down than lose it.
3701                          */
3702                         sata_down_spd_limit(ata_dev_phys_link(dev), 0);
3703                         if (dev->pio_mode > XFER_PIO_0)
3704                                 ata_down_xfermask_limit(dev, ATA_DNXFER_PIO);
3705                 }
3706         }
3707
3708         if (ata_dev_enabled(dev) && !ehc->tries[dev->devno]) {
3709                 /* disable device if it has used up all its chances */
3710                 ata_dev_disable(dev);
3711
3712                 /* detach if offline */
3713                 if (ata_phys_link_offline(ata_dev_phys_link(dev)))
3714                         ata_eh_detach_dev(dev);
3715
3716                 /* schedule probe if necessary */
3717                 if (ata_eh_schedule_probe(dev)) {
3718                         ehc->tries[dev->devno] = ATA_EH_DEV_TRIES;
3719                         memset(ehc->cmd_timeout_idx[dev->devno], 0,
3720                                sizeof(ehc->cmd_timeout_idx[dev->devno]));
3721                 }
3722
3723                 return 1;
3724         } else {
3725                 ehc->i.action |= ATA_EH_RESET;
3726                 return 0;
3727         }
3728 }
3729
3730 /**
3731  *      ata_eh_recover - recover host port after error
3732  *      @ap: host port to recover
3733  *      @prereset: prereset method (can be NULL)
3734  *      @softreset: softreset method (can be NULL)
3735  *      @hardreset: hardreset method (can be NULL)
3736  *      @postreset: postreset method (can be NULL)
3737  *      @r_failed_link: out parameter for failed link
3738  *
3739  *      This is the alpha and omega, eum and yang, heart and soul of
3740  *      libata exception handling.  On entry, actions required to
3741  *      recover each link and hotplug requests are recorded in the
3742  *      link's eh_context.  This function executes all the operations
3743  *      with appropriate retrials and fallbacks to resurrect failed
3744  *      devices, detach goners and greet newcomers.
3745  *
3746  *      LOCKING:
3747  *      Kernel thread context (may sleep).
3748  *
3749  *      RETURNS:
3750  *      0 on success, -errno on failure.
3751  */
3752 int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
3753                    ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
3754                    ata_postreset_fn_t postreset,
3755                    struct ata_link **r_failed_link)
3756 {
3757         struct ata_link *link;
3758         struct ata_device *dev;
3759         int rc, nr_fails;
3760         unsigned long flags, deadline;
3761
3762         DPRINTK("ENTER\n");
3763
3764         /* prep for recovery */
3765         ata_for_each_link(link, ap, EDGE) {
3766                 struct ata_eh_context *ehc = &link->eh_context;
3767
3768                 /* re-enable link? */
3769                 if (ehc->i.action & ATA_EH_ENABLE_LINK) {
3770                         ata_eh_about_to_do(link, NULL, ATA_EH_ENABLE_LINK);
3771                         spin_lock_irqsave(ap->lock, flags);
3772                         link->flags &= ~ATA_LFLAG_DISABLED;
3773                         spin_unlock_irqrestore(ap->lock, flags);
3774                         ata_eh_done(link, NULL, ATA_EH_ENABLE_LINK);
3775                 }
3776
3777                 ata_for_each_dev(dev, link, ALL) {
3778                         if (link->flags & ATA_LFLAG_NO_RETRY)
3779                                 ehc->tries[dev->devno] = 1;
3780                         else
3781                                 ehc->tries[dev->devno] = ATA_EH_DEV_TRIES;
3782
3783                         /* collect port action mask recorded in dev actions */
3784                         ehc->i.action |= ehc->i.dev_action[dev->devno] &
3785                                          ~ATA_EH_PERDEV_MASK;
3786                         ehc->i.dev_action[dev->devno] &= ATA_EH_PERDEV_MASK;
3787
3788                         /* process hotplug request */
3789                         if (dev->flags & ATA_DFLAG_DETACH)
3790                                 ata_eh_detach_dev(dev);
3791
3792                         /* schedule probe if necessary */
3793                         if (!ata_dev_enabled(dev))
3794                                 ata_eh_schedule_probe(dev);
3795                 }
3796         }
3797
3798  retry:
3799         rc = 0;
3800
3801         /* if UNLOADING, finish immediately */
3802         if (ap->pflags & ATA_PFLAG_UNLOADING)
3803                 goto out;
3804
3805         /* prep for EH */
3806         ata_for_each_link(link, ap, EDGE) {
3807                 struct ata_eh_context *ehc = &link->eh_context;
3808
3809                 /* skip EH if possible. */
3810                 if (ata_eh_skip_recovery(link))
3811                         ehc->i.action = 0;
3812
3813                 ata_for_each_dev(dev, link, ALL)
3814                         ehc->classes[dev->devno] = ATA_DEV_UNKNOWN;
3815         }
3816
3817         /* reset */
3818         ata_for_each_link(link, ap, EDGE) {
3819                 struct ata_eh_context *ehc = &link->eh_context;
3820
3821                 if (!(ehc->i.action & ATA_EH_RESET))
3822                         continue;
3823
3824                 rc = ata_eh_reset(link, ata_link_nr_vacant(link),
3825                                   prereset, softreset, hardreset, postreset);
3826                 if (rc) {
3827                         ata_link_err(link, "reset failed, giving up\n");
3828                         goto out;
3829                 }
3830         }
3831
3832         do {
3833                 unsigned long now;
3834
3835                 /*
3836                  * clears ATA_EH_PARK in eh_info and resets
3837                  * ap->park_req_pending
3838                  */
3839                 ata_eh_pull_park_action(ap);
3840
3841                 deadline = jiffies;
3842                 ata_for_each_link(link, ap, EDGE) {
3843                         ata_for_each_dev(dev, link, ALL) {
3844                                 struct ata_eh_context *ehc = &link->eh_context;
3845                                 unsigned long tmp;
3846
3847                                 if (dev->class != ATA_DEV_ATA &&
3848                                     dev->class != ATA_DEV_ZAC)
3849                                         continue;
3850                                 if (!(ehc->i.dev_action[dev->devno] &
3851                                       ATA_EH_PARK))
3852                                         continue;
3853                                 tmp = dev->unpark_deadline;
3854                                 if (time_before(deadline, tmp))
3855                                         deadline = tmp;
3856                                 else if (time_before_eq(tmp, jiffies))
3857                                         continue;
3858                                 if (ehc->unloaded_mask & (1 << dev->devno))
3859                                         continue;
3860
3861                                 ata_eh_park_issue_cmd(dev, 1);
3862                         }
3863                 }
3864
3865                 now = jiffies;
3866                 if (time_before_eq(deadline, now))
3867                         break;
3868
3869                 ata_eh_release(ap);
3870                 deadline = wait_for_completion_timeout(&ap->park_req_pending,
3871                                                        deadline - now);
3872                 ata_eh_acquire(ap);
3873         } while (deadline);
3874         ata_for_each_link(link, ap, EDGE) {
3875                 ata_for_each_dev(dev, link, ALL) {
3876                         if (!(link->eh_context.unloaded_mask &
3877                               (1 << dev->devno)))
3878                                 continue;
3879
3880                         ata_eh_park_issue_cmd(dev, 0);
3881                         ata_eh_done(link, dev, ATA_EH_PARK);
3882                 }
3883         }
3884
3885         /* the rest */
3886         nr_fails = 0;
3887         ata_for_each_link(link, ap, PMP_FIRST) {
3888                 struct ata_eh_context *ehc = &link->eh_context;
3889
3890                 if (sata_pmp_attached(ap) && ata_is_host_link(link))
3891                         goto config_lpm;
3892
3893                 /* revalidate existing devices and attach new ones */
3894                 rc = ata_eh_revalidate_and_attach(link, &dev);
3895                 if (rc)
3896                         goto rest_fail;
3897
3898                 /* if PMP got attached, return, pmp EH will take care of it */
3899                 if (link->device->class == ATA_DEV_PMP) {
3900                         ehc->i.action = 0;
3901                         return 0;
3902                 }
3903
3904                 /* configure transfer mode if necessary */
3905                 if (ehc->i.flags & ATA_EHI_SETMODE) {
3906                         rc = ata_set_mode(link, &dev);
3907                         if (rc)
3908                                 goto rest_fail;
3909                         ehc->i.flags &= ~ATA_EHI_SETMODE;
3910                 }
3911
3912                 /* If reset has been issued, clear UA to avoid
3913                  * disrupting the current users of the device.
3914                  */
3915                 if (ehc->i.flags & ATA_EHI_DID_RESET) {
3916                         ata_for_each_dev(dev, link, ALL) {
3917                                 if (dev->class != ATA_DEV_ATAPI)
3918                                         continue;
3919                                 rc = atapi_eh_clear_ua(dev);
3920                                 if (rc)
3921                                         goto rest_fail;
3922                                 if (zpodd_dev_enabled(dev))
3923                                         zpodd_post_poweron(dev);
3924                         }
3925                 }
3926
3927                 /* retry flush if necessary */
3928                 ata_for_each_dev(dev, link, ALL) {
3929                         if (dev->class != ATA_DEV_ATA &&
3930                             dev->class != ATA_DEV_ZAC)
3931                                 continue;
3932                         rc = ata_eh_maybe_retry_flush(dev);
3933                         if (rc)
3934                                 goto rest_fail;
3935                 }
3936
3937         config_lpm:
3938                 /* configure link power saving */
3939                 if (link->lpm_policy != ap->target_lpm_policy) {
3940                         rc = ata_eh_set_lpm(link, ap->target_lpm_policy, &dev);
3941                         if (rc)
3942                                 goto rest_fail;
3943                 }
3944
3945                 /* this link is okay now */
3946                 ehc->i.flags = 0;
3947                 continue;
3948
3949         rest_fail:
3950                 nr_fails++;
3951                 if (dev)
3952                         ata_eh_handle_dev_fail(dev, rc);
3953
3954                 if (ap->pflags & ATA_PFLAG_FROZEN) {
3955                         /* PMP reset requires working host port.
3956                          * Can't retry if it's frozen.
3957                          */
3958                         if (sata_pmp_attached(ap))
3959                                 goto out;
3960                         break;
3961                 }
3962         }
3963
3964         if (nr_fails)
3965                 goto retry;
3966
3967  out:
3968         if (rc && r_failed_link)
3969                 *r_failed_link = link;
3970
3971         DPRINTK("EXIT, rc=%d\n", rc);
3972         return rc;
3973 }
3974
3975 /**
3976  *      ata_eh_finish - finish up EH
3977  *      @ap: host port to finish EH for
3978  *
3979  *      Recovery is complete.  Clean up EH states and retry or finish
3980  *      failed qcs.
3981  *
3982  *      LOCKING:
3983  *      None.
3984  */
3985 void ata_eh_finish(struct ata_port *ap)
3986 {
3987         struct ata_queued_cmd *qc;
3988         int tag;
3989
3990         /* retry or finish qcs */
3991         ata_qc_for_each_raw(ap, qc, tag) {
3992                 if (!(qc->flags & ATA_QCFLAG_FAILED))
3993                         continue;
3994
3995                 if (qc->err_mask) {
3996                         /* FIXME: Once EH migration is complete,
3997                          * generate sense data in this function,
3998                          * considering both err_mask and tf.
3999                          */
4000                         if (qc->flags & ATA_QCFLAG_RETRY)
4001                                 ata_eh_qc_retry(qc);
4002                         else
4003                                 ata_eh_qc_complete(qc);
4004                 } else {
4005                         if (qc->flags & ATA_QCFLAG_SENSE_VALID) {
4006                                 ata_eh_qc_complete(qc);
4007                         } else {
4008                                 /* feed zero TF to sense generation */
4009                                 memset(&qc->result_tf, 0, sizeof(qc->result_tf));
4010                                 ata_eh_qc_retry(qc);
4011                         }
4012                 }
4013         }
4014
4015         /* make sure nr_active_links is zero after EH */
4016         WARN_ON(ap->nr_active_links);
4017         ap->nr_active_links = 0;
4018 }
4019
4020 /**
4021  *      ata_do_eh - do standard error handling
4022  *      @ap: host port to handle error for
4023  *
4024  *      @prereset: prereset method (can be NULL)
4025  *      @softreset: softreset method (can be NULL)
4026  *      @hardreset: hardreset method (can be NULL)
4027  *      @postreset: postreset method (can be NULL)
4028  *
4029  *      Perform standard error handling sequence.
4030  *
4031  *      LOCKING:
4032  *      Kernel thread context (may sleep).
4033  */
4034 void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
4035                ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
4036                ata_postreset_fn_t postreset)
4037 {
4038         struct ata_device *dev;
4039         int rc;
4040
4041         ata_eh_autopsy(ap);
4042         ata_eh_report(ap);
4043
4044         rc = ata_eh_recover(ap, prereset, softreset, hardreset, postreset,
4045                             NULL);
4046         if (rc) {
4047                 ata_for_each_dev(dev, &ap->link, ALL)
4048                         ata_dev_disable(dev);
4049         }
4050
4051         ata_eh_finish(ap);
4052 }
4053
4054 /**
4055  *      ata_std_error_handler - standard error handler
4056  *      @ap: host port to handle error for
4057  *
4058  *      Standard error handler
4059  *
4060  *      LOCKING:
4061  *      Kernel thread context (may sleep).
4062  */
4063 void ata_std_error_handler(struct ata_port *ap)
4064 {
4065         struct ata_port_operations *ops = ap->ops;
4066         ata_reset_fn_t hardreset = ops->hardreset;
4067
4068         /* ignore built-in hardreset if SCR access is not available */
4069         if (hardreset == sata_std_hardreset && !sata_scr_valid(&ap->link))
4070                 hardreset = NULL;
4071
4072         ata_do_eh(ap, ops->prereset, ops->softreset, hardreset, ops->postreset);
4073 }
4074
4075 #ifdef CONFIG_PM
4076 /**
4077  *      ata_eh_handle_port_suspend - perform port suspend operation
4078  *      @ap: port to suspend
4079  *
4080  *      Suspend @ap.
4081  *
4082  *      LOCKING:
4083  *      Kernel thread context (may sleep).
4084  */
4085 static void ata_eh_handle_port_suspend(struct ata_port *ap)
4086 {
4087         unsigned long flags;
4088         int rc = 0;
4089         struct ata_device *dev;
4090
4091         /* are we suspending? */
4092         spin_lock_irqsave(ap->lock, flags);
4093         if (!(ap->pflags & ATA_PFLAG_PM_PENDING) ||
4094             ap->pm_mesg.event & PM_EVENT_RESUME) {
4095                 spin_unlock_irqrestore(ap->lock, flags);
4096                 return;
4097         }
4098         spin_unlock_irqrestore(ap->lock, flags);
4099
4100         WARN_ON(ap->pflags & ATA_PFLAG_SUSPENDED);
4101
4102         /*
4103          * If we have a ZPODD attached, check its zero
4104          * power ready status before the port is frozen.
4105          * Only needed for runtime suspend.
4106          */
4107         if (PMSG_IS_AUTO(ap->pm_mesg)) {
4108                 ata_for_each_dev(dev, &ap->link, ENABLED) {
4109                         if (zpodd_dev_enabled(dev))
4110                                 zpodd_on_suspend(dev);
4111                 }
4112         }
4113
4114         /* tell ACPI we're suspending */
4115         rc = ata_acpi_on_suspend(ap);
4116         if (rc)
4117                 goto out;
4118
4119         /* suspend */
4120         ata_eh_freeze_port(ap);
4121
4122         if (ap->ops->port_suspend)
4123                 rc = ap->ops->port_suspend(ap, ap->pm_mesg);
4124
4125         ata_acpi_set_state(ap, ap->pm_mesg);
4126  out:
4127         /* update the flags */
4128         spin_lock_irqsave(ap->lock, flags);
4129
4130         ap->pflags &= ~ATA_PFLAG_PM_PENDING;
4131         if (rc == 0)
4132                 ap->pflags |= ATA_PFLAG_SUSPENDED;
4133         else if (ap->pflags & ATA_PFLAG_FROZEN)
4134                 ata_port_schedule_eh(ap);
4135
4136         spin_unlock_irqrestore(ap->lock, flags);
4137
4138         return;
4139 }
4140
4141 /**
4142  *      ata_eh_handle_port_resume - perform port resume operation
4143  *      @ap: port to resume
4144  *
4145  *      Resume @ap.
4146  *
4147  *      LOCKING:
4148  *      Kernel thread context (may sleep).
4149  */
4150 static void ata_eh_handle_port_resume(struct ata_port *ap)
4151 {
4152         struct ata_link *link;
4153         struct ata_device *dev;
4154         unsigned long flags;
4155
4156         /* are we resuming? */
4157         spin_lock_irqsave(ap->lock, flags);
4158         if (!(ap->pflags & ATA_PFLAG_PM_PENDING) ||
4159             !(ap->pm_mesg.event & PM_EVENT_RESUME)) {
4160                 spin_unlock_irqrestore(ap->lock, flags);
4161                 return;
4162         }
4163         spin_unlock_irqrestore(ap->lock, flags);
4164
4165         WARN_ON(!(ap->pflags & ATA_PFLAG_SUSPENDED));
4166
4167         /*
4168          * Error timestamps are in jiffies which doesn't run while
4169          * suspended and PHY events during resume isn't too uncommon.
4170          * When the two are combined, it can lead to unnecessary speed
4171          * downs if the machine is suspended and resumed repeatedly.
4172          * Clear error history.
4173          */
4174         ata_for_each_link(link, ap, HOST_FIRST)
4175                 ata_for_each_dev(dev, link, ALL)
4176                         ata_ering_clear(&dev->ering);
4177
4178         ata_acpi_set_state(ap, ap->pm_mesg);
4179
4180         if (ap->ops->port_resume)
4181                 ap->ops->port_resume(ap);
4182
4183         /* tell ACPI that we're resuming */
4184         ata_acpi_on_resume(ap);
4185
4186         /* update the flags */
4187         spin_lock_irqsave(ap->lock, flags);
4188         ap->pflags &= ~(ATA_PFLAG_PM_PENDING | ATA_PFLAG_SUSPENDED);
4189         spin_unlock_irqrestore(ap->lock, flags);
4190 }
4191 #endif /* CONFIG_PM */