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