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