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