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