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