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