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