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