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