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