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