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