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