cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

libata-eh.c (107507B)


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