OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [ata/] [libata-eh.c] - Blame information for rev 65

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
2
 *  libata-eh.c - libata error handling
3
 *
4
 *  Maintained by:  Jeff Garzik <jgarzik@pobox.com>
5
 *                  Please ALWAYS copy linux-ide@vger.kernel.org
6
 *                  on emails.
7
 *
8
 *  Copyright 2006 Tejun Heo <htejun@gmail.com>
9
 *
10
 *
11
 *  This program is free software; you can redistribute it and/or
12
 *  modify it under the terms of the GNU General Public License as
13
 *  published by the Free Software Foundation; either version 2, or
14
 *  (at your option) any later version.
15
 *
16
 *  This program is distributed in the hope that it will be useful,
17
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19
 *  General Public License for more details.
20
 *
21
 *  You should have received a copy of the GNU General Public License
22
 *  along with this program; see the file COPYING.  If not, write to
23
 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
24
 *  USA.
25
 *
26
 *
27
 *  libata documentation is available via 'make {ps|pdf}docs',
28
 *  as Documentation/DocBook/libata.*
29
 *
30
 *  Hardware documentation available from http://www.t13.org/ and
31
 *  http://www.sata-io.org/
32
 *
33
 */
34
 
35
#include <linux/kernel.h>
36
#include <linux/pci.h>
37
#include <scsi/scsi.h>
38
#include <scsi/scsi_host.h>
39
#include <scsi/scsi_eh.h>
40
#include <scsi/scsi_device.h>
41
#include <scsi/scsi_cmnd.h>
42
#include "../scsi/scsi_transport_api.h"
43
 
44
#include <linux/libata.h>
45
 
46
#include "libata.h"
47
 
48
enum {
49
        ATA_EH_SPDN_NCQ_OFF             = (1 << 0),
50
        ATA_EH_SPDN_SPEED_DOWN          = (1 << 1),
51
        ATA_EH_SPDN_FALLBACK_TO_PIO     = (1 << 2),
52
};
53
 
54
/* Waiting in ->prereset can never be reliable.  It's sometimes nice
55
 * to wait there but it can't be depended upon; otherwise, we wouldn't
56
 * be resetting.  Just give it enough time for most drives to spin up.
57
 */
58
enum {
59
        ATA_EH_PRERESET_TIMEOUT         = 10 * HZ,
60
        ATA_EH_FASTDRAIN_INTERVAL       = 3 * HZ,
61
};
62
 
63
/* The following table determines how we sequence resets.  Each entry
64
 * represents timeout for that try.  The first try can be soft or
65
 * hardreset.  All others are hardreset if available.  In most cases
66
 * the first reset w/ 10sec timeout should succeed.  Following entries
67
 * are mostly for error handling, hotplug and retarded devices.
68
 */
69
static const unsigned long ata_eh_reset_timeouts[] = {
70
        10 * HZ,        /* most drives spin up by 10sec */
71
        10 * HZ,        /* > 99% working drives spin up before 20sec */
72
        35 * HZ,        /* give > 30 secs of idleness for retarded devices */
73
        5 * HZ,         /* and sweet one last chance */
74
        /* > 1 min has elapsed, give up */
75
};
76
 
77
static void __ata_port_freeze(struct ata_port *ap);
78
#ifdef CONFIG_PM
79
static void ata_eh_handle_port_suspend(struct ata_port *ap);
80
static void ata_eh_handle_port_resume(struct ata_port *ap);
81
#else /* CONFIG_PM */
82
static void ata_eh_handle_port_suspend(struct ata_port *ap)
83
{ }
84
 
85
static void ata_eh_handle_port_resume(struct ata_port *ap)
86
{ }
87
#endif /* CONFIG_PM */
88
 
89
static void __ata_ehi_pushv_desc(struct ata_eh_info *ehi, const char *fmt,
90
                                 va_list args)
91
{
92
        ehi->desc_len += vscnprintf(ehi->desc + ehi->desc_len,
93
                                     ATA_EH_DESC_LEN - ehi->desc_len,
94
                                     fmt, args);
95
}
96
 
97
/**
98
 *      __ata_ehi_push_desc - push error description without adding separator
99
 *      @ehi: target EHI
100
 *      @fmt: printf format string
101
 *
102
 *      Format string according to @fmt and append it to @ehi->desc.
103
 *
104
 *      LOCKING:
105
 *      spin_lock_irqsave(host lock)
106
 */
107
void __ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...)
108
{
109
        va_list args;
110
 
111
        va_start(args, fmt);
112
        __ata_ehi_pushv_desc(ehi, fmt, args);
113
        va_end(args);
114
}
115
 
116
/**
117
 *      ata_ehi_push_desc - push error description with separator
118
 *      @ehi: target EHI
119
 *      @fmt: printf format string
120
 *
121
 *      Format string according to @fmt and append it to @ehi->desc.
122
 *      If @ehi->desc is not empty, ", " is added in-between.
123
 *
124
 *      LOCKING:
125
 *      spin_lock_irqsave(host lock)
126
 */
127
void ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...)
128
{
129
        va_list args;
130
 
131
        if (ehi->desc_len)
132
                __ata_ehi_push_desc(ehi, ", ");
133
 
134
        va_start(args, fmt);
135
        __ata_ehi_pushv_desc(ehi, fmt, args);
136
        va_end(args);
137
}
138
 
139
/**
140
 *      ata_ehi_clear_desc - clean error description
141
 *      @ehi: target EHI
142
 *
143
 *      Clear @ehi->desc.
144
 *
145
 *      LOCKING:
146
 *      spin_lock_irqsave(host lock)
147
 */
148
void ata_ehi_clear_desc(struct ata_eh_info *ehi)
149
{
150
        ehi->desc[0] = '\0';
151
        ehi->desc_len = 0;
152
}
153
 
154
/**
155
 *      ata_port_desc - append port description
156
 *      @ap: target ATA port
157
 *      @fmt: printf format string
158
 *
159
 *      Format string according to @fmt and append it to port
160
 *      description.  If port description is not empty, " " is added
161
 *      in-between.  This function is to be used while initializing
162
 *      ata_host.  The description is printed on host registration.
163
 *
164
 *      LOCKING:
165
 *      None.
166
 */
167
void ata_port_desc(struct ata_port *ap, const char *fmt, ...)
168
{
169
        va_list args;
170
 
171
        WARN_ON(!(ap->pflags & ATA_PFLAG_INITIALIZING));
172
 
173
        if (ap->link.eh_info.desc_len)
174
                __ata_ehi_push_desc(&ap->link.eh_info, " ");
175
 
176
        va_start(args, fmt);
177
        __ata_ehi_pushv_desc(&ap->link.eh_info, fmt, args);
178
        va_end(args);
179
}
180
 
181
#ifdef CONFIG_PCI
182
 
183
/**
184
 *      ata_port_pbar_desc - append PCI BAR description
185
 *      @ap: target ATA port
186
 *      @bar: target PCI BAR
187
 *      @offset: offset into PCI BAR
188
 *      @name: name of the area
189
 *
190
 *      If @offset is negative, this function formats a string which
191
 *      contains the name, address, size and type of the BAR and
192
 *      appends it to the port description.  If @offset is zero or
193
 *      positive, only name and offsetted address is appended.
194
 *
195
 *      LOCKING:
196
 *      None.
197
 */
198
void ata_port_pbar_desc(struct ata_port *ap, int bar, ssize_t offset,
199
                        const char *name)
200
{
201
        struct pci_dev *pdev = to_pci_dev(ap->host->dev);
202
        char *type = "";
203
        unsigned long long start, len;
204
 
205
        if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM)
206
                type = "m";
207
        else if (pci_resource_flags(pdev, bar) & IORESOURCE_IO)
208
                type = "i";
209
 
210
        start = (unsigned long long)pci_resource_start(pdev, bar);
211
        len = (unsigned long long)pci_resource_len(pdev, bar);
212
 
213
        if (offset < 0)
214
                ata_port_desc(ap, "%s %s%llu@0x%llx", name, type, len, start);
215
        else
216
                ata_port_desc(ap, "%s 0x%llx", name, start + offset);
217
}
218
 
219
#endif /* CONFIG_PCI */
220
 
221
static void ata_ering_record(struct ata_ering *ering, int is_io,
222
                             unsigned int err_mask)
223
{
224
        struct ata_ering_entry *ent;
225
 
226
        WARN_ON(!err_mask);
227
 
228
        ering->cursor++;
229
        ering->cursor %= ATA_ERING_SIZE;
230
 
231
        ent = &ering->ring[ering->cursor];
232
        ent->is_io = is_io;
233
        ent->err_mask = err_mask;
234
        ent->timestamp = get_jiffies_64();
235
}
236
 
237
static void ata_ering_clear(struct ata_ering *ering)
238
{
239
        memset(ering, 0, sizeof(*ering));
240
}
241
 
242
static int ata_ering_map(struct ata_ering *ering,
243
                         int (*map_fn)(struct ata_ering_entry *, void *),
244
                         void *arg)
245
{
246
        int idx, rc = 0;
247
        struct ata_ering_entry *ent;
248
 
249
        idx = ering->cursor;
250
        do {
251
                ent = &ering->ring[idx];
252
                if (!ent->err_mask)
253
                        break;
254
                rc = map_fn(ent, arg);
255
                if (rc)
256
                        break;
257
                idx = (idx - 1 + ATA_ERING_SIZE) % ATA_ERING_SIZE;
258
        } while (idx != ering->cursor);
259
 
260
        return rc;
261
}
262
 
263
static unsigned int ata_eh_dev_action(struct ata_device *dev)
264
{
265
        struct ata_eh_context *ehc = &dev->link->eh_context;
266
 
267
        return ehc->i.action | ehc->i.dev_action[dev->devno];
268
}
269
 
270
static void ata_eh_clear_action(struct ata_link *link, struct ata_device *dev,
271
                                struct ata_eh_info *ehi, unsigned int action)
272
{
273
        struct ata_device *tdev;
274
 
275
        if (!dev) {
276
                ehi->action &= ~action;
277
                ata_link_for_each_dev(tdev, link)
278
                        ehi->dev_action[tdev->devno] &= ~action;
279
        } else {
280
                /* doesn't make sense for port-wide EH actions */
281
                WARN_ON(!(action & ATA_EH_PERDEV_MASK));
282
 
283
                /* break ehi->action into ehi->dev_action */
284
                if (ehi->action & action) {
285
                        ata_link_for_each_dev(tdev, link)
286
                                ehi->dev_action[tdev->devno] |=
287
                                        ehi->action & action;
288
                        ehi->action &= ~action;
289
                }
290
 
291
                /* turn off the specified per-dev action */
292
                ehi->dev_action[dev->devno] &= ~action;
293
        }
294
}
295
 
296
/**
297
 *      ata_scsi_timed_out - SCSI layer time out callback
298
 *      @cmd: timed out SCSI command
299
 *
300
 *      Handles SCSI layer timeout.  We race with normal completion of
301
 *      the qc for @cmd.  If the qc is already gone, we lose and let
302
 *      the scsi command finish (EH_HANDLED).  Otherwise, the qc has
303
 *      timed out and EH should be invoked.  Prevent ata_qc_complete()
304
 *      from finishing it by setting EH_SCHEDULED and return
305
 *      EH_NOT_HANDLED.
306
 *
307
 *      TODO: kill this function once old EH is gone.
308
 *
309
 *      LOCKING:
310
 *      Called from timer context
311
 *
312
 *      RETURNS:
313
 *      EH_HANDLED or EH_NOT_HANDLED
314
 */
315
enum scsi_eh_timer_return ata_scsi_timed_out(struct scsi_cmnd *cmd)
316
{
317
        struct Scsi_Host *host = cmd->device->host;
318
        struct ata_port *ap = ata_shost_to_port(host);
319
        unsigned long flags;
320
        struct ata_queued_cmd *qc;
321
        enum scsi_eh_timer_return ret;
322
 
323
        DPRINTK("ENTER\n");
324
 
325
        if (ap->ops->error_handler) {
326
                ret = EH_NOT_HANDLED;
327
                goto out;
328
        }
329
 
330
        ret = EH_HANDLED;
331
        spin_lock_irqsave(ap->lock, flags);
332
        qc = ata_qc_from_tag(ap, ap->link.active_tag);
333
        if (qc) {
334
                WARN_ON(qc->scsicmd != cmd);
335
                qc->flags |= ATA_QCFLAG_EH_SCHEDULED;
336
                qc->err_mask |= AC_ERR_TIMEOUT;
337
                ret = EH_NOT_HANDLED;
338
        }
339
        spin_unlock_irqrestore(ap->lock, flags);
340
 
341
 out:
342
        DPRINTK("EXIT, ret=%d\n", ret);
343
        return ret;
344
}
345
 
346
/**
347
 *      ata_scsi_error - SCSI layer error handler callback
348
 *      @host: SCSI host on which error occurred
349
 *
350
 *      Handles SCSI-layer-thrown error events.
351
 *
352
 *      LOCKING:
353
 *      Inherited from SCSI layer (none, can sleep)
354
 *
355
 *      RETURNS:
356
 *      Zero.
357
 */
358
void ata_scsi_error(struct Scsi_Host *host)
359
{
360
        struct ata_port *ap = ata_shost_to_port(host);
361
        int i;
362
        unsigned long flags;
363
 
364
        DPRINTK("ENTER\n");
365
 
366
        /* synchronize with port task */
367
        ata_port_flush_task(ap);
368
 
369
        /* synchronize with host lock and sort out timeouts */
370
 
371
        /* For new EH, all qcs are finished in one of three ways -
372
         * normal completion, error completion, and SCSI timeout.
373
         * Both cmpletions can race against SCSI timeout.  When normal
374
         * completion wins, the qc never reaches EH.  When error
375
         * completion wins, the qc has ATA_QCFLAG_FAILED set.
376
         *
377
         * When SCSI timeout wins, things are a bit more complex.
378
         * Normal or error completion can occur after the timeout but
379
         * before this point.  In such cases, both types of
380
         * completions are honored.  A scmd is determined to have
381
         * timed out iff its associated qc is active and not failed.
382
         */
383
        if (ap->ops->error_handler) {
384
                struct scsi_cmnd *scmd, *tmp;
385
                int nr_timedout = 0;
386
 
387
                spin_lock_irqsave(ap->lock, flags);
388
 
389
                list_for_each_entry_safe(scmd, tmp, &host->eh_cmd_q, eh_entry) {
390
                        struct ata_queued_cmd *qc;
391
 
392
                        for (i = 0; i < ATA_MAX_QUEUE; i++) {
393
                                qc = __ata_qc_from_tag(ap, i);
394
                                if (qc->flags & ATA_QCFLAG_ACTIVE &&
395
                                    qc->scsicmd == scmd)
396
                                        break;
397
                        }
398
 
399
                        if (i < ATA_MAX_QUEUE) {
400
                                /* the scmd has an associated qc */
401
                                if (!(qc->flags & ATA_QCFLAG_FAILED)) {
402
                                        /* which hasn't failed yet, timeout */
403
                                        qc->err_mask |= AC_ERR_TIMEOUT;
404
                                        qc->flags |= ATA_QCFLAG_FAILED;
405
                                        nr_timedout++;
406
                                }
407
                        } else {
408
                                /* Normal completion occurred after
409
                                 * SCSI timeout but before this point.
410
                                 * Successfully complete it.
411
                                 */
412
                                scmd->retries = scmd->allowed;
413
                                scsi_eh_finish_cmd(scmd, &ap->eh_done_q);
414
                        }
415
                }
416
 
417
                /* If we have timed out qcs.  They belong to EH from
418
                 * this point but the state of the controller is
419
                 * unknown.  Freeze the port to make sure the IRQ
420
                 * handler doesn't diddle with those qcs.  This must
421
                 * be done atomically w.r.t. setting QCFLAG_FAILED.
422
                 */
423
                if (nr_timedout)
424
                        __ata_port_freeze(ap);
425
 
426
                spin_unlock_irqrestore(ap->lock, flags);
427
 
428
                /* initialize eh_tries */
429
                ap->eh_tries = ATA_EH_MAX_TRIES;
430
        } else
431
                spin_unlock_wait(ap->lock);
432
 
433
 repeat:
434
        /* invoke error handler */
435
        if (ap->ops->error_handler) {
436
                struct ata_link *link;
437
 
438
                /* kill fast drain timer */
439
                del_timer_sync(&ap->fastdrain_timer);
440
 
441
                /* process port resume request */
442
                ata_eh_handle_port_resume(ap);
443
 
444
                /* fetch & clear EH info */
445
                spin_lock_irqsave(ap->lock, flags);
446
 
447
                __ata_port_for_each_link(link, ap) {
448
                        memset(&link->eh_context, 0, sizeof(link->eh_context));
449
                        link->eh_context.i = link->eh_info;
450
                        memset(&link->eh_info, 0, sizeof(link->eh_info));
451
                }
452
 
453
                ap->pflags |= ATA_PFLAG_EH_IN_PROGRESS;
454
                ap->pflags &= ~ATA_PFLAG_EH_PENDING;
455
                ap->excl_link = NULL;   /* don't maintain exclusion over EH */
456
 
457
                spin_unlock_irqrestore(ap->lock, flags);
458
 
459
                /* invoke EH, skip if unloading or suspended */
460
                if (!(ap->pflags & (ATA_PFLAG_UNLOADING | ATA_PFLAG_SUSPENDED)))
461
                        ap->ops->error_handler(ap);
462
                else
463
                        ata_eh_finish(ap);
464
 
465
                /* process port suspend request */
466
                ata_eh_handle_port_suspend(ap);
467
 
468
                /* Exception might have happend after ->error_handler
469
                 * recovered the port but before this point.  Repeat
470
                 * EH in such case.
471
                 */
472
                spin_lock_irqsave(ap->lock, flags);
473
 
474
                if (ap->pflags & ATA_PFLAG_EH_PENDING) {
475
                        if (--ap->eh_tries) {
476
                                spin_unlock_irqrestore(ap->lock, flags);
477
                                goto repeat;
478
                        }
479
                        ata_port_printk(ap, KERN_ERR, "EH pending after %d "
480
                                        "tries, giving up\n", ATA_EH_MAX_TRIES);
481
                        ap->pflags &= ~ATA_PFLAG_EH_PENDING;
482
                }
483
 
484
                /* this run is complete, make sure EH info is clear */
485
                __ata_port_for_each_link(link, ap)
486
                        memset(&link->eh_info, 0, sizeof(link->eh_info));
487
 
488
                /* Clear host_eh_scheduled while holding ap->lock such
489
                 * that if exception occurs after this point but
490
                 * before EH completion, SCSI midlayer will
491
                 * re-initiate EH.
492
                 */
493
                host->host_eh_scheduled = 0;
494
 
495
                spin_unlock_irqrestore(ap->lock, flags);
496
        } else {
497
                WARN_ON(ata_qc_from_tag(ap, ap->link.active_tag) == NULL);
498
                ap->ops->eng_timeout(ap);
499
        }
500
 
501
        /* finish or retry handled scmd's and clean up */
502
        WARN_ON(host->host_failed || !list_empty(&host->eh_cmd_q));
503
 
504
        scsi_eh_flush_done_q(&ap->eh_done_q);
505
 
506
        /* clean up */
507
        spin_lock_irqsave(ap->lock, flags);
508
 
509
        if (ap->pflags & ATA_PFLAG_LOADING)
510
                ap->pflags &= ~ATA_PFLAG_LOADING;
511
        else if (ap->pflags & ATA_PFLAG_SCSI_HOTPLUG)
512
                queue_delayed_work(ata_aux_wq, &ap->hotplug_task, 0);
513
 
514
        if (ap->pflags & ATA_PFLAG_RECOVERED)
515
                ata_port_printk(ap, KERN_INFO, "EH complete\n");
516
 
517
        ap->pflags &= ~(ATA_PFLAG_SCSI_HOTPLUG | ATA_PFLAG_RECOVERED);
518
 
519
        /* tell wait_eh that we're done */
520
        ap->pflags &= ~ATA_PFLAG_EH_IN_PROGRESS;
521
        wake_up_all(&ap->eh_wait_q);
522
 
523
        spin_unlock_irqrestore(ap->lock, flags);
524
 
525
        DPRINTK("EXIT\n");
526
}
527
 
528
/**
529
 *      ata_port_wait_eh - Wait for the currently pending EH to complete
530
 *      @ap: Port to wait EH for
531
 *
532
 *      Wait until the currently pending EH is complete.
533
 *
534
 *      LOCKING:
535
 *      Kernel thread context (may sleep).
536
 */
537
void ata_port_wait_eh(struct ata_port *ap)
538
{
539
        unsigned long flags;
540
        DEFINE_WAIT(wait);
541
 
542
 retry:
543
        spin_lock_irqsave(ap->lock, flags);
544
 
545
        while (ap->pflags & (ATA_PFLAG_EH_PENDING | ATA_PFLAG_EH_IN_PROGRESS)) {
546
                prepare_to_wait(&ap->eh_wait_q, &wait, TASK_UNINTERRUPTIBLE);
547
                spin_unlock_irqrestore(ap->lock, flags);
548
                schedule();
549
                spin_lock_irqsave(ap->lock, flags);
550
        }
551
        finish_wait(&ap->eh_wait_q, &wait);
552
 
553
        spin_unlock_irqrestore(ap->lock, flags);
554
 
555
        /* make sure SCSI EH is complete */
556
        if (scsi_host_in_recovery(ap->scsi_host)) {
557
                msleep(10);
558
                goto retry;
559
        }
560
}
561
 
562
static int ata_eh_nr_in_flight(struct ata_port *ap)
563
{
564
        unsigned int tag;
565
        int nr = 0;
566
 
567
        /* count only non-internal commands */
568
        for (tag = 0; tag < ATA_MAX_QUEUE - 1; tag++)
569
                if (ata_qc_from_tag(ap, tag))
570
                        nr++;
571
 
572
        return nr;
573
}
574
 
575
void ata_eh_fastdrain_timerfn(unsigned long arg)
576
{
577
        struct ata_port *ap = (void *)arg;
578
        unsigned long flags;
579
        int cnt;
580
 
581
        spin_lock_irqsave(ap->lock, flags);
582
 
583
        cnt = ata_eh_nr_in_flight(ap);
584
 
585
        /* are we done? */
586
        if (!cnt)
587
                goto out_unlock;
588
 
589
        if (cnt == ap->fastdrain_cnt) {
590
                unsigned int tag;
591
 
592
                /* No progress during the last interval, tag all
593
                 * in-flight qcs as timed out and freeze the port.
594
                 */
595
                for (tag = 0; tag < ATA_MAX_QUEUE - 1; tag++) {
596
                        struct ata_queued_cmd *qc = ata_qc_from_tag(ap, tag);
597
                        if (qc)
598
                                qc->err_mask |= AC_ERR_TIMEOUT;
599
                }
600
 
601
                ata_port_freeze(ap);
602
        } else {
603
                /* some qcs have finished, give it another chance */
604
                ap->fastdrain_cnt = cnt;
605
                ap->fastdrain_timer.expires =
606
                        jiffies + ATA_EH_FASTDRAIN_INTERVAL;
607
                add_timer(&ap->fastdrain_timer);
608
        }
609
 
610
 out_unlock:
611
        spin_unlock_irqrestore(ap->lock, flags);
612
}
613
 
614
/**
615
 *      ata_eh_set_pending - set ATA_PFLAG_EH_PENDING and activate fast drain
616
 *      @ap: target ATA port
617
 *      @fastdrain: activate fast drain
618
 *
619
 *      Set ATA_PFLAG_EH_PENDING and activate fast drain if @fastdrain
620
 *      is non-zero and EH wasn't pending before.  Fast drain ensures
621
 *      that EH kicks in in timely manner.
622
 *
623
 *      LOCKING:
624
 *      spin_lock_irqsave(host lock)
625
 */
626
static void ata_eh_set_pending(struct ata_port *ap, int fastdrain)
627
{
628
        int cnt;
629
 
630
        /* already scheduled? */
631
        if (ap->pflags & ATA_PFLAG_EH_PENDING)
632
                return;
633
 
634
        ap->pflags |= ATA_PFLAG_EH_PENDING;
635
 
636
        if (!fastdrain)
637
                return;
638
 
639
        /* do we have in-flight qcs? */
640
        cnt = ata_eh_nr_in_flight(ap);
641
        if (!cnt)
642
                return;
643
 
644
        /* activate fast drain */
645
        ap->fastdrain_cnt = cnt;
646
        ap->fastdrain_timer.expires = jiffies + ATA_EH_FASTDRAIN_INTERVAL;
647
        add_timer(&ap->fastdrain_timer);
648
}
649
 
650
/**
651
 *      ata_qc_schedule_eh - schedule qc for error handling
652
 *      @qc: command to schedule error handling for
653
 *
654
 *      Schedule error handling for @qc.  EH will kick in as soon as
655
 *      other commands are drained.
656
 *
657
 *      LOCKING:
658
 *      spin_lock_irqsave(host lock)
659
 */
660
void ata_qc_schedule_eh(struct ata_queued_cmd *qc)
661
{
662
        struct ata_port *ap = qc->ap;
663
 
664
        WARN_ON(!ap->ops->error_handler);
665
 
666
        qc->flags |= ATA_QCFLAG_FAILED;
667
        ata_eh_set_pending(ap, 1);
668
 
669
        /* The following will fail if timeout has already expired.
670
         * ata_scsi_error() takes care of such scmds on EH entry.
671
         * Note that ATA_QCFLAG_FAILED is unconditionally set after
672
         * this function completes.
673
         */
674
        scsi_req_abort_cmd(qc->scsicmd);
675
}
676
 
677
/**
678
 *      ata_port_schedule_eh - schedule error handling without a qc
679
 *      @ap: ATA port to schedule EH for
680
 *
681
 *      Schedule error handling for @ap.  EH will kick in as soon as
682
 *      all commands are drained.
683
 *
684
 *      LOCKING:
685
 *      spin_lock_irqsave(host lock)
686
 */
687
void ata_port_schedule_eh(struct ata_port *ap)
688
{
689
        WARN_ON(!ap->ops->error_handler);
690
 
691
        if (ap->pflags & ATA_PFLAG_INITIALIZING)
692
                return;
693
 
694
        ata_eh_set_pending(ap, 1);
695
        scsi_schedule_eh(ap->scsi_host);
696
 
697
        DPRINTK("port EH scheduled\n");
698
}
699
 
700
static int ata_do_link_abort(struct ata_port *ap, struct ata_link *link)
701
{
702
        int tag, nr_aborted = 0;
703
 
704
        WARN_ON(!ap->ops->error_handler);
705
 
706
        /* we're gonna abort all commands, no need for fast drain */
707
        ata_eh_set_pending(ap, 0);
708
 
709
        for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
710
                struct ata_queued_cmd *qc = ata_qc_from_tag(ap, tag);
711
 
712
                if (qc && (!link || qc->dev->link == link)) {
713
                        qc->flags |= ATA_QCFLAG_FAILED;
714
                        ata_qc_complete(qc);
715
                        nr_aborted++;
716
                }
717
        }
718
 
719
        if (!nr_aborted)
720
                ata_port_schedule_eh(ap);
721
 
722
        return nr_aborted;
723
}
724
 
725
/**
726
 *      ata_link_abort - abort all qc's on the link
727
 *      @link: ATA link to abort qc's for
728
 *
729
 *      Abort all active qc's active on @link and schedule EH.
730
 *
731
 *      LOCKING:
732
 *      spin_lock_irqsave(host lock)
733
 *
734
 *      RETURNS:
735
 *      Number of aborted qc's.
736
 */
737
int ata_link_abort(struct ata_link *link)
738
{
739
        return ata_do_link_abort(link->ap, link);
740
}
741
 
742
/**
743
 *      ata_port_abort - abort all qc's on the port
744
 *      @ap: ATA port to abort qc's for
745
 *
746
 *      Abort all active qc's of @ap and schedule EH.
747
 *
748
 *      LOCKING:
749
 *      spin_lock_irqsave(host_set lock)
750
 *
751
 *      RETURNS:
752
 *      Number of aborted qc's.
753
 */
754
int ata_port_abort(struct ata_port *ap)
755
{
756
        return ata_do_link_abort(ap, NULL);
757
}
758
 
759
/**
760
 *      __ata_port_freeze - freeze port
761
 *      @ap: ATA port to freeze
762
 *
763
 *      This function is called when HSM violation or some other
764
 *      condition disrupts normal operation of the port.  Frozen port
765
 *      is not allowed to perform any operation until the port is
766
 *      thawed, which usually follows a successful reset.
767
 *
768
 *      ap->ops->freeze() callback can be used for freezing the port
769
 *      hardware-wise (e.g. mask interrupt and stop DMA engine).  If a
770
 *      port cannot be frozen hardware-wise, the interrupt handler
771
 *      must ack and clear interrupts unconditionally while the port
772
 *      is frozen.
773
 *
774
 *      LOCKING:
775
 *      spin_lock_irqsave(host lock)
776
 */
777
static void __ata_port_freeze(struct ata_port *ap)
778
{
779
        WARN_ON(!ap->ops->error_handler);
780
 
781
        if (ap->ops->freeze)
782
                ap->ops->freeze(ap);
783
 
784
        ap->pflags |= ATA_PFLAG_FROZEN;
785
 
786
        DPRINTK("ata%u port frozen\n", ap->print_id);
787
}
788
 
789
/**
790
 *      ata_port_freeze - abort & freeze port
791
 *      @ap: ATA port to freeze
792
 *
793
 *      Abort and freeze @ap.
794
 *
795
 *      LOCKING:
796
 *      spin_lock_irqsave(host lock)
797
 *
798
 *      RETURNS:
799
 *      Number of aborted commands.
800
 */
801
int ata_port_freeze(struct ata_port *ap)
802
{
803
        int nr_aborted;
804
 
805
        WARN_ON(!ap->ops->error_handler);
806
 
807
        nr_aborted = ata_port_abort(ap);
808
        __ata_port_freeze(ap);
809
 
810
        return nr_aborted;
811
}
812
 
813
/**
814
 *      sata_async_notification - SATA async notification handler
815
 *      @ap: ATA port where async notification is received
816
 *
817
 *      Handler to be called when async notification via SDB FIS is
818
 *      received.  This function schedules EH if necessary.
819
 *
820
 *      LOCKING:
821
 *      spin_lock_irqsave(host lock)
822
 *
823
 *      RETURNS:
824
 *      1 if EH is scheduled, 0 otherwise.
825
 */
826
int sata_async_notification(struct ata_port *ap)
827
{
828
        u32 sntf;
829
        int rc;
830
 
831
        if (!(ap->flags & ATA_FLAG_AN))
832
                return 0;
833
 
834
        rc = sata_scr_read(&ap->link, SCR_NOTIFICATION, &sntf);
835
        if (rc == 0)
836
                sata_scr_write(&ap->link, SCR_NOTIFICATION, sntf);
837
 
838
        if (!ap->nr_pmp_links || rc) {
839
                /* PMP is not attached or SNTF is not available */
840
                if (!ap->nr_pmp_links) {
841
                        /* PMP is not attached.  Check whether ATAPI
842
                         * AN is configured.  If so, notify media
843
                         * change.
844
                         */
845
                        struct ata_device *dev = ap->link.device;
846
 
847
                        if ((dev->class == ATA_DEV_ATAPI) &&
848
                            (dev->flags & ATA_DFLAG_AN))
849
                                ata_scsi_media_change_notify(dev);
850
                        return 0;
851
                } else {
852
                        /* PMP is attached but SNTF is not available.
853
                         * ATAPI async media change notification is
854
                         * not used.  The PMP must be reporting PHY
855
                         * status change, schedule EH.
856
                         */
857
                        ata_port_schedule_eh(ap);
858
                        return 1;
859
                }
860
        } else {
861
                /* PMP is attached and SNTF is available */
862
                struct ata_link *link;
863
 
864
                /* check and notify ATAPI AN */
865
                ata_port_for_each_link(link, ap) {
866
                        if (!(sntf & (1 << link->pmp)))
867
                                continue;
868
 
869
                        if ((link->device->class == ATA_DEV_ATAPI) &&
870
                            (link->device->flags & ATA_DFLAG_AN))
871
                                ata_scsi_media_change_notify(link->device);
872
                }
873
 
874
                /* If PMP is reporting that PHY status of some
875
                 * downstream ports has changed, schedule EH.
876
                 */
877
                if (sntf & (1 << SATA_PMP_CTRL_PORT)) {
878
                        ata_port_schedule_eh(ap);
879
                        return 1;
880
                }
881
 
882
                return 0;
883
        }
884
}
885
 
886
/**
887
 *      ata_eh_freeze_port - EH helper to freeze port
888
 *      @ap: ATA port to freeze
889
 *
890
 *      Freeze @ap.
891
 *
892
 *      LOCKING:
893
 *      None.
894
 */
895
void ata_eh_freeze_port(struct ata_port *ap)
896
{
897
        unsigned long flags;
898
 
899
        if (!ap->ops->error_handler)
900
                return;
901
 
902
        spin_lock_irqsave(ap->lock, flags);
903
        __ata_port_freeze(ap);
904
        spin_unlock_irqrestore(ap->lock, flags);
905
}
906
 
907
/**
908
 *      ata_port_thaw_port - EH helper to thaw port
909
 *      @ap: ATA port to thaw
910
 *
911
 *      Thaw frozen port @ap.
912
 *
913
 *      LOCKING:
914
 *      None.
915
 */
916
void ata_eh_thaw_port(struct ata_port *ap)
917
{
918
        unsigned long flags;
919
 
920
        if (!ap->ops->error_handler)
921
                return;
922
 
923
        spin_lock_irqsave(ap->lock, flags);
924
 
925
        ap->pflags &= ~ATA_PFLAG_FROZEN;
926
 
927
        if (ap->ops->thaw)
928
                ap->ops->thaw(ap);
929
 
930
        spin_unlock_irqrestore(ap->lock, flags);
931
 
932
        DPRINTK("ata%u port thawed\n", ap->print_id);
933
}
934
 
935
static void ata_eh_scsidone(struct scsi_cmnd *scmd)
936
{
937
        /* nada */
938
}
939
 
940
static void __ata_eh_qc_complete(struct ata_queued_cmd *qc)
941
{
942
        struct ata_port *ap = qc->ap;
943
        struct scsi_cmnd *scmd = qc->scsicmd;
944
        unsigned long flags;
945
 
946
        spin_lock_irqsave(ap->lock, flags);
947
        qc->scsidone = ata_eh_scsidone;
948
        __ata_qc_complete(qc);
949
        WARN_ON(ata_tag_valid(qc->tag));
950
        spin_unlock_irqrestore(ap->lock, flags);
951
 
952
        scsi_eh_finish_cmd(scmd, &ap->eh_done_q);
953
}
954
 
955
/**
956
 *      ata_eh_qc_complete - Complete an active ATA command from EH
957
 *      @qc: Command to complete
958
 *
959
 *      Indicate to the mid and upper layers that an ATA command has
960
 *      completed.  To be used from EH.
961
 */
962
void ata_eh_qc_complete(struct ata_queued_cmd *qc)
963
{
964
        struct scsi_cmnd *scmd = qc->scsicmd;
965
        scmd->retries = scmd->allowed;
966
        __ata_eh_qc_complete(qc);
967
}
968
 
969
/**
970
 *      ata_eh_qc_retry - Tell midlayer to retry an ATA command after EH
971
 *      @qc: Command to retry
972
 *
973
 *      Indicate to the mid and upper layers that an ATA command
974
 *      should be retried.  To be used from EH.
975
 *
976
 *      SCSI midlayer limits the number of retries to scmd->allowed.
977
 *      scmd->retries is decremented for commands which get retried
978
 *      due to unrelated failures (qc->err_mask is zero).
979
 */
980
void ata_eh_qc_retry(struct ata_queued_cmd *qc)
981
{
982
        struct scsi_cmnd *scmd = qc->scsicmd;
983
        if (!qc->err_mask && scmd->retries)
984
                scmd->retries--;
985
        __ata_eh_qc_complete(qc);
986
}
987
 
988
/**
989
 *      ata_eh_detach_dev - detach ATA device
990
 *      @dev: ATA device to detach
991
 *
992
 *      Detach @dev.
993
 *
994
 *      LOCKING:
995
 *      None.
996
 */
997
void ata_eh_detach_dev(struct ata_device *dev)
998
{
999
        struct ata_link *link = dev->link;
1000
        struct ata_port *ap = link->ap;
1001
        unsigned long flags;
1002
 
1003
        ata_dev_disable(dev);
1004
 
1005
        spin_lock_irqsave(ap->lock, flags);
1006
 
1007
        dev->flags &= ~ATA_DFLAG_DETACH;
1008
 
1009
        if (ata_scsi_offline_dev(dev)) {
1010
                dev->flags |= ATA_DFLAG_DETACHED;
1011
                ap->pflags |= ATA_PFLAG_SCSI_HOTPLUG;
1012
        }
1013
 
1014
        /* clear per-dev EH actions */
1015
        ata_eh_clear_action(link, dev, &link->eh_info, ATA_EH_PERDEV_MASK);
1016
        ata_eh_clear_action(link, dev, &link->eh_context.i, ATA_EH_PERDEV_MASK);
1017
 
1018
        spin_unlock_irqrestore(ap->lock, flags);
1019
}
1020
 
1021
/**
1022
 *      ata_eh_about_to_do - about to perform eh_action
1023
 *      @link: target ATA link
1024
 *      @dev: target ATA dev for per-dev action (can be NULL)
1025
 *      @action: action about to be performed
1026
 *
1027
 *      Called just before performing EH actions to clear related bits
1028
 *      in @link->eh_info such that eh actions are not unnecessarily
1029
 *      repeated.
1030
 *
1031
 *      LOCKING:
1032
 *      None.
1033
 */
1034
void ata_eh_about_to_do(struct ata_link *link, struct ata_device *dev,
1035
                        unsigned int action)
1036
{
1037
        struct ata_port *ap = link->ap;
1038
        struct ata_eh_info *ehi = &link->eh_info;
1039
        struct ata_eh_context *ehc = &link->eh_context;
1040
        unsigned long flags;
1041
 
1042
        spin_lock_irqsave(ap->lock, flags);
1043
 
1044
        /* Reset is represented by combination of actions and EHI
1045
         * flags.  Suck in all related bits before clearing eh_info to
1046
         * avoid losing requested action.
1047
         */
1048
        if (action & ATA_EH_RESET_MASK) {
1049
                ehc->i.action |= ehi->action & ATA_EH_RESET_MASK;
1050
                ehc->i.flags |= ehi->flags & ATA_EHI_RESET_MODIFIER_MASK;
1051
 
1052
                /* make sure all reset actions are cleared & clear EHI flags */
1053
                action |= ATA_EH_RESET_MASK;
1054
                ehi->flags &= ~ATA_EHI_RESET_MODIFIER_MASK;
1055
        }
1056
 
1057
        ata_eh_clear_action(link, dev, ehi, action);
1058
 
1059
        if (!(ehc->i.flags & ATA_EHI_QUIET))
1060
                ap->pflags |= ATA_PFLAG_RECOVERED;
1061
 
1062
        spin_unlock_irqrestore(ap->lock, flags);
1063
}
1064
 
1065
/**
1066
 *      ata_eh_done - EH action complete
1067
*       @ap: target ATA port
1068
 *      @dev: target ATA dev for per-dev action (can be NULL)
1069
 *      @action: action just completed
1070
 *
1071
 *      Called right after performing EH actions to clear related bits
1072
 *      in @link->eh_context.
1073
 *
1074
 *      LOCKING:
1075
 *      None.
1076
 */
1077
void ata_eh_done(struct ata_link *link, struct ata_device *dev,
1078
                 unsigned int action)
1079
{
1080
        struct ata_eh_context *ehc = &link->eh_context;
1081
 
1082
        /* if reset is complete, clear all reset actions & reset modifier */
1083
        if (action & ATA_EH_RESET_MASK) {
1084
                action |= ATA_EH_RESET_MASK;
1085
                ehc->i.flags &= ~ATA_EHI_RESET_MODIFIER_MASK;
1086
        }
1087
 
1088
        ata_eh_clear_action(link, dev, &ehc->i, action);
1089
}
1090
 
1091
/**
1092
 *      ata_err_string - convert err_mask to descriptive string
1093
 *      @err_mask: error mask to convert to string
1094
 *
1095
 *      Convert @err_mask to descriptive string.  Errors are
1096
 *      prioritized according to severity and only the most severe
1097
 *      error is reported.
1098
 *
1099
 *      LOCKING:
1100
 *      None.
1101
 *
1102
 *      RETURNS:
1103
 *      Descriptive string for @err_mask
1104
 */
1105
static const char *ata_err_string(unsigned int err_mask)
1106
{
1107
        if (err_mask & AC_ERR_HOST_BUS)
1108
                return "host bus error";
1109
        if (err_mask & AC_ERR_ATA_BUS)
1110
                return "ATA bus error";
1111
        if (err_mask & AC_ERR_TIMEOUT)
1112
                return "timeout";
1113
        if (err_mask & AC_ERR_HSM)
1114
                return "HSM violation";
1115
        if (err_mask & AC_ERR_SYSTEM)
1116
                return "internal error";
1117
        if (err_mask & AC_ERR_MEDIA)
1118
                return "media error";
1119
        if (err_mask & AC_ERR_INVALID)
1120
                return "invalid argument";
1121
        if (err_mask & AC_ERR_DEV)
1122
                return "device error";
1123
        return "unknown error";
1124
}
1125
 
1126
/**
1127
 *      ata_read_log_page - read a specific log page
1128
 *      @dev: target device
1129
 *      @page: page to read
1130
 *      @buf: buffer to store read page
1131
 *      @sectors: number of sectors to read
1132
 *
1133
 *      Read log page using READ_LOG_EXT command.
1134
 *
1135
 *      LOCKING:
1136
 *      Kernel thread context (may sleep).
1137
 *
1138
 *      RETURNS:
1139
 *      0 on success, AC_ERR_* mask otherwise.
1140
 */
1141
static unsigned int ata_read_log_page(struct ata_device *dev,
1142
                                      u8 page, void *buf, unsigned int sectors)
1143
{
1144
        struct ata_taskfile tf;
1145
        unsigned int err_mask;
1146
 
1147
        DPRINTK("read log page - page %d\n", page);
1148
 
1149
        ata_tf_init(dev, &tf);
1150
        tf.command = ATA_CMD_READ_LOG_EXT;
1151
        tf.lbal = page;
1152
        tf.nsect = sectors;
1153
        tf.hob_nsect = sectors >> 8;
1154
        tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_LBA48 | ATA_TFLAG_DEVICE;
1155
        tf.protocol = ATA_PROT_PIO;
1156
 
1157
        err_mask = ata_exec_internal(dev, &tf, NULL, DMA_FROM_DEVICE,
1158
                                     buf, sectors * ATA_SECT_SIZE, 0);
1159
 
1160
        DPRINTK("EXIT, err_mask=%x\n", err_mask);
1161
        return err_mask;
1162
}
1163
 
1164
/**
1165
 *      ata_eh_read_log_10h - Read log page 10h for NCQ error details
1166
 *      @dev: Device to read log page 10h from
1167
 *      @tag: Resulting tag of the failed command
1168
 *      @tf: Resulting taskfile registers of the failed command
1169
 *
1170
 *      Read log page 10h to obtain NCQ error details and clear error
1171
 *      condition.
1172
 *
1173
 *      LOCKING:
1174
 *      Kernel thread context (may sleep).
1175
 *
1176
 *      RETURNS:
1177
 *      0 on success, -errno otherwise.
1178
 */
1179
static int ata_eh_read_log_10h(struct ata_device *dev,
1180
                               int *tag, struct ata_taskfile *tf)
1181
{
1182
        u8 *buf = dev->link->ap->sector_buf;
1183
        unsigned int err_mask;
1184
        u8 csum;
1185
        int i;
1186
 
1187
        err_mask = ata_read_log_page(dev, ATA_LOG_SATA_NCQ, buf, 1);
1188
        if (err_mask)
1189
                return -EIO;
1190
 
1191
        csum = 0;
1192
        for (i = 0; i < ATA_SECT_SIZE; i++)
1193
                csum += buf[i];
1194
        if (csum)
1195
                ata_dev_printk(dev, KERN_WARNING,
1196
                               "invalid checksum 0x%x on log page 10h\n", csum);
1197
 
1198
        if (buf[0] & 0x80)
1199
                return -ENOENT;
1200
 
1201
        *tag = buf[0] & 0x1f;
1202
 
1203
        tf->command = buf[2];
1204
        tf->feature = buf[3];
1205
        tf->lbal = buf[4];
1206
        tf->lbam = buf[5];
1207
        tf->lbah = buf[6];
1208
        tf->device = buf[7];
1209
        tf->hob_lbal = buf[8];
1210
        tf->hob_lbam = buf[9];
1211
        tf->hob_lbah = buf[10];
1212
        tf->nsect = buf[12];
1213
        tf->hob_nsect = buf[13];
1214
 
1215
        return 0;
1216
}
1217
 
1218
/**
1219
 *      atapi_eh_request_sense - perform ATAPI REQUEST_SENSE
1220
 *      @dev: device to perform REQUEST_SENSE to
1221
 *      @sense_buf: result sense data buffer (SCSI_SENSE_BUFFERSIZE bytes long)
1222
 *
1223
 *      Perform ATAPI REQUEST_SENSE after the device reported CHECK
1224
 *      SENSE.  This function is EH helper.
1225
 *
1226
 *      LOCKING:
1227
 *      Kernel thread context (may sleep).
1228
 *
1229
 *      RETURNS:
1230
 *      0 on success, AC_ERR_* mask on failure
1231
 */
1232
static unsigned int atapi_eh_request_sense(struct ata_queued_cmd *qc)
1233
{
1234
        struct ata_device *dev = qc->dev;
1235
        unsigned char *sense_buf = qc->scsicmd->sense_buffer;
1236
        struct ata_port *ap = dev->link->ap;
1237
        struct ata_taskfile tf;
1238
        u8 cdb[ATAPI_CDB_LEN];
1239
 
1240
        DPRINTK("ATAPI request sense\n");
1241
 
1242
        /* FIXME: is this needed? */
1243
        memset(sense_buf, 0, SCSI_SENSE_BUFFERSIZE);
1244
 
1245
        /* initialize sense_buf with the error register,
1246
         * for the case where they are -not- overwritten
1247
         */
1248
        sense_buf[0] = 0x70;
1249
        sense_buf[2] = qc->result_tf.feature >> 4;
1250
 
1251
        /* some devices time out if garbage left in tf */
1252
        ata_tf_init(dev, &tf);
1253
 
1254
        memset(cdb, 0, ATAPI_CDB_LEN);
1255
        cdb[0] = REQUEST_SENSE;
1256
        cdb[4] = SCSI_SENSE_BUFFERSIZE;
1257
 
1258
        tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1259
        tf.command = ATA_CMD_PACKET;
1260
 
1261
        /* is it pointless to prefer PIO for "safety reasons"? */
1262
        if (ap->flags & ATA_FLAG_PIO_DMA) {
1263
                tf.protocol = ATA_PROT_ATAPI_DMA;
1264
                tf.feature |= ATAPI_PKT_DMA;
1265
        } else {
1266
                tf.protocol = ATA_PROT_ATAPI;
1267
                tf.lbam = SCSI_SENSE_BUFFERSIZE;
1268
                tf.lbah = 0;
1269
        }
1270
 
1271
        return ata_exec_internal(dev, &tf, cdb, DMA_FROM_DEVICE,
1272
                                 sense_buf, SCSI_SENSE_BUFFERSIZE, 0);
1273
}
1274
 
1275
/**
1276
 *      ata_eh_analyze_serror - analyze SError for a failed port
1277
 *      @link: ATA link to analyze SError for
1278
 *
1279
 *      Analyze SError if available and further determine cause of
1280
 *      failure.
1281
 *
1282
 *      LOCKING:
1283
 *      None.
1284
 */
1285
static void ata_eh_analyze_serror(struct ata_link *link)
1286
{
1287
        struct ata_eh_context *ehc = &link->eh_context;
1288
        u32 serror = ehc->i.serror;
1289
        unsigned int err_mask = 0, action = 0;
1290
        u32 hotplug_mask;
1291
 
1292
        if (serror & SERR_PERSISTENT) {
1293
                err_mask |= AC_ERR_ATA_BUS;
1294
                action |= ATA_EH_HARDRESET;
1295
        }
1296
        if (serror &
1297
            (SERR_DATA_RECOVERED | SERR_COMM_RECOVERED | SERR_DATA)) {
1298
                err_mask |= AC_ERR_ATA_BUS;
1299
                action |= ATA_EH_SOFTRESET;
1300
        }
1301
        if (serror & SERR_PROTOCOL) {
1302
                err_mask |= AC_ERR_HSM;
1303
                action |= ATA_EH_SOFTRESET;
1304
        }
1305
        if (serror & SERR_INTERNAL) {
1306
                err_mask |= AC_ERR_SYSTEM;
1307
                action |= ATA_EH_HARDRESET;
1308
        }
1309
 
1310
        /* Determine whether a hotplug event has occurred.  Both
1311
         * SError.N/X are considered hotplug events for enabled or
1312
         * host links.  For disabled PMP links, only N bit is
1313
         * considered as X bit is left at 1 for link plugging.
1314
         */
1315
        hotplug_mask = 0;
1316
 
1317
        if (!(link->flags & ATA_LFLAG_DISABLED) || ata_is_host_link(link))
1318
                hotplug_mask = SERR_PHYRDY_CHG | SERR_DEV_XCHG;
1319
        else
1320
                hotplug_mask = SERR_PHYRDY_CHG;
1321
 
1322
        if (serror & hotplug_mask)
1323
                ata_ehi_hotplugged(&ehc->i);
1324
 
1325
        ehc->i.err_mask |= err_mask;
1326
        ehc->i.action |= action;
1327
}
1328
 
1329
/**
1330
 *      ata_eh_analyze_ncq_error - analyze NCQ error
1331
 *      @link: ATA link to analyze NCQ error for
1332
 *
1333
 *      Read log page 10h, determine the offending qc and acquire
1334
 *      error status TF.  For NCQ device errors, all LLDDs have to do
1335
 *      is setting AC_ERR_DEV in ehi->err_mask.  This function takes
1336
 *      care of the rest.
1337
 *
1338
 *      LOCKING:
1339
 *      Kernel thread context (may sleep).
1340
 */
1341
static void ata_eh_analyze_ncq_error(struct ata_link *link)
1342
{
1343
        struct ata_port *ap = link->ap;
1344
        struct ata_eh_context *ehc = &link->eh_context;
1345
        struct ata_device *dev = link->device;
1346
        struct ata_queued_cmd *qc;
1347
        struct ata_taskfile tf;
1348
        int tag, rc;
1349
 
1350
        /* if frozen, we can't do much */
1351
        if (ap->pflags & ATA_PFLAG_FROZEN)
1352
                return;
1353
 
1354
        /* is it NCQ device error? */
1355
        if (!link->sactive || !(ehc->i.err_mask & AC_ERR_DEV))
1356
                return;
1357
 
1358
        /* has LLDD analyzed already? */
1359
        for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
1360
                qc = __ata_qc_from_tag(ap, tag);
1361
 
1362
                if (!(qc->flags & ATA_QCFLAG_FAILED))
1363
                        continue;
1364
 
1365
                if (qc->err_mask)
1366
                        return;
1367
        }
1368
 
1369
        /* okay, this error is ours */
1370
        rc = ata_eh_read_log_10h(dev, &tag, &tf);
1371
        if (rc) {
1372
                ata_link_printk(link, KERN_ERR, "failed to read log page 10h "
1373
                                "(errno=%d)\n", rc);
1374
                return;
1375
        }
1376
 
1377
        if (!(link->sactive & (1 << tag))) {
1378
                ata_link_printk(link, KERN_ERR, "log page 10h reported "
1379
                                "inactive tag %d\n", tag);
1380
                return;
1381
        }
1382
 
1383
        /* we've got the perpetrator, condemn it */
1384
        qc = __ata_qc_from_tag(ap, tag);
1385
        memcpy(&qc->result_tf, &tf, sizeof(tf));
1386
        qc->err_mask |= AC_ERR_DEV | AC_ERR_NCQ;
1387
        ehc->i.err_mask &= ~AC_ERR_DEV;
1388
}
1389
 
1390
/**
1391
 *      ata_eh_analyze_tf - analyze taskfile of a failed qc
1392
 *      @qc: qc to analyze
1393
 *      @tf: Taskfile registers to analyze
1394
 *
1395
 *      Analyze taskfile of @qc and further determine cause of
1396
 *      failure.  This function also requests ATAPI sense data if
1397
 *      avaliable.
1398
 *
1399
 *      LOCKING:
1400
 *      Kernel thread context (may sleep).
1401
 *
1402
 *      RETURNS:
1403
 *      Determined recovery action
1404
 */
1405
static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc,
1406
                                      const struct ata_taskfile *tf)
1407
{
1408
        unsigned int tmp, action = 0;
1409
        u8 stat = tf->command, err = tf->feature;
1410
 
1411
        if ((stat & (ATA_BUSY | ATA_DRQ | ATA_DRDY)) != ATA_DRDY) {
1412
                qc->err_mask |= AC_ERR_HSM;
1413
                return ATA_EH_SOFTRESET;
1414
        }
1415
 
1416
        if (stat & (ATA_ERR | ATA_DF))
1417
                qc->err_mask |= AC_ERR_DEV;
1418
        else
1419
                return 0;
1420
 
1421
        switch (qc->dev->class) {
1422
        case ATA_DEV_ATA:
1423
                if (err & ATA_ICRC)
1424
                        qc->err_mask |= AC_ERR_ATA_BUS;
1425
                if (err & ATA_UNC)
1426
                        qc->err_mask |= AC_ERR_MEDIA;
1427
                if (err & ATA_IDNF)
1428
                        qc->err_mask |= AC_ERR_INVALID;
1429
                break;
1430
 
1431
        case ATA_DEV_ATAPI:
1432
                if (!(qc->ap->pflags & ATA_PFLAG_FROZEN)) {
1433
                        tmp = atapi_eh_request_sense(qc);
1434
                        if (!tmp) {
1435
                                /* ATA_QCFLAG_SENSE_VALID is used to
1436
                                 * tell atapi_qc_complete() that sense
1437
                                 * data is already valid.
1438
                                 *
1439
                                 * TODO: interpret sense data and set
1440
                                 * appropriate err_mask.
1441
                                 */
1442
                                qc->flags |= ATA_QCFLAG_SENSE_VALID;
1443
                        } else
1444
                                qc->err_mask |= tmp;
1445
                }
1446
        }
1447
 
1448
        if (qc->err_mask & (AC_ERR_HSM | AC_ERR_TIMEOUT | AC_ERR_ATA_BUS))
1449
                action |= ATA_EH_SOFTRESET;
1450
 
1451
        return action;
1452
}
1453
 
1454
static int ata_eh_categorize_error(int is_io, unsigned int err_mask)
1455
{
1456
        if (err_mask & AC_ERR_ATA_BUS)
1457
                return 1;
1458
 
1459
        if (err_mask & AC_ERR_TIMEOUT)
1460
                return 2;
1461
 
1462
        if (is_io) {
1463
                if (err_mask & AC_ERR_HSM)
1464
                        return 2;
1465
                if ((err_mask &
1466
                     (AC_ERR_DEV|AC_ERR_MEDIA|AC_ERR_INVALID)) == AC_ERR_DEV)
1467
                        return 3;
1468
        }
1469
 
1470
        return 0;
1471
}
1472
 
1473
struct speed_down_verdict_arg {
1474
        u64 since;
1475
        int nr_errors[4];
1476
};
1477
 
1478
static int speed_down_verdict_cb(struct ata_ering_entry *ent, void *void_arg)
1479
{
1480
        struct speed_down_verdict_arg *arg = void_arg;
1481
        int cat = ata_eh_categorize_error(ent->is_io, ent->err_mask);
1482
 
1483
        if (ent->timestamp < arg->since)
1484
                return -1;
1485
 
1486
        arg->nr_errors[cat]++;
1487
        return 0;
1488
}
1489
 
1490
/**
1491
 *      ata_eh_speed_down_verdict - Determine speed down verdict
1492
 *      @dev: Device of interest
1493
 *
1494
 *      This function examines error ring of @dev and determines
1495
 *      whether NCQ needs to be turned off, transfer speed should be
1496
 *      stepped down, or falling back to PIO is necessary.
1497
 *
1498
 *      Cat-1 is ATA_BUS error for any command.
1499
 *
1500
 *      Cat-2 is TIMEOUT for any command or HSM violation for known
1501
 *      supported commands.
1502
 *
1503
 *      Cat-3 is is unclassified DEV error for known supported
1504
 *      command.
1505
 *
1506
 *      NCQ needs to be turned off if there have been more than 3
1507
 *      Cat-2 + Cat-3 errors during last 10 minutes.
1508
 *
1509
 *      Speed down is necessary if there have been more than 3 Cat-1 +
1510
 *      Cat-2 errors or 10 Cat-3 errors during last 10 minutes.
1511
 *
1512
 *      Falling back to PIO mode is necessary if there have been more
1513
 *      than 10 Cat-1 + Cat-2 + Cat-3 errors during last 5 minutes.
1514
 *
1515
 *      LOCKING:
1516
 *      Inherited from caller.
1517
 *
1518
 *      RETURNS:
1519
 *      OR of ATA_EH_SPDN_* flags.
1520
 */
1521
static unsigned int ata_eh_speed_down_verdict(struct ata_device *dev)
1522
{
1523
        const u64 j5mins = 5LLU * 60 * HZ, j10mins = 10LLU * 60 * HZ;
1524
        u64 j64 = get_jiffies_64();
1525
        struct speed_down_verdict_arg arg;
1526
        unsigned int verdict = 0;
1527
 
1528
        /* scan past 10 mins of error history */
1529
        memset(&arg, 0, sizeof(arg));
1530
        arg.since = j64 - min(j64, j10mins);
1531
        ata_ering_map(&dev->ering, speed_down_verdict_cb, &arg);
1532
 
1533
        if (arg.nr_errors[2] + arg.nr_errors[3] > 3)
1534
                verdict |= ATA_EH_SPDN_NCQ_OFF;
1535
        if (arg.nr_errors[1] + arg.nr_errors[2] > 3 || arg.nr_errors[3] > 10)
1536
                verdict |= ATA_EH_SPDN_SPEED_DOWN;
1537
 
1538
        /* scan past 3 mins of error history */
1539
        memset(&arg, 0, sizeof(arg));
1540
        arg.since = j64 - min(j64, j5mins);
1541
        ata_ering_map(&dev->ering, speed_down_verdict_cb, &arg);
1542
 
1543
        if (arg.nr_errors[1] + arg.nr_errors[2] + arg.nr_errors[3] > 10)
1544
                verdict |= ATA_EH_SPDN_FALLBACK_TO_PIO;
1545
 
1546
        return verdict;
1547
}
1548
 
1549
/**
1550
 *      ata_eh_speed_down - record error and speed down if necessary
1551
 *      @dev: Failed device
1552
 *      @is_io: Did the device fail during normal IO?
1553
 *      @err_mask: err_mask of the error
1554
 *
1555
 *      Record error and examine error history to determine whether
1556
 *      adjusting transmission speed is necessary.  It also sets
1557
 *      transmission limits appropriately if such adjustment is
1558
 *      necessary.
1559
 *
1560
 *      LOCKING:
1561
 *      Kernel thread context (may sleep).
1562
 *
1563
 *      RETURNS:
1564
 *      Determined recovery action.
1565
 */
1566
static unsigned int ata_eh_speed_down(struct ata_device *dev, int is_io,
1567
                                      unsigned int err_mask)
1568
{
1569
        unsigned int verdict;
1570
        unsigned int action = 0;
1571
 
1572
        /* don't bother if Cat-0 error */
1573
        if (ata_eh_categorize_error(is_io, err_mask) == 0)
1574
                return 0;
1575
 
1576
        /* record error and determine whether speed down is necessary */
1577
        ata_ering_record(&dev->ering, is_io, err_mask);
1578
        verdict = ata_eh_speed_down_verdict(dev);
1579
 
1580
        /* turn off NCQ? */
1581
        if ((verdict & ATA_EH_SPDN_NCQ_OFF) &&
1582
            (dev->flags & (ATA_DFLAG_PIO | ATA_DFLAG_NCQ |
1583
                           ATA_DFLAG_NCQ_OFF)) == ATA_DFLAG_NCQ) {
1584
                dev->flags |= ATA_DFLAG_NCQ_OFF;
1585
                ata_dev_printk(dev, KERN_WARNING,
1586
                               "NCQ disabled due to excessive errors\n");
1587
                goto done;
1588
        }
1589
 
1590
        /* speed down? */
1591
        if (verdict & ATA_EH_SPDN_SPEED_DOWN) {
1592
                /* speed down SATA link speed if possible */
1593
                if (sata_down_spd_limit(dev->link) == 0) {
1594
                        action |= ATA_EH_HARDRESET;
1595
                        goto done;
1596
                }
1597
 
1598
                /* lower transfer mode */
1599
                if (dev->spdn_cnt < 2) {
1600
                        static const int dma_dnxfer_sel[] =
1601
                                { ATA_DNXFER_DMA, ATA_DNXFER_40C };
1602
                        static const int pio_dnxfer_sel[] =
1603
                                { ATA_DNXFER_PIO, ATA_DNXFER_FORCE_PIO0 };
1604
                        int sel;
1605
 
1606
                        if (dev->xfer_shift != ATA_SHIFT_PIO)
1607
                                sel = dma_dnxfer_sel[dev->spdn_cnt];
1608
                        else
1609
                                sel = pio_dnxfer_sel[dev->spdn_cnt];
1610
 
1611
                        dev->spdn_cnt++;
1612
 
1613
                        if (ata_down_xfermask_limit(dev, sel) == 0) {
1614
                                action |= ATA_EH_SOFTRESET;
1615
                                goto done;
1616
                        }
1617
                }
1618
        }
1619
 
1620
        /* Fall back to PIO?  Slowing down to PIO is meaningless for
1621
         * SATA.  Consider it only for PATA.
1622
         */
1623
        if ((verdict & ATA_EH_SPDN_FALLBACK_TO_PIO) && (dev->spdn_cnt >= 2) &&
1624
            (dev->link->ap->cbl != ATA_CBL_SATA) &&
1625
            (dev->xfer_shift != ATA_SHIFT_PIO)) {
1626
                if (ata_down_xfermask_limit(dev, ATA_DNXFER_FORCE_PIO) == 0) {
1627
                        dev->spdn_cnt = 0;
1628
                        action |= ATA_EH_SOFTRESET;
1629
                        goto done;
1630
                }
1631
        }
1632
 
1633
        return 0;
1634
 done:
1635
        /* device has been slowed down, blow error history */
1636
        ata_ering_clear(&dev->ering);
1637
        return action;
1638
}
1639
 
1640
/**
1641
 *      ata_eh_link_autopsy - analyze error and determine recovery action
1642
 *      @link: host link to perform autopsy on
1643
 *
1644
 *      Analyze why @link failed and determine which recovery actions
1645
 *      are needed.  This function also sets more detailed AC_ERR_*
1646
 *      values and fills sense data for ATAPI CHECK SENSE.
1647
 *
1648
 *      LOCKING:
1649
 *      Kernel thread context (may sleep).
1650
 */
1651
static void ata_eh_link_autopsy(struct ata_link *link)
1652
{
1653
        struct ata_port *ap = link->ap;
1654
        struct ata_eh_context *ehc = &link->eh_context;
1655
        struct ata_device *dev;
1656
        unsigned int all_err_mask = 0;
1657
        int tag, is_io = 0;
1658
        u32 serror;
1659
        int rc;
1660
 
1661
        DPRINTK("ENTER\n");
1662
 
1663
        if (ehc->i.flags & ATA_EHI_NO_AUTOPSY)
1664
                return;
1665
 
1666
        /* obtain and analyze SError */
1667
        rc = sata_scr_read(link, SCR_ERROR, &serror);
1668
        if (rc == 0) {
1669
                ehc->i.serror |= serror;
1670
                ata_eh_analyze_serror(link);
1671
        } else if (rc != -EOPNOTSUPP) {
1672
                /* SError read failed, force hardreset and probing */
1673
                ata_ehi_schedule_probe(&ehc->i);
1674
                ehc->i.action |= ATA_EH_HARDRESET;
1675
                ehc->i.err_mask |= AC_ERR_OTHER;
1676
        }
1677
 
1678
        /* analyze NCQ failure */
1679
        ata_eh_analyze_ncq_error(link);
1680
 
1681
        /* any real error trumps AC_ERR_OTHER */
1682
        if (ehc->i.err_mask & ~AC_ERR_OTHER)
1683
                ehc->i.err_mask &= ~AC_ERR_OTHER;
1684
 
1685
        all_err_mask |= ehc->i.err_mask;
1686
 
1687
        for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
1688
                struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
1689
 
1690
                if (!(qc->flags & ATA_QCFLAG_FAILED) || qc->dev->link != link)
1691
                        continue;
1692
 
1693
                /* inherit upper level err_mask */
1694
                qc->err_mask |= ehc->i.err_mask;
1695
 
1696
                /* analyze TF */
1697
                ehc->i.action |= ata_eh_analyze_tf(qc, &qc->result_tf);
1698
 
1699
                /* DEV errors are probably spurious in case of ATA_BUS error */
1700
                if (qc->err_mask & AC_ERR_ATA_BUS)
1701
                        qc->err_mask &= ~(AC_ERR_DEV | AC_ERR_MEDIA |
1702
                                          AC_ERR_INVALID);
1703
 
1704
                /* any real error trumps unknown error */
1705
                if (qc->err_mask & ~AC_ERR_OTHER)
1706
                        qc->err_mask &= ~AC_ERR_OTHER;
1707
 
1708
                /* SENSE_VALID trumps dev/unknown error and revalidation */
1709
                if (qc->flags & ATA_QCFLAG_SENSE_VALID)
1710
                        qc->err_mask &= ~(AC_ERR_DEV | AC_ERR_OTHER);
1711
 
1712
                /* accumulate error info */
1713
                ehc->i.dev = qc->dev;
1714
                all_err_mask |= qc->err_mask;
1715
                if (qc->flags & ATA_QCFLAG_IO)
1716
                        is_io = 1;
1717
        }
1718
 
1719
        /* enforce default EH actions */
1720
        if (ap->pflags & ATA_PFLAG_FROZEN ||
1721
            all_err_mask & (AC_ERR_HSM | AC_ERR_TIMEOUT))
1722
                ehc->i.action |= ATA_EH_SOFTRESET;
1723
        else if ((is_io && all_err_mask) ||
1724
                 (!is_io && (all_err_mask & ~AC_ERR_DEV)))
1725
                ehc->i.action |= ATA_EH_REVALIDATE;
1726
 
1727
        /* If we have offending qcs and the associated failed device,
1728
         * perform per-dev EH action only on the offending device.
1729
         */
1730
        if (ehc->i.dev) {
1731
                ehc->i.dev_action[ehc->i.dev->devno] |=
1732
                        ehc->i.action & ATA_EH_PERDEV_MASK;
1733
                ehc->i.action &= ~ATA_EH_PERDEV_MASK;
1734
        }
1735
 
1736
        /* propagate timeout to host link */
1737
        if ((all_err_mask & AC_ERR_TIMEOUT) && !ata_is_host_link(link))
1738
                ap->link.eh_context.i.err_mask |= AC_ERR_TIMEOUT;
1739
 
1740
        /* record error and consider speeding down */
1741
        dev = ehc->i.dev;
1742
        if (!dev && ((ata_link_max_devices(link) == 1 &&
1743
                      ata_dev_enabled(link->device))))
1744
            dev = link->device;
1745
 
1746
        if (dev)
1747
                ehc->i.action |= ata_eh_speed_down(dev, is_io, all_err_mask);
1748
 
1749
        DPRINTK("EXIT\n");
1750
}
1751
 
1752
/**
1753
 *      ata_eh_autopsy - analyze error and determine recovery action
1754
 *      @ap: host port to perform autopsy on
1755
 *
1756
 *      Analyze all links of @ap and determine why they failed and
1757
 *      which recovery actions are needed.
1758
 *
1759
 *      LOCKING:
1760
 *      Kernel thread context (may sleep).
1761
 */
1762
void ata_eh_autopsy(struct ata_port *ap)
1763
{
1764
        struct ata_link *link;
1765
 
1766
        ata_port_for_each_link(link, ap)
1767
                ata_eh_link_autopsy(link);
1768
 
1769
        /* Autopsy of fanout ports can affect host link autopsy.
1770
         * Perform host link autopsy last.
1771
         */
1772
        if (ap->nr_pmp_links)
1773
                ata_eh_link_autopsy(&ap->link);
1774
}
1775
 
1776
/**
1777
 *      ata_eh_link_report - report error handling to user
1778
 *      @link: ATA link EH is going on
1779
 *
1780
 *      Report EH to user.
1781
 *
1782
 *      LOCKING:
1783
 *      None.
1784
 */
1785
static void ata_eh_link_report(struct ata_link *link)
1786
{
1787
        struct ata_port *ap = link->ap;
1788
        struct ata_eh_context *ehc = &link->eh_context;
1789
        const char *frozen, *desc;
1790
        char tries_buf[6];
1791
        int tag, nr_failed = 0;
1792
 
1793
        if (ehc->i.flags & ATA_EHI_QUIET)
1794
                return;
1795
 
1796
        desc = NULL;
1797
        if (ehc->i.desc[0] != '\0')
1798
                desc = ehc->i.desc;
1799
 
1800
        for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
1801
                struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
1802
 
1803
                if (!(qc->flags & ATA_QCFLAG_FAILED) || qc->dev->link != link ||
1804
                    ((qc->flags & ATA_QCFLAG_QUIET) &&
1805
                     qc->err_mask == AC_ERR_DEV))
1806
                        continue;
1807
                if (qc->flags & ATA_QCFLAG_SENSE_VALID && !qc->err_mask)
1808
                        continue;
1809
 
1810
                nr_failed++;
1811
        }
1812
 
1813
        if (!nr_failed && !ehc->i.err_mask)
1814
                return;
1815
 
1816
        frozen = "";
1817
        if (ap->pflags & ATA_PFLAG_FROZEN)
1818
                frozen = " frozen";
1819
 
1820
        memset(tries_buf, 0, sizeof(tries_buf));
1821
        if (ap->eh_tries < ATA_EH_MAX_TRIES)
1822
                snprintf(tries_buf, sizeof(tries_buf) - 1, " t%d",
1823
                         ap->eh_tries);
1824
 
1825
        if (ehc->i.dev) {
1826
                ata_dev_printk(ehc->i.dev, KERN_ERR, "exception Emask 0x%x "
1827
                               "SAct 0x%x SErr 0x%x action 0x%x%s%s\n",
1828
                               ehc->i.err_mask, link->sactive, ehc->i.serror,
1829
                               ehc->i.action, frozen, tries_buf);
1830
                if (desc)
1831
                        ata_dev_printk(ehc->i.dev, KERN_ERR, "%s\n", desc);
1832
        } else {
1833
                ata_link_printk(link, KERN_ERR, "exception Emask 0x%x "
1834
                                "SAct 0x%x SErr 0x%x action 0x%x%s%s\n",
1835
                                ehc->i.err_mask, link->sactive, ehc->i.serror,
1836
                                ehc->i.action, frozen, tries_buf);
1837
                if (desc)
1838
                        ata_link_printk(link, KERN_ERR, "%s\n", desc);
1839
        }
1840
 
1841
        if (ehc->i.serror)
1842
                ata_port_printk(ap, KERN_ERR,
1843
                  "SError: { %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s}\n",
1844
                  ehc->i.serror & SERR_DATA_RECOVERED ? "RecovData " : "",
1845
                  ehc->i.serror & SERR_COMM_RECOVERED ? "RecovComm " : "",
1846
                  ehc->i.serror & SERR_DATA ? "UnrecovData " : "",
1847
                  ehc->i.serror & SERR_PERSISTENT ? "Persist " : "",
1848
                  ehc->i.serror & SERR_PROTOCOL ? "Proto " : "",
1849
                  ehc->i.serror & SERR_INTERNAL ? "HostInt " : "",
1850
                  ehc->i.serror & SERR_PHYRDY_CHG ? "PHYRdyChg " : "",
1851
                  ehc->i.serror & SERR_PHY_INT_ERR ? "PHYInt " : "",
1852
                  ehc->i.serror & SERR_COMM_WAKE ? "CommWake " : "",
1853
                  ehc->i.serror & SERR_10B_8B_ERR ? "10B8B " : "",
1854
                  ehc->i.serror & SERR_DISPARITY ? "Dispar " : "",
1855
                  ehc->i.serror & SERR_CRC ? "BadCRC " : "",
1856
                  ehc->i.serror & SERR_HANDSHAKE ? "Handshk " : "",
1857
                  ehc->i.serror & SERR_LINK_SEQ_ERR ? "LinkSeq " : "",
1858
                  ehc->i.serror & SERR_TRANS_ST_ERROR ? "TrStaTrns " : "",
1859
                  ehc->i.serror & SERR_UNRECOG_FIS ? "UnrecFIS " : "",
1860
                  ehc->i.serror & SERR_DEV_XCHG ? "DevExch " : "");
1861
 
1862
        for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
1863
                struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
1864
                struct ata_taskfile *cmd = &qc->tf, *res = &qc->result_tf;
1865
                const u8 *cdb = qc->cdb;
1866
                char data_buf[20] = "";
1867
                char cdb_buf[70] = "";
1868
 
1869
                if (!(qc->flags & ATA_QCFLAG_FAILED) ||
1870
                    qc->dev->link != link || !qc->err_mask)
1871
                        continue;
1872
 
1873
                if (qc->dma_dir != DMA_NONE) {
1874
                        static const char *dma_str[] = {
1875
                                [DMA_BIDIRECTIONAL]     = "bidi",
1876
                                [DMA_TO_DEVICE]         = "out",
1877
                                [DMA_FROM_DEVICE]       = "in",
1878
                        };
1879
                        static const char *prot_str[] = {
1880
                                [ATA_PROT_PIO]          = "pio",
1881
                                [ATA_PROT_DMA]          = "dma",
1882
                                [ATA_PROT_NCQ]          = "ncq",
1883
                                [ATA_PROT_ATAPI]        = "pio",
1884
                                [ATA_PROT_ATAPI_DMA]    = "dma",
1885
                        };
1886
 
1887
                        snprintf(data_buf, sizeof(data_buf), " %s %u %s",
1888
                                 prot_str[qc->tf.protocol], qc->nbytes,
1889
                                 dma_str[qc->dma_dir]);
1890
                }
1891
 
1892
                if (is_atapi_taskfile(&qc->tf))
1893
                        snprintf(cdb_buf, sizeof(cdb_buf),
1894
                                 "cdb %02x %02x %02x %02x %02x %02x %02x %02x  "
1895
                                 "%02x %02x %02x %02x %02x %02x %02x %02x\n         ",
1896
                                 cdb[0], cdb[1], cdb[2], cdb[3],
1897
                                 cdb[4], cdb[5], cdb[6], cdb[7],
1898
                                 cdb[8], cdb[9], cdb[10], cdb[11],
1899
                                 cdb[12], cdb[13], cdb[14], cdb[15]);
1900
 
1901
                ata_dev_printk(qc->dev, KERN_ERR,
1902
                        "cmd %02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x "
1903
                        "tag %d%s\n         %s"
1904
                        "res %02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x "
1905
                        "Emask 0x%x (%s)%s\n",
1906
                        cmd->command, cmd->feature, cmd->nsect,
1907
                        cmd->lbal, cmd->lbam, cmd->lbah,
1908
                        cmd->hob_feature, cmd->hob_nsect,
1909
                        cmd->hob_lbal, cmd->hob_lbam, cmd->hob_lbah,
1910
                        cmd->device, qc->tag, data_buf, cdb_buf,
1911
                        res->command, res->feature, res->nsect,
1912
                        res->lbal, res->lbam, res->lbah,
1913
                        res->hob_feature, res->hob_nsect,
1914
                        res->hob_lbal, res->hob_lbam, res->hob_lbah,
1915
                        res->device, qc->err_mask, ata_err_string(qc->err_mask),
1916
                        qc->err_mask & AC_ERR_NCQ ? " <F>" : "");
1917
 
1918
                if (res->command & (ATA_BUSY | ATA_DRDY | ATA_DF | ATA_DRQ |
1919
                                    ATA_ERR)) {
1920
                        if (res->command & ATA_BUSY)
1921
                                ata_dev_printk(qc->dev, KERN_ERR,
1922
                                  "status: { Busy }\n");
1923
                        else
1924
                                ata_dev_printk(qc->dev, KERN_ERR,
1925
                                  "status: { %s%s%s%s}\n",
1926
                                  res->command & ATA_DRDY ? "DRDY " : "",
1927
                                  res->command & ATA_DF ? "DF " : "",
1928
                                  res->command & ATA_DRQ ? "DRQ " : "",
1929
                                  res->command & ATA_ERR ? "ERR " : "");
1930
                }
1931
 
1932
                if (cmd->command != ATA_CMD_PACKET &&
1933
                    (res->feature & (ATA_ICRC | ATA_UNC | ATA_IDNF |
1934
                                     ATA_ABORTED)))
1935
                        ata_dev_printk(qc->dev, KERN_ERR,
1936
                          "error: { %s%s%s%s}\n",
1937
                          res->feature & ATA_ICRC ? "ICRC " : "",
1938
                          res->feature & ATA_UNC ? "UNC " : "",
1939
                          res->feature & ATA_IDNF ? "IDNF " : "",
1940
                          res->feature & ATA_ABORTED ? "ABRT " : "");
1941
        }
1942
}
1943
 
1944
/**
1945
 *      ata_eh_report - report error handling to user
1946
 *      @ap: ATA port to report EH about
1947
 *
1948
 *      Report EH to user.
1949
 *
1950
 *      LOCKING:
1951
 *      None.
1952
 */
1953
void ata_eh_report(struct ata_port *ap)
1954
{
1955
        struct ata_link *link;
1956
 
1957
        __ata_port_for_each_link(link, ap)
1958
                ata_eh_link_report(link);
1959
}
1960
 
1961
static int ata_do_reset(struct ata_link *link, ata_reset_fn_t reset,
1962
                        unsigned int *classes, unsigned long deadline)
1963
{
1964
        struct ata_device *dev;
1965
        int rc;
1966
 
1967
        ata_link_for_each_dev(dev, link)
1968
                classes[dev->devno] = ATA_DEV_UNKNOWN;
1969
 
1970
        rc = reset(link, classes, deadline);
1971
        if (rc)
1972
                return rc;
1973
 
1974
        /* If any class isn't ATA_DEV_UNKNOWN, consider classification
1975
         * is complete and convert all ATA_DEV_UNKNOWN to
1976
         * ATA_DEV_NONE.
1977
         */
1978
        ata_link_for_each_dev(dev, link)
1979
                if (classes[dev->devno] != ATA_DEV_UNKNOWN)
1980
                        break;
1981
 
1982
        if (dev) {
1983
                ata_link_for_each_dev(dev, link) {
1984
                        if (classes[dev->devno] == ATA_DEV_UNKNOWN)
1985
                                classes[dev->devno] = ATA_DEV_NONE;
1986
                }
1987
        }
1988
 
1989
        return 0;
1990
}
1991
 
1992
static int ata_eh_followup_srst_needed(struct ata_link *link,
1993
                                       int rc, int classify,
1994
                                       const unsigned int *classes)
1995
{
1996
        if (link->flags & ATA_LFLAG_NO_SRST)
1997
                return 0;
1998
        if (rc == -EAGAIN)
1999
                return 1;
2000
        if (rc != 0)
2001
                return 0;
2002
        if ((link->ap->flags & ATA_FLAG_PMP) && ata_is_host_link(link))
2003
                return 1;
2004
        if (classify && !(link->flags & ATA_LFLAG_ASSUME_CLASS) &&
2005
            classes[0] == ATA_DEV_UNKNOWN)
2006
                return 1;
2007
        return 0;
2008
}
2009
 
2010
int ata_eh_reset(struct ata_link *link, int classify,
2011
                 ata_prereset_fn_t prereset, ata_reset_fn_t softreset,
2012
                 ata_reset_fn_t hardreset, ata_postreset_fn_t postreset)
2013
{
2014
        const int max_tries = ARRAY_SIZE(ata_eh_reset_timeouts);
2015
        struct ata_port *ap = link->ap;
2016
        struct ata_eh_context *ehc = &link->eh_context;
2017
        unsigned int *classes = ehc->classes;
2018
        unsigned int lflags = link->flags;
2019
        int verbose = !(ehc->i.flags & ATA_EHI_QUIET);
2020
        int try = 0;
2021
        struct ata_device *dev;
2022
        unsigned long deadline, now;
2023
        unsigned int tmp_action;
2024
        ata_reset_fn_t reset;
2025
        unsigned long flags;
2026
        u32 sstatus;
2027
        int rc;
2028
 
2029
        /* about to reset */
2030
        spin_lock_irqsave(ap->lock, flags);
2031
        ap->pflags |= ATA_PFLAG_RESETTING;
2032
        spin_unlock_irqrestore(ap->lock, flags);
2033
 
2034
        ata_eh_about_to_do(link, NULL, ehc->i.action & ATA_EH_RESET_MASK);
2035
 
2036
        ata_link_for_each_dev(dev, link) {
2037
                /* If we issue an SRST then an ATA drive (not ATAPI)
2038
                 * may change configuration and be in PIO0 timing. If
2039
                 * we do a hard reset (or are coming from power on)
2040
                 * this is true for ATA or ATAPI. Until we've set a
2041
                 * suitable controller mode we should not touch the
2042
                 * bus as we may be talking too fast.
2043
                 */
2044
                dev->pio_mode = XFER_PIO_0;
2045
 
2046
                /* If the controller has a pio mode setup function
2047
                 * then use it to set the chipset to rights. Don't
2048
                 * touch the DMA setup as that will be dealt with when
2049
                 * configuring devices.
2050
                 */
2051
                if (ap->ops->set_piomode)
2052
                        ap->ops->set_piomode(ap, dev);
2053
        }
2054
 
2055
        /* Determine which reset to use and record in ehc->i.action.
2056
         * prereset() may examine and modify it.
2057
         */
2058
        if (softreset && (!hardreset || (!(lflags & ATA_LFLAG_NO_SRST) &&
2059
                                         !sata_set_spd_needed(link) &&
2060
                                         !(ehc->i.action & ATA_EH_HARDRESET))))
2061
                tmp_action = ATA_EH_SOFTRESET;
2062
        else
2063
                tmp_action = ATA_EH_HARDRESET;
2064
 
2065
        ehc->i.action = (ehc->i.action & ~ATA_EH_RESET_MASK) | tmp_action;
2066
 
2067
        if (prereset) {
2068
                rc = prereset(link, jiffies + ATA_EH_PRERESET_TIMEOUT);
2069
                if (rc) {
2070
                        if (rc == -ENOENT) {
2071
                                ata_link_printk(link, KERN_DEBUG,
2072
                                                "port disabled. ignoring.\n");
2073
                                ehc->i.action &= ~ATA_EH_RESET_MASK;
2074
 
2075
                                ata_link_for_each_dev(dev, link)
2076
                                        classes[dev->devno] = ATA_DEV_NONE;
2077
 
2078
                                rc = 0;
2079
                        } else
2080
                                ata_link_printk(link, KERN_ERR,
2081
                                        "prereset failed (errno=%d)\n", rc);
2082
                        goto out;
2083
                }
2084
        }
2085
 
2086
        /* prereset() might have modified ehc->i.action */
2087
        if (ehc->i.action & ATA_EH_HARDRESET)
2088
                reset = hardreset;
2089
        else if (ehc->i.action & ATA_EH_SOFTRESET)
2090
                reset = softreset;
2091
        else {
2092
                /* prereset told us not to reset, bang classes and return */
2093
                ata_link_for_each_dev(dev, link)
2094
                        classes[dev->devno] = ATA_DEV_NONE;
2095
                rc = 0;
2096
                goto out;
2097
        }
2098
 
2099
        /* did prereset() screw up?  if so, fix up to avoid oopsing */
2100
        if (!reset) {
2101
                if (softreset)
2102
                        reset = softreset;
2103
                else
2104
                        reset = hardreset;
2105
        }
2106
 
2107
 retry:
2108
        deadline = jiffies + ata_eh_reset_timeouts[try++];
2109
 
2110
        /* shut up during boot probing */
2111
        if (verbose)
2112
                ata_link_printk(link, KERN_INFO, "%s resetting link\n",
2113
                                reset == softreset ? "soft" : "hard");
2114
 
2115
        /* mark that this EH session started with reset */
2116
        if (reset == hardreset)
2117
                ehc->i.flags |= ATA_EHI_DID_HARDRESET;
2118
        else
2119
                ehc->i.flags |= ATA_EHI_DID_SOFTRESET;
2120
 
2121
        rc = ata_do_reset(link, reset, classes, deadline);
2122
 
2123
        if (reset == hardreset &&
2124
            ata_eh_followup_srst_needed(link, rc, classify, classes)) {
2125
                /* okay, let's do follow-up softreset */
2126
                reset = softreset;
2127
 
2128
                if (!reset) {
2129
                        ata_link_printk(link, KERN_ERR,
2130
                                        "follow-up softreset required "
2131
                                        "but no softreset avaliable\n");
2132
                        rc = -EINVAL;
2133
                        goto fail;
2134
                }
2135
 
2136
                ata_eh_about_to_do(link, NULL, ATA_EH_RESET_MASK);
2137
                rc = ata_do_reset(link, reset, classes, deadline);
2138
        }
2139
 
2140
        /* -EAGAIN can happen if we skipped followup SRST */
2141
        if (rc && rc != -EAGAIN)
2142
                goto fail;
2143
 
2144
        /* was classification successful? */
2145
        if (classify && classes[0] == ATA_DEV_UNKNOWN &&
2146
            !(lflags & ATA_LFLAG_ASSUME_CLASS)) {
2147
                if (try < max_tries) {
2148
                        ata_link_printk(link, KERN_WARNING,
2149
                                        "classification failed\n");
2150
                        rc = -EINVAL;
2151
                        goto fail;
2152
                }
2153
 
2154
                ata_link_printk(link, KERN_WARNING,
2155
                                "classfication failed, assuming ATA\n");
2156
                lflags |= ATA_LFLAG_ASSUME_ATA;
2157
        }
2158
 
2159
        ata_link_for_each_dev(dev, link) {
2160
                /* After the reset, the device state is PIO 0 and the
2161
                 * controller state is undefined.  Reset also wakes up
2162
                 * drives from sleeping mode.
2163
                 */
2164
                dev->pio_mode = XFER_PIO_0;
2165
                dev->flags &= ~ATA_DFLAG_SLEEPING;
2166
 
2167
                if (ata_link_offline(link))
2168
                        continue;
2169
 
2170
                /* apply class override */
2171
                if (lflags & ATA_LFLAG_ASSUME_ATA)
2172
                        classes[dev->devno] = ATA_DEV_ATA;
2173
                else if (lflags & ATA_LFLAG_ASSUME_SEMB)
2174
                        classes[dev->devno] = ATA_DEV_SEMB_UNSUP; /* not yet */
2175
        }
2176
 
2177
        /* record current link speed */
2178
        if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0)
2179
                link->sata_spd = (sstatus >> 4) & 0xf;
2180
 
2181
        if (postreset)
2182
                postreset(link, classes);
2183
 
2184
        /* reset successful, schedule revalidation */
2185
        ata_eh_done(link, NULL, ehc->i.action & ATA_EH_RESET_MASK);
2186
        ehc->i.action |= ATA_EH_REVALIDATE;
2187
 
2188
        rc = 0;
2189
 out:
2190
        /* clear hotplug flag */
2191
        ehc->i.flags &= ~ATA_EHI_HOTPLUGGED;
2192
 
2193
        spin_lock_irqsave(ap->lock, flags);
2194
        ap->pflags &= ~ATA_PFLAG_RESETTING;
2195
        spin_unlock_irqrestore(ap->lock, flags);
2196
 
2197
        return rc;
2198
 
2199
 fail:
2200
        if (rc == -ERESTART || try >= max_tries)
2201
                goto out;
2202
 
2203
        now = jiffies;
2204
        if (time_before(now, deadline)) {
2205
                unsigned long delta = deadline - now;
2206
 
2207
                ata_link_printk(link, KERN_WARNING, "reset failed "
2208
                                "(errno=%d), retrying in %u secs\n",
2209
                                rc, (jiffies_to_msecs(delta) + 999) / 1000);
2210
 
2211
                while (delta)
2212
                        delta = schedule_timeout_uninterruptible(delta);
2213
        }
2214
 
2215
        if (rc == -EPIPE || try == max_tries - 1)
2216
                sata_down_spd_limit(link);
2217
        if (hardreset)
2218
                reset = hardreset;
2219
        goto retry;
2220
}
2221
 
2222
static int ata_eh_revalidate_and_attach(struct ata_link *link,
2223
                                        struct ata_device **r_failed_dev)
2224
{
2225
        struct ata_port *ap = link->ap;
2226
        struct ata_eh_context *ehc = &link->eh_context;
2227
        struct ata_device *dev;
2228
        unsigned int new_mask = 0;
2229
        unsigned long flags;
2230
        int rc = 0;
2231
 
2232
        DPRINTK("ENTER\n");
2233
 
2234
        /* For PATA drive side cable detection to work, IDENTIFY must
2235
         * be done backwards such that PDIAG- is released by the slave
2236
         * device before the master device is identified.
2237
         */
2238
        ata_link_for_each_dev_reverse(dev, link) {
2239
                unsigned int action = ata_eh_dev_action(dev);
2240
                unsigned int readid_flags = 0;
2241
 
2242
                if (ehc->i.flags & ATA_EHI_DID_RESET)
2243
                        readid_flags |= ATA_READID_POSTRESET;
2244
 
2245
                if ((action & ATA_EH_REVALIDATE) && ata_dev_enabled(dev)) {
2246
                        WARN_ON(dev->class == ATA_DEV_PMP);
2247
 
2248
                        if (ata_link_offline(link)) {
2249
                                rc = -EIO;
2250
                                goto err;
2251
                        }
2252
 
2253
                        ata_eh_about_to_do(link, dev, ATA_EH_REVALIDATE);
2254
                        rc = ata_dev_revalidate(dev, ehc->classes[dev->devno],
2255
                                                readid_flags);
2256
                        if (rc)
2257
                                goto err;
2258
 
2259
                        ata_eh_done(link, dev, ATA_EH_REVALIDATE);
2260
 
2261
                        /* Configuration may have changed, reconfigure
2262
                         * transfer mode.
2263
                         */
2264
                        ehc->i.flags |= ATA_EHI_SETMODE;
2265
 
2266
                        /* schedule the scsi_rescan_device() here */
2267
                        queue_work(ata_aux_wq, &(ap->scsi_rescan_task));
2268
                } else if (dev->class == ATA_DEV_UNKNOWN &&
2269
                           ehc->tries[dev->devno] &&
2270
                           ata_class_enabled(ehc->classes[dev->devno])) {
2271
                        dev->class = ehc->classes[dev->devno];
2272
 
2273
                        if (dev->class == ATA_DEV_PMP)
2274
                                rc = sata_pmp_attach(dev);
2275
                        else
2276
                                rc = ata_dev_read_id(dev, &dev->class,
2277
                                                     readid_flags, dev->id);
2278
                        switch (rc) {
2279
                        case 0:
2280
                                new_mask |= 1 << dev->devno;
2281
                                break;
2282
                        case -ENOENT:
2283
                                /* IDENTIFY was issued to non-existent
2284
                                 * device.  No need to reset.  Just
2285
                                 * thaw and kill the device.
2286
                                 */
2287
                                ata_eh_thaw_port(ap);
2288
                                dev->class = ATA_DEV_UNKNOWN;
2289
                                break;
2290
                        default:
2291
                                dev->class = ATA_DEV_UNKNOWN;
2292
                                goto err;
2293
                        }
2294
                }
2295
        }
2296
 
2297
        /* PDIAG- should have been released, ask cable type if post-reset */
2298
        if (ata_is_host_link(link) && ap->ops->cable_detect &&
2299
            (ehc->i.flags & ATA_EHI_DID_RESET))
2300
                ap->cbl = ap->ops->cable_detect(ap);
2301
 
2302
        /* Configure new devices forward such that user doesn't see
2303
         * device detection messages backwards.
2304
         */
2305
        ata_link_for_each_dev(dev, link) {
2306
                if (!(new_mask & (1 << dev->devno)) ||
2307
                    dev->class == ATA_DEV_PMP)
2308
                        continue;
2309
 
2310
                ehc->i.flags |= ATA_EHI_PRINTINFO;
2311
                rc = ata_dev_configure(dev);
2312
                ehc->i.flags &= ~ATA_EHI_PRINTINFO;
2313
                if (rc)
2314
                        goto err;
2315
 
2316
                spin_lock_irqsave(ap->lock, flags);
2317
                ap->pflags |= ATA_PFLAG_SCSI_HOTPLUG;
2318
                spin_unlock_irqrestore(ap->lock, flags);
2319
 
2320
                /* new device discovered, configure xfermode */
2321
                ehc->i.flags |= ATA_EHI_SETMODE;
2322
        }
2323
 
2324
        return 0;
2325
 
2326
 err:
2327
        *r_failed_dev = dev;
2328
        DPRINTK("EXIT rc=%d\n", rc);
2329
        return rc;
2330
}
2331
 
2332
static int ata_link_nr_enabled(struct ata_link *link)
2333
{
2334
        struct ata_device *dev;
2335
        int cnt = 0;
2336
 
2337
        ata_link_for_each_dev(dev, link)
2338
                if (ata_dev_enabled(dev))
2339
                        cnt++;
2340
        return cnt;
2341
}
2342
 
2343
static int ata_link_nr_vacant(struct ata_link *link)
2344
{
2345
        struct ata_device *dev;
2346
        int cnt = 0;
2347
 
2348
        ata_link_for_each_dev(dev, link)
2349
                if (dev->class == ATA_DEV_UNKNOWN)
2350
                        cnt++;
2351
        return cnt;
2352
}
2353
 
2354
static int ata_eh_skip_recovery(struct ata_link *link)
2355
{
2356
        struct ata_eh_context *ehc = &link->eh_context;
2357
        struct ata_device *dev;
2358
 
2359
        /* skip disabled links */
2360
        if (link->flags & ATA_LFLAG_DISABLED)
2361
                return 1;
2362
 
2363
        /* thaw frozen port, resume link and recover failed devices */
2364
        if ((link->ap->pflags & ATA_PFLAG_FROZEN) ||
2365
            (ehc->i.flags & ATA_EHI_RESUME_LINK) || ata_link_nr_enabled(link))
2366
                return 0;
2367
 
2368
        /* skip if class codes for all vacant slots are ATA_DEV_NONE */
2369
        ata_link_for_each_dev(dev, link) {
2370
                if (dev->class == ATA_DEV_UNKNOWN &&
2371
                    ehc->classes[dev->devno] != ATA_DEV_NONE)
2372
                        return 0;
2373
        }
2374
 
2375
        return 1;
2376
}
2377
 
2378
static int ata_eh_handle_dev_fail(struct ata_device *dev, int err)
2379
{
2380
        struct ata_eh_context *ehc = &dev->link->eh_context;
2381
 
2382
        ehc->tries[dev->devno]--;
2383
 
2384
        switch (err) {
2385
        case -ENODEV:
2386
                /* device missing or wrong IDENTIFY data, schedule probing */
2387
                ehc->i.probe_mask |= (1 << dev->devno);
2388
        case -EINVAL:
2389
                /* give it just one more chance */
2390
                ehc->tries[dev->devno] = min(ehc->tries[dev->devno], 1);
2391
        case -EIO:
2392
                if (ehc->tries[dev->devno] == 1 && dev->pio_mode > XFER_PIO_0) {
2393
                        /* This is the last chance, better to slow
2394
                         * down than lose it.
2395
                         */
2396
                        sata_down_spd_limit(dev->link);
2397
                        ata_down_xfermask_limit(dev, ATA_DNXFER_PIO);
2398
                }
2399
        }
2400
 
2401
        if (ata_dev_enabled(dev) && !ehc->tries[dev->devno]) {
2402
                /* disable device if it has used up all its chances */
2403
                ata_dev_disable(dev);
2404
 
2405
                /* detach if offline */
2406
                if (ata_link_offline(dev->link))
2407
                        ata_eh_detach_dev(dev);
2408
 
2409
                /* probe if requested */
2410
                if ((ehc->i.probe_mask & (1 << dev->devno)) &&
2411
                    !(ehc->did_probe_mask & (1 << dev->devno))) {
2412
                        ata_eh_detach_dev(dev);
2413
                        ata_dev_init(dev);
2414
 
2415
                        ehc->tries[dev->devno] = ATA_EH_DEV_TRIES;
2416
                        ehc->did_probe_mask |= (1 << dev->devno);
2417
                        ehc->i.action |= ATA_EH_SOFTRESET;
2418
                }
2419
 
2420
                return 1;
2421
        } else {
2422
                /* soft didn't work?  be haaaaard */
2423
                if (ehc->i.flags & ATA_EHI_DID_RESET)
2424
                        ehc->i.action |= ATA_EH_HARDRESET;
2425
                else
2426
                        ehc->i.action |= ATA_EH_SOFTRESET;
2427
 
2428
                return 0;
2429
        }
2430
}
2431
 
2432
/**
2433
 *      ata_eh_recover - recover host port after error
2434
 *      @ap: host port to recover
2435
 *      @prereset: prereset method (can be NULL)
2436
 *      @softreset: softreset method (can be NULL)
2437
 *      @hardreset: hardreset method (can be NULL)
2438
 *      @postreset: postreset method (can be NULL)
2439
 *      @r_failed_link: out parameter for failed link
2440
 *
2441
 *      This is the alpha and omega, eum and yang, heart and soul of
2442
 *      libata exception handling.  On entry, actions required to
2443
 *      recover each link and hotplug requests are recorded in the
2444
 *      link's eh_context.  This function executes all the operations
2445
 *      with appropriate retrials and fallbacks to resurrect failed
2446
 *      devices, detach goners and greet newcomers.
2447
 *
2448
 *      LOCKING:
2449
 *      Kernel thread context (may sleep).
2450
 *
2451
 *      RETURNS:
2452
 *      0 on success, -errno on failure.
2453
 */
2454
int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
2455
                   ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
2456
                   ata_postreset_fn_t postreset,
2457
                   struct ata_link **r_failed_link)
2458
{
2459
        struct ata_link *link;
2460
        struct ata_device *dev;
2461
        int nr_failed_devs, nr_disabled_devs;
2462
        int reset, rc;
2463
        unsigned long flags;
2464
 
2465
        DPRINTK("ENTER\n");
2466
 
2467
        /* prep for recovery */
2468
        ata_port_for_each_link(link, ap) {
2469
                struct ata_eh_context *ehc = &link->eh_context;
2470
 
2471
                /* re-enable link? */
2472
                if (ehc->i.action & ATA_EH_ENABLE_LINK) {
2473
                        ata_eh_about_to_do(link, NULL, ATA_EH_ENABLE_LINK);
2474
                        spin_lock_irqsave(ap->lock, flags);
2475
                        link->flags &= ~ATA_LFLAG_DISABLED;
2476
                        spin_unlock_irqrestore(ap->lock, flags);
2477
                        ata_eh_done(link, NULL, ATA_EH_ENABLE_LINK);
2478
                }
2479
 
2480
                ata_link_for_each_dev(dev, link) {
2481
                        if (link->flags & ATA_LFLAG_NO_RETRY)
2482
                                ehc->tries[dev->devno] = 1;
2483
                        else
2484
                                ehc->tries[dev->devno] = ATA_EH_DEV_TRIES;
2485
 
2486
                        /* collect port action mask recorded in dev actions */
2487
                        ehc->i.action |= ehc->i.dev_action[dev->devno] &
2488
                                         ~ATA_EH_PERDEV_MASK;
2489
                        ehc->i.dev_action[dev->devno] &= ATA_EH_PERDEV_MASK;
2490
 
2491
                        /* process hotplug request */
2492
                        if (dev->flags & ATA_DFLAG_DETACH)
2493
                                ata_eh_detach_dev(dev);
2494
 
2495
                        if (!ata_dev_enabled(dev) &&
2496
                            ((ehc->i.probe_mask & (1 << dev->devno)) &&
2497
                             !(ehc->did_probe_mask & (1 << dev->devno)))) {
2498
                                ata_eh_detach_dev(dev);
2499
                                ata_dev_init(dev);
2500
                                ehc->did_probe_mask |= (1 << dev->devno);
2501
                                ehc->i.action |= ATA_EH_SOFTRESET;
2502
                        }
2503
                }
2504
        }
2505
 
2506
 retry:
2507
        rc = 0;
2508
        nr_failed_devs = 0;
2509
        nr_disabled_devs = 0;
2510
        reset = 0;
2511
 
2512
        /* if UNLOADING, finish immediately */
2513
        if (ap->pflags & ATA_PFLAG_UNLOADING)
2514
                goto out;
2515
 
2516
        /* prep for EH */
2517
        ata_port_for_each_link(link, ap) {
2518
                struct ata_eh_context *ehc = &link->eh_context;
2519
 
2520
                /* skip EH if possible. */
2521
                if (ata_eh_skip_recovery(link))
2522
                        ehc->i.action = 0;
2523
 
2524
                /* do we need to reset? */
2525
                if (ehc->i.action & ATA_EH_RESET_MASK)
2526
                        reset = 1;
2527
 
2528
                ata_link_for_each_dev(dev, link)
2529
                        ehc->classes[dev->devno] = ATA_DEV_UNKNOWN;
2530
        }
2531
 
2532
        /* reset */
2533
        if (reset) {
2534
                /* if PMP is attached, this function only deals with
2535
                 * downstream links, port should stay thawed.
2536
                 */
2537
                if (!ap->nr_pmp_links)
2538
                        ata_eh_freeze_port(ap);
2539
 
2540
                ata_port_for_each_link(link, ap) {
2541
                        struct ata_eh_context *ehc = &link->eh_context;
2542
 
2543
                        if (!(ehc->i.action & ATA_EH_RESET_MASK))
2544
                                continue;
2545
 
2546
                        rc = ata_eh_reset(link, ata_link_nr_vacant(link),
2547
                                          prereset, softreset, hardreset,
2548
                                          postreset);
2549
                        if (rc) {
2550
                                ata_link_printk(link, KERN_ERR,
2551
                                                "reset failed, giving up\n");
2552
                                goto out;
2553
                        }
2554
                }
2555
 
2556
                if (!ap->nr_pmp_links)
2557
                        ata_eh_thaw_port(ap);
2558
        }
2559
 
2560
        /* the rest */
2561
        ata_port_for_each_link(link, ap) {
2562
                struct ata_eh_context *ehc = &link->eh_context;
2563
 
2564
                /* revalidate existing devices and attach new ones */
2565
                rc = ata_eh_revalidate_and_attach(link, &dev);
2566
                if (rc)
2567
                        goto dev_fail;
2568
 
2569
                /* if PMP got attached, return, pmp EH will take care of it */
2570
                if (link->device->class == ATA_DEV_PMP) {
2571
                        ehc->i.action = 0;
2572
                        return 0;
2573
                }
2574
 
2575
                /* configure transfer mode if necessary */
2576
                if (ehc->i.flags & ATA_EHI_SETMODE) {
2577
                        rc = ata_set_mode(link, &dev);
2578
                        if (rc)
2579
                                goto dev_fail;
2580
                        ehc->i.flags &= ~ATA_EHI_SETMODE;
2581
                }
2582
 
2583
                if (ehc->i.action & ATA_EHI_LPM)
2584
                        ata_link_for_each_dev(dev, link)
2585
                                ata_dev_enable_pm(dev, ap->pm_policy);
2586
 
2587
                /* this link is okay now */
2588
                ehc->i.flags = 0;
2589
                continue;
2590
 
2591
dev_fail:
2592
                nr_failed_devs++;
2593
                if (ata_eh_handle_dev_fail(dev, rc))
2594
                        nr_disabled_devs++;
2595
 
2596
                if (ap->pflags & ATA_PFLAG_FROZEN) {
2597
                        /* PMP reset requires working host port.
2598
                         * Can't retry if it's frozen.
2599
                         */
2600
                        if (ap->nr_pmp_links)
2601
                                goto out;
2602
                        break;
2603
                }
2604
        }
2605
 
2606
        if (nr_failed_devs) {
2607
                if (nr_failed_devs != nr_disabled_devs) {
2608
                        ata_port_printk(ap, KERN_WARNING, "failed to recover "
2609
                                        "some devices, retrying in 5 secs\n");
2610
                        ssleep(5);
2611
                } else {
2612
                        /* no device left to recover, repeat fast */
2613
                        msleep(500);
2614
                }
2615
 
2616
                goto retry;
2617
        }
2618
 
2619
 out:
2620
        if (rc && r_failed_link)
2621
                *r_failed_link = link;
2622
 
2623
        DPRINTK("EXIT, rc=%d\n", rc);
2624
        return rc;
2625
}
2626
 
2627
/**
2628
 *      ata_eh_finish - finish up EH
2629
 *      @ap: host port to finish EH for
2630
 *
2631
 *      Recovery is complete.  Clean up EH states and retry or finish
2632
 *      failed qcs.
2633
 *
2634
 *      LOCKING:
2635
 *      None.
2636
 */
2637
void ata_eh_finish(struct ata_port *ap)
2638
{
2639
        int tag;
2640
 
2641
        /* retry or finish qcs */
2642
        for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
2643
                struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
2644
 
2645
                if (!(qc->flags & ATA_QCFLAG_FAILED))
2646
                        continue;
2647
 
2648
                if (qc->err_mask) {
2649
                        /* FIXME: Once EH migration is complete,
2650
                         * generate sense data in this function,
2651
                         * considering both err_mask and tf.
2652
                         *
2653
                         * There's no point in retrying invalid
2654
                         * (detected by libata) and non-IO device
2655
                         * errors (rejected by device).  Finish them
2656
                         * immediately.
2657
                         */
2658
                        if ((qc->err_mask & AC_ERR_INVALID) ||
2659
                            (!(qc->flags & ATA_QCFLAG_IO) &&
2660
                             qc->err_mask == AC_ERR_DEV))
2661
                                ata_eh_qc_complete(qc);
2662
                        else
2663
                                ata_eh_qc_retry(qc);
2664
                } else {
2665
                        if (qc->flags & ATA_QCFLAG_SENSE_VALID) {
2666
                                ata_eh_qc_complete(qc);
2667
                        } else {
2668
                                /* feed zero TF to sense generation */
2669
                                memset(&qc->result_tf, 0, sizeof(qc->result_tf));
2670
                                ata_eh_qc_retry(qc);
2671
                        }
2672
                }
2673
        }
2674
 
2675
        /* make sure nr_active_links is zero after EH */
2676
        WARN_ON(ap->nr_active_links);
2677
        ap->nr_active_links = 0;
2678
}
2679
 
2680
/**
2681
 *      ata_do_eh - do standard error handling
2682
 *      @ap: host port to handle error for
2683
 *      @prereset: prereset method (can be NULL)
2684
 *      @softreset: softreset method (can be NULL)
2685
 *      @hardreset: hardreset method (can be NULL)
2686
 *      @postreset: postreset method (can be NULL)
2687
 *
2688
 *      Perform standard error handling sequence.
2689
 *
2690
 *      LOCKING:
2691
 *      Kernel thread context (may sleep).
2692
 */
2693
void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
2694
               ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
2695
               ata_postreset_fn_t postreset)
2696
{
2697
        struct ata_device *dev;
2698
        int rc;
2699
 
2700
        ata_eh_autopsy(ap);
2701
        ata_eh_report(ap);
2702
 
2703
        rc = ata_eh_recover(ap, prereset, softreset, hardreset, postreset,
2704
                            NULL);
2705
        if (rc) {
2706
                ata_link_for_each_dev(dev, &ap->link)
2707
                        ata_dev_disable(dev);
2708
        }
2709
 
2710
        ata_eh_finish(ap);
2711
}
2712
 
2713
#ifdef CONFIG_PM
2714
/**
2715
 *      ata_eh_handle_port_suspend - perform port suspend operation
2716
 *      @ap: port to suspend
2717
 *
2718
 *      Suspend @ap.
2719
 *
2720
 *      LOCKING:
2721
 *      Kernel thread context (may sleep).
2722
 */
2723
static void ata_eh_handle_port_suspend(struct ata_port *ap)
2724
{
2725
        unsigned long flags;
2726
        int rc = 0;
2727
 
2728
        /* are we suspending? */
2729
        spin_lock_irqsave(ap->lock, flags);
2730
        if (!(ap->pflags & ATA_PFLAG_PM_PENDING) ||
2731
            ap->pm_mesg.event == PM_EVENT_ON) {
2732
                spin_unlock_irqrestore(ap->lock, flags);
2733
                return;
2734
        }
2735
        spin_unlock_irqrestore(ap->lock, flags);
2736
 
2737
        WARN_ON(ap->pflags & ATA_PFLAG_SUSPENDED);
2738
 
2739
        /* tell ACPI we're suspending */
2740
        rc = ata_acpi_on_suspend(ap);
2741
        if (rc)
2742
                goto out;
2743
 
2744
        /* suspend */
2745
        ata_eh_freeze_port(ap);
2746
 
2747
        if (ap->ops->port_suspend)
2748
                rc = ap->ops->port_suspend(ap, ap->pm_mesg);
2749
 
2750
 out:
2751
        /* report result */
2752
        spin_lock_irqsave(ap->lock, flags);
2753
 
2754
        ap->pflags &= ~ATA_PFLAG_PM_PENDING;
2755
        if (rc == 0)
2756
                ap->pflags |= ATA_PFLAG_SUSPENDED;
2757
        else if (ap->pflags & ATA_PFLAG_FROZEN)
2758
                ata_port_schedule_eh(ap);
2759
 
2760
        if (ap->pm_result) {
2761
                *ap->pm_result = rc;
2762
                ap->pm_result = NULL;
2763
        }
2764
 
2765
        spin_unlock_irqrestore(ap->lock, flags);
2766
 
2767
        return;
2768
}
2769
 
2770
/**
2771
 *      ata_eh_handle_port_resume - perform port resume operation
2772
 *      @ap: port to resume
2773
 *
2774
 *      Resume @ap.
2775
 *
2776
 *      LOCKING:
2777
 *      Kernel thread context (may sleep).
2778
 */
2779
static void ata_eh_handle_port_resume(struct ata_port *ap)
2780
{
2781
        unsigned long flags;
2782
        int rc = 0;
2783
 
2784
        /* are we resuming? */
2785
        spin_lock_irqsave(ap->lock, flags);
2786
        if (!(ap->pflags & ATA_PFLAG_PM_PENDING) ||
2787
            ap->pm_mesg.event != PM_EVENT_ON) {
2788
                spin_unlock_irqrestore(ap->lock, flags);
2789
                return;
2790
        }
2791
        spin_unlock_irqrestore(ap->lock, flags);
2792
 
2793
        WARN_ON(!(ap->pflags & ATA_PFLAG_SUSPENDED));
2794
 
2795
        if (ap->ops->port_resume)
2796
                rc = ap->ops->port_resume(ap);
2797
 
2798
        /* tell ACPI that we're resuming */
2799
        ata_acpi_on_resume(ap);
2800
 
2801
        /* report result */
2802
        spin_lock_irqsave(ap->lock, flags);
2803
        ap->pflags &= ~(ATA_PFLAG_PM_PENDING | ATA_PFLAG_SUSPENDED);
2804
        if (ap->pm_result) {
2805
                *ap->pm_result = rc;
2806
                ap->pm_result = NULL;
2807
        }
2808
        spin_unlock_irqrestore(ap->lock, flags);
2809
}
2810
#endif /* CONFIG_PM */

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.