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