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