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