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