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