CC: [email protected]
CC: [email protected]
TO: Hannes Reinecke <[email protected]>
CC: Bartlomiej Zolnierkiewicz <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git 
ata-trace.v2
head:   de3be8e2d9ae807f63f1d8b13a399b8a2fcf7556
commit: c9abdeba1d2767eb71b50287effbcf2fde7c4d0d [9/55] libata: add reset 
tracepoints
:::::: branch date: 24 hours ago
:::::: commit date: 25 hours ago
config: x86_64-randconfig-m001-20211203 
(https://download.01.org/0day-ci/archive/20211204/[email protected]/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
drivers/ata/libata-eh.c:2713 ata_eh_reset() error: uninitialized symbol 'rc'.

vim +/rc +2713 drivers/ata/libata-eh.c

664faf09a05d74 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2448  
fb7fd61454c868 drivers/ata/libata-eh.c  Tejun Heo                 2007-09-23  
2449  int ata_eh_reset(struct ata_link *link, int classify,
f5914a461eb970 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2450               ata_prereset_fn_t prereset, ata_reset_fn_t softreset,
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2451               ata_reset_fn_t hardreset, ata_postreset_fn_t postreset)
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2452  {
afaa5c373d2c49 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-09  
2453      struct ata_port *ap = link->ap;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2454      struct ata_link *slave = ap->slave_link;
936fd732865788 drivers/ata/libata-eh.c  Tejun Heo                 2007-08-06  
2455      struct ata_eh_context *ehc = &link->eh_context;
705d201414382b drivers/ata/libata-eh.c  Bartlomiej Zolnierkiewicz 2009-07-26  
2456      struct ata_eh_context *sehc = slave ? &slave->eh_context : NULL;
664faf09a05d74 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2457      unsigned int *classes = ehc->classes;
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2458      unsigned int lflags = link->flags;
1cdaf534f829b8 drivers/scsi/libata-eh.c Tejun Heo                 2006-07-03  
2459      int verbose = !(ehc->i.flags & ATA_EHI_QUIET);
d8af0eb6046c56 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-20  
2460      int max_tries = 0, try = 0;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2461      struct ata_link *failed_link;
f58229f8060055 drivers/ata/libata-eh.c  Tejun Heo                 2007-08-06  
2462      struct ata_device *dev;
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2463      unsigned long deadline, now;
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2464      ata_reset_fn_t reset;
afaa5c373d2c49 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-09  
2465      unsigned long flags;
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2466      u32 sstatus;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2467      int nr_unknown, rc;
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2468  
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2469      /*
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2470       * Prepare to reset
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2471       */
d8af0eb6046c56 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-20  
2472      while (ata_eh_reset_timeouts[max_tries] != ULONG_MAX)
d8af0eb6046c56 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-20  
2473              max_tries++;
ca6d43b051b5a0 drivers/ata/libata-eh.c  Dan Williams              2012-06-21  
2474      if (link->flags & ATA_LFLAG_RST_ONCE)
ca6d43b051b5a0 drivers/ata/libata-eh.c  Dan Williams              2012-06-21  
2475              max_tries = 1;
05944bdf6fadb5 drivers/ata/libata-eh.c  Tejun Heo                 2008-08-13  
2476      if (link->flags & ATA_LFLAG_NO_HRST)
05944bdf6fadb5 drivers/ata/libata-eh.c  Tejun Heo                 2008-08-13  
2477              hardreset = NULL;
05944bdf6fadb5 drivers/ata/libata-eh.c  Tejun Heo                 2008-08-13  
2478      if (link->flags & ATA_LFLAG_NO_SRST)
05944bdf6fadb5 drivers/ata/libata-eh.c  Tejun Heo                 2008-08-13  
2479              softreset = NULL;
d8af0eb6046c56 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-20  
2480  
25985edcedea63 drivers/ata/libata-eh.c  Lucas De Marchi           2011-03-30  
2481      /* make sure each reset attempt is at least COOL_DOWN apart */
19b723218bde79 drivers/ata/libata-eh.c  Tejun Heo                 2008-11-04  
2482      if (ehc->i.flags & ATA_EHI_DID_RESET) {
0a2c0f56159999 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-20  
2483              now = jiffies;
19b723218bde79 drivers/ata/libata-eh.c  Tejun Heo                 2008-11-04  
2484              WARN_ON(time_after(ehc->last_reset, now));
19b723218bde79 drivers/ata/libata-eh.c  Tejun Heo                 2008-11-04  
2485              deadline = ata_deadline(ehc->last_reset,
19b723218bde79 drivers/ata/libata-eh.c  Tejun Heo                 2008-11-04  
2486                                      ATA_EH_RESET_COOL_DOWN);
0a2c0f56159999 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-20  
2487              if (time_before(now, deadline))
0a2c0f56159999 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-20  
2488                      schedule_timeout_uninterruptible(deadline - now);
19b723218bde79 drivers/ata/libata-eh.c  Tejun Heo                 2008-11-04  
2489      }
0a2c0f56159999 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-20  
2490  
afaa5c373d2c49 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-09  
2491      spin_lock_irqsave(ap->lock, flags);
afaa5c373d2c49 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-09  
2492      ap->pflags |= ATA_PFLAG_RESETTING;
afaa5c373d2c49 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-09  
2493      spin_unlock_irqrestore(ap->lock, flags);
afaa5c373d2c49 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-09  
2494  
cf48062658e7ab drivers/ata/libata-eh.c  Tejun Heo                 2008-01-24  
2495      ata_eh_about_to_do(link, NULL, ATA_EH_RESET);
13abf50df20900 drivers/scsi/libata-eh.c Tejun Heo                 2006-07-10  
2496  
1eca4365be25c5 drivers/ata/libata-eh.c  Tejun Heo                 2008-11-03  
2497      ata_for_each_dev(dev, link, ALL) {
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2498              /* If we issue an SRST then an ATA drive (not ATAPI)
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2499               * may change configuration and be in PIO0 timing. If
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2500               * we do a hard reset (or are coming from power on)
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2501               * this is true for ATA or ATAPI. Until we've set a
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2502               * suitable controller mode we should not touch the
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2503               * bus as we may be talking too fast.
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2504               */
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2505              dev->pio_mode = XFER_PIO_0;
5416912af75de9 drivers/ata/libata-eh.c  Aaron Lu                  2012-12-03  
2506              dev->dma_mode = 0xff;
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2507  
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2508              /* If the controller has a pio mode setup function
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2509               * then use it to set the chipset to rights. Don't
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2510               * touch the DMA setup as that will be dealt with when
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2511               * configuring devices.
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2512               */
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2513              if (ap->ops->set_piomode)
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2514                      ap->ops->set_piomode(ap, dev);
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2515      }
cdeab1140799f0 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-29  
2516  
cf48062658e7ab drivers/ata/libata-eh.c  Tejun Heo                 2008-01-24  
2517      /* prefer hardreset */
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2518      reset = NULL;
cf48062658e7ab drivers/ata/libata-eh.c  Tejun Heo                 2008-01-24  
2519      ehc->i.action &= ~ATA_EH_RESET;
cf48062658e7ab drivers/ata/libata-eh.c  Tejun Heo                 2008-01-24  
2520      if (hardreset) {
cf48062658e7ab drivers/ata/libata-eh.c  Tejun Heo                 2008-01-24  
2521              reset = hardreset;
a674050e068a29 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2522              ehc->i.action |= ATA_EH_HARDRESET;
4f7faa3f2b99f8 drivers/ata/libata-eh.c  Tejun Heo                 2008-01-30  
2523      } else if (softreset) {
cf48062658e7ab drivers/ata/libata-eh.c  Tejun Heo                 2008-01-24  
2524              reset = softreset;
a674050e068a29 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2525              ehc->i.action |= ATA_EH_SOFTRESET;
cf48062658e7ab drivers/ata/libata-eh.c  Tejun Heo                 2008-01-24  
2526      }
f5914a461eb970 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2527  
f5914a461eb970 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2528      if (prereset) {
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2529              unsigned long deadline = ata_deadline(jiffies,
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2530                                                    
ATA_EH_PRERESET_TIMEOUT);
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2531  
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2532              if (slave) {
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2533                      sehc->i.action &= ~ATA_EH_RESET;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2534                      sehc->i.action |= ehc->i.action;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2535              }
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2536  
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2537              rc = prereset(link, deadline);
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2538  
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2539              /* If present, do prereset on slave link too.  Reset
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2540               * is skipped iff both master and slave links report
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2541               * -ENOENT or clear ATA_EH_RESET.
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2542               */
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2543              if (slave && (rc == 0 || rc == -ENOENT)) {
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2544                      int tmp;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2545  
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2546                      tmp = prereset(slave, deadline);
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2547                      if (tmp != -ENOENT)
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2548                              rc = tmp;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2549  
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2550                      ehc->i.action |= sehc->i.action;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2551              }
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2552  
f5914a461eb970 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2553              if (rc) {
c961922b73dab4 drivers/ata/libata-eh.c  Alan Cox                  2006-09-26  
2554                      if (rc == -ENOENT) {
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2555                              ata_link_dbg(link, "port 
disabled--ignoring\n");
cf48062658e7ab drivers/ata/libata-eh.c  Tejun Heo                 2008-01-24  
2556                              ehc->i.action &= ~ATA_EH_RESET;
4aa9ab67fb9c0d drivers/ata/libata-eh.c  Tejun Heo                 2007-03-12  
2557  
1eca4365be25c5 drivers/ata/libata-eh.c  Tejun Heo                 2008-11-03  
2558                              ata_for_each_dev(dev, link, ALL)
f58229f8060055 drivers/ata/libata-eh.c  Tejun Heo                 2007-08-06  
2559                                      classes[dev->devno] = ATA_DEV_NONE;
4aa9ab67fb9c0d drivers/ata/libata-eh.c  Tejun Heo                 2007-03-12  
2560  
4aa9ab67fb9c0d drivers/ata/libata-eh.c  Tejun Heo                 2007-03-12  
2561                              rc = 0;
c961922b73dab4 drivers/ata/libata-eh.c  Alan Cox                  2006-09-26  
2562                      } else
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2563                              ata_link_err(link,
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2564                                           "prereset failed (errno=%d)\n",
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2565                                           rc);
fccb6ea5c240b9 drivers/ata/libata-eh.c  Tejun Heo                 2007-07-16  
2566                      goto out;
f5914a461eb970 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2567              }
f5914a461eb970 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2568  
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2569              /* prereset() might have cleared ATA_EH_RESET.  If so,
d6515e6ff4ad3d drivers/ata/libata-eh.c  Tejun Heo                 2009-03-04  
2570               * bang classes, thaw and return.
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2571               */
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2572              if (reset && !(ehc->i.action & ATA_EH_RESET)) {
1eca4365be25c5 drivers/ata/libata-eh.c  Tejun Heo                 2008-11-03  
2573                      ata_for_each_dev(dev, link, ALL)
f58229f8060055 drivers/ata/libata-eh.c  Tejun Heo                 2007-08-06  
2574                              classes[dev->devno] = ATA_DEV_NONE;
d6515e6ff4ad3d drivers/ata/libata-eh.c  Tejun Heo                 2009-03-04  
2575                      if ((ap->pflags & ATA_PFLAG_FROZEN) &&
d6515e6ff4ad3d drivers/ata/libata-eh.c  Tejun Heo                 2009-03-04  
2576                          ata_is_host_link(link))
d6515e6ff4ad3d drivers/ata/libata-eh.c  Tejun Heo                 2009-03-04  
2577                              ata_eh_thaw_port(ap);
fccb6ea5c240b9 drivers/ata/libata-eh.c  Tejun Heo                 2007-07-16  
2578                      rc = 0;
fccb6ea5c240b9 drivers/ata/libata-eh.c  Tejun Heo                 2007-07-16  
2579                      goto out;
f5914a461eb970 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2580              }
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2581      }
f5914a461eb970 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2582  
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2583   retry:
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2584      /*
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2585       * Perform reset
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2586       */
dc98c32cbe8075 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2587      if (ata_is_host_link(link))
dc98c32cbe8075 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2588              ata_eh_freeze_port(ap);
dc98c32cbe8075 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2589  
341c2c958ec7bd drivers/ata/libata-eh.c  Tejun Heo                 2008-05-20  
2590      deadline = ata_deadline(jiffies, ata_eh_reset_timeouts[try++]);
31daabda16063b drivers/ata/libata-eh.c  Tejun Heo                 2007-02-02  
2591  
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2592      if (reset) {
3e706399b03bd2 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2593              if (verbose)
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2594                      ata_link_info(link, "%s resetting link\n",
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2595                                    reset == softreset ? "soft" : "hard");
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2596  
13abf50df20900 drivers/scsi/libata-eh.c Tejun Heo                 2006-07-10  
2597              /* mark that this EH session started with reset */
19b723218bde79 drivers/ata/libata-eh.c  Tejun Heo                 2008-11-04  
2598              ehc->last_reset = jiffies;
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2599              if (reset == hardreset) {
0d64a233fe6a8f drivers/ata/libata-eh.c  Tejun Heo                 2007-04-23  
2600                      ehc->i.flags |= ATA_EHI_DID_HARDRESET;
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2601                      trace_ata_link_hardreset_begin(link, classes, 
deadline);
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2602              } else {
0d64a233fe6a8f drivers/ata/libata-eh.c  Tejun Heo                 2007-04-23  
2603                      ehc->i.flags |= ATA_EHI_DID_SOFTRESET;
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2604                      trace_ata_link_softreset_begin(link, classes, 
deadline);
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2605              }
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2606  
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2607              rc = ata_do_reset(link, reset, classes, deadline, true);
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2608              if (reset == hardreset)
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2609                      trace_ata_link_hardreset_end(link, classes, rc);
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2610              else
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2611                      trace_ata_link_softreset_end(link, classes, rc);
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2612              if (rc && rc != -EAGAIN) {
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2613                      failed_link = link;
5dbfc9cb59d4ad drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2614                      goto fail;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2615              }
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2616  
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2617              /* hardreset slave link if existent */
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2618              if (slave && reset == hardreset) {
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2619                      int tmp;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2620  
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2621                      if (verbose)
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2622                              ata_link_info(slave, "hard resetting link\n");
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2623  
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2624                      ata_eh_about_to_do(slave, NULL, ATA_EH_RESET);
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2625                      trace_ata_slave_hardreset_begin(slave, classes,
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2626                                                      deadline);
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2627                      tmp = ata_do_reset(slave, reset, classes, deadline,
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2628                                         false);
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2629                      trace_ata_slave_hardreset_end(slave, classes, tmp);
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2630                      switch (tmp) {
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2631                      case -EAGAIN:
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2632                              rc = -EAGAIN;
e06abcc68cb555 drivers/ata/libata-eh.c  Gustavo A. R. Silva       2021-04-20  
2633                              break;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2634                      case 0:
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2635                              break;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2636                      default:
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2637                              failed_link = slave;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2638                              rc = tmp;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2639                              goto fail;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2640                      }
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2641              }
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2642  
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2643              /* perform follow-up SRST if necessary */
664faf09a05d74 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2644              if (reset == hardreset &&
e8411fbad67a6f drivers/ata/libata-eh.c  Sergei Shtylyov           2011-08-09  
2645                  ata_eh_followup_srst_needed(link, rc)) {
664faf09a05d74 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2646                      reset = softreset;
664faf09a05d74 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2647  
664faf09a05d74 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2648                      if (!reset) {
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2649                              ata_link_err(link,
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2650           "follow-up softreset required but no softreset available\n");
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2651                              failed_link = link;
fccb6ea5c240b9 drivers/ata/libata-eh.c  Tejun Heo                 2007-07-16  
2652                              rc = -EINVAL;
08cf69d005acda drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2653                              goto fail;
664faf09a05d74 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2654                      }
664faf09a05d74 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2655  
cf48062658e7ab drivers/ata/libata-eh.c  Tejun Heo                 2008-01-24  
2656                      ata_eh_about_to_do(link, NULL, ATA_EH_RESET);
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2657                      trace_ata_link_softreset_begin(link, classes, 
deadline);
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2658                      rc = ata_do_reset(link, reset, classes, deadline, 
true);
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2659                      trace_ata_link_softreset_end(link, classes, rc);
fe2c4d018fc612 drivers/ata/libata-eh.c  Tejun Heo                 2009-07-08  
2660                      if (rc) {
fe2c4d018fc612 drivers/ata/libata-eh.c  Tejun Heo                 2009-07-08  
2661                              failed_link = link;
fe2c4d018fc612 drivers/ata/libata-eh.c  Tejun Heo                 2009-07-08  
2662                              goto fail;
fe2c4d018fc612 drivers/ata/libata-eh.c  Tejun Heo                 2009-07-08  
2663                      }
08cf69d005acda drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2664              }
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2665      } else {
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2666              if (verbose)
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2667                      ata_link_info(link,
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2668      "no reset method available, skipping reset\n");
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2669              if (!(lflags & ATA_LFLAG_ASSUME_CLASS))
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2670                      lflags |= ATA_LFLAG_ASSUME_ATA;
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2671      }
664faf09a05d74 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2672  
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2673      /*
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2674       * Post-reset processing
932648b007de76 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2675       */
1eca4365be25c5 drivers/ata/libata-eh.c  Tejun Heo                 2008-11-03  
2676      ata_for_each_dev(dev, link, ALL) {
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2677              /* After the reset, the device state is PIO 0 and the
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2678               * controller state is undefined.  Reset also wakes up
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2679               * drives from sleeping mode.
20952b69903544 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2680               */
f58229f8060055 drivers/ata/libata-eh.c  Tejun Heo                 2007-08-06  
2681              dev->pio_mode = XFER_PIO_0;
054a5fbaceb2eb drivers/ata/libata-eh.c  Tejun Heo                 2007-10-25  
2682              dev->flags &= ~ATA_DFLAG_SLEEPING;
20952b69903544 drivers/scsi/libata-eh.c Tejun Heo                 2006-05-31  
2683  
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2684              if (ata_phys_link_offline(ata_dev_phys_link(dev)))
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2685                      continue;
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2686  
4ccd3329a2e514 drivers/ata/libata-eh.c  Tejun Heo                 2008-01-08  
2687              /* apply class override */
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2688              if (lflags & ATA_LFLAG_ASSUME_ATA)
ae791c05694d73 drivers/ata/libata-eh.c  Tejun Heo                 2007-09-23  
2689                      classes[dev->devno] = ATA_DEV_ATA;
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2690              else if (lflags & ATA_LFLAG_ASSUME_SEMB)
816ab89782ac13 drivers/ata/libata-eh.c  Tejun Heo                 2008-10-22  
2691                      classes[dev->devno] = ATA_DEV_SEMB_UNSUP;
ae791c05694d73 drivers/ata/libata-eh.c  Tejun Heo                 2007-09-23  
2692      }
ae791c05694d73 drivers/ata/libata-eh.c  Tejun Heo                 2007-09-23  
2693  
008a78961ec729 drivers/ata/libata-eh.c  Tejun Heo                 2007-07-16  
2694      /* record current link speed */
936fd732865788 drivers/ata/libata-eh.c  Tejun Heo                 2007-08-06  
2695      if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0)
936fd732865788 drivers/ata/libata-eh.c  Tejun Heo                 2007-08-06  
2696              link->sata_spd = (sstatus >> 4) & 0xf;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2697      if (slave && sata_scr_read(slave, SCR_STATUS, &sstatus) == 0)
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2698              slave->sata_spd = (sstatus >> 4) & 0xf;
008a78961ec729 drivers/ata/libata-eh.c  Tejun Heo                 2007-07-16  
2699  
dc98c32cbe8075 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2700      /* thaw the port */
dc98c32cbe8075 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2701      if (ata_is_host_link(link))
dc98c32cbe8075 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2702              ata_eh_thaw_port(ap);
dc98c32cbe8075 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2703  
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2704      /* postreset() should clear hardware SError.  Although SError
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2705       * is cleared during link resume, clearing SError here is
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2706       * necessary as some PHYs raise hotplug events after SRST.
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2707       * This introduces race condition where hotplug occurs between
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2708       * reset and here.  This race is mediated by cross checking
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2709       * link onlineness and classification result later.
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2710       */
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2711      if (postreset) {
cc0680a580b5be drivers/ata/libata-eh.c  Tejun Heo                 2007-08-06  
2712              postreset(link, classes);
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03 
@2713              trace_ata_link_postreset(link, classes, rc);
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2714              if (slave) {
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2715                      postreset(slave, classes);
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2716                      trace_ata_slave_postreset(slave, classes, rc);
c9abdeba1d2767 drivers/ata/libata-eh.c  Hannes Reinecke           2020-02-03  
2717              }
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2718      }
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2719  
1e641060c4b564 drivers/ata/libata-eh.c  Tejun Heo                 2009-07-17  
2720      /*
8c56cacc724c76 drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2721       * Some controllers can't be frozen very well and may set spurious
8c56cacc724c76 drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2722       * error conditions during reset.  Clear accumulated error
8c56cacc724c76 drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2723       * information and re-thaw the port if frozen.  As reset is the
8c56cacc724c76 drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2724       * final recovery action and we cross check link onlineness against
8c56cacc724c76 drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2725       * device classification later, no hotplug event is lost by this.
1e641060c4b564 drivers/ata/libata-eh.c  Tejun Heo                 2009-07-17  
2726       */
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2727      spin_lock_irqsave(link->ap->lock, flags);
1e641060c4b564 drivers/ata/libata-eh.c  Tejun Heo                 2009-07-17  
2728      memset(&link->eh_info, 0, sizeof(link->eh_info));
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2729      if (slave)
1e641060c4b564 drivers/ata/libata-eh.c  Tejun Heo                 2009-07-17  
2730              memset(&slave->eh_info, 0, sizeof(link->eh_info));
1e641060c4b564 drivers/ata/libata-eh.c  Tejun Heo                 2009-07-17  
2731      ap->pflags &= ~ATA_PFLAG_EH_PENDING;
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2732      spin_unlock_irqrestore(link->ap->lock, flags);
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2733  
8c56cacc724c76 drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2734      if (ap->pflags & ATA_PFLAG_FROZEN)
8c56cacc724c76 drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2735              ata_eh_thaw_port(ap);
8c56cacc724c76 drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2736  
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2737      /*
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2738       * Make sure onlineness and classification result correspond.
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2739       * Hotplug could have happened during reset and some
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2740       * controllers fail to wait while a drive is spinning up after
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2741       * being hotplugged causing misdetection.  By cross checking
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2742       * link on/offlineness and classification result, those
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2743       * conditions can be reliably detected and retried.
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2744       */
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2745      nr_unknown = 0;
1eca4365be25c5 drivers/ata/libata-eh.c  Tejun Heo                 2008-11-03  
2746      ata_for_each_dev(dev, link, ALL) {
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2747              if (ata_phys_link_online(ata_dev_phys_link(dev))) {
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2748                      if (classes[dev->devno] == ATA_DEV_UNKNOWN) {
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2749                              ata_dev_dbg(dev, "link online but device 
misclassified\n");
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2750                              classes[dev->devno] = ATA_DEV_NONE;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2751                              nr_unknown++;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2752                      }
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2753              } else if (ata_phys_link_offline(ata_dev_phys_link(dev))) {
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2754                      if (ata_class_enabled(classes[dev->devno]))
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2755                              ata_dev_dbg(dev,
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2756                                          "link offline, clearing class %d 
to NONE\n",
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2757                                          classes[dev->devno]);
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2758                      classes[dev->devno] = ATA_DEV_NONE;
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2759              } else if (classes[dev->devno] == ATA_DEV_UNKNOWN) {
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2760                      ata_dev_dbg(dev,
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2761                                  "link status unknown, clearing UNKNOWN to 
NONE\n");
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2762                      classes[dev->devno] = ATA_DEV_NONE;
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2763              }
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2764      }
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2765  
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2766      if (classify && nr_unknown) {
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2767              if (try < max_tries) {
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2768                      ata_link_warn(link,
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2769                                    "link online but %d devices 
misclassified, retrying\n",
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2770                                    nr_unknown);
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2771                      failed_link = link;
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2772                      rc = -EAGAIN;
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2773                      goto fail;
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2774              }
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2775              ata_link_warn(link,
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2776                            "link online but %d devices misclassified, "
3b761d3d437cff drivers/ata/libata-eh.c  Tejun Heo                 2009-10-06  
2777                            "device detection might fail\n", nr_unknown);
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2778      }
f046519fc85a8f drivers/ata/libata-eh.c  Tejun Heo                 2008-05-19  
2779  
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2780      /* reset successful, schedule revalidation */
cf48062658e7ab drivers/ata/libata-eh.c  Tejun Heo                 2008-01-24  
2781      ata_eh_done(link, NULL, ATA_EH_RESET);
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2782      if (slave)
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2783              ata_eh_done(slave, NULL, ATA_EH_RESET);
19b723218bde79 drivers/ata/libata-eh.c  Tejun Heo                 2008-11-04  
2784      ehc->last_reset = jiffies;              /* update to completion time 
*/
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2785      ehc->i.action |= ATA_EH_REVALIDATE;
6b7ae9545ad987 drivers/ata/libata-eh.c  Tejun Heo                 2010-09-01  
2786      link->lpm_policy = ATA_LPM_UNKNOWN;     /* reset LPM state */
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2787  
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2788      rc = 0;
fccb6ea5c240b9 drivers/ata/libata-eh.c  Tejun Heo                 2007-07-16  
2789   out:
fccb6ea5c240b9 drivers/ata/libata-eh.c  Tejun Heo                 2007-07-16  
2790      /* clear hotplug flag */
fccb6ea5c240b9 drivers/ata/libata-eh.c  Tejun Heo                 2007-07-16  
2791      ehc->i.flags &= ~ATA_EHI_HOTPLUGGED;
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2792      if (slave)
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2793              sehc->i.flags &= ~ATA_EHI_HOTPLUGGED;
afaa5c373d2c49 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-09  
2794  
afaa5c373d2c49 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-09  
2795      spin_lock_irqsave(ap->lock, flags);
afaa5c373d2c49 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-09  
2796      ap->pflags &= ~ATA_PFLAG_RESETTING;
afaa5c373d2c49 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-09  
2797      spin_unlock_irqrestore(ap->lock, flags);
afaa5c373d2c49 drivers/ata/libata-eh.c  Tejun Heo                 2007-10-09  
2798  
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2799      return rc;
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2800  
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2801   fail:
5958e3025fd9d9 drivers/ata/libata-eh.c  Tejun Heo                 2008-04-07  
2802      /* if SCR isn't accessible on a fan-out port, PMP needs to be reset */
5958e3025fd9d9 drivers/ata/libata-eh.c  Tejun Heo                 2008-04-07  
2803      if (!ata_is_host_link(link) &&
5958e3025fd9d9 drivers/ata/libata-eh.c  Tejun Heo                 2008-04-07  
2804          sata_scr_read(link, SCR_STATUS, &sstatus))
5958e3025fd9d9 drivers/ata/libata-eh.c  Tejun Heo                 2008-04-07  
2805              rc = -ERESTART;
5958e3025fd9d9 drivers/ata/libata-eh.c  Tejun Heo                 2008-04-07  
2806  
7a46c0780babea drivers/ata/libata-eh.c  Gwendal Grignou           2011-10-19  
2807      if (try >= max_tries) {
8ea7645c5a949f drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2808              /*
8ea7645c5a949f drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2809               * Thaw host port even if reset failed, so that the port
8ea7645c5a949f drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2810               * can be retried on the next phy event.  This risks
8ea7645c5a949f drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2811               * repeated EH runs but seems to be a better tradeoff than
8ea7645c5a949f drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2812               * shutting down a port after a botched hotplug attempt.
8ea7645c5a949f drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2813               */
8ea7645c5a949f drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2814              if (ata_is_host_link(link))
8ea7645c5a949f drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2815                      ata_eh_thaw_port(ap);
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2816              goto out;
8ea7645c5a949f drivers/ata/libata-eh.c  Tejun Heo                 2011-05-25  
2817      }
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2818  
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2819      now = jiffies;
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2820      if (time_before(now, deadline)) {
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2821              unsigned long delta = deadline - now;
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2822  
a9a79dfec23956 drivers/ata/libata-eh.c  Joe Perches               2011-04-15  
2823              ata_link_warn(failed_link,
0a2c0f56159999 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-20  
2824                      "reset failed (errno=%d), retrying in %u secs\n",
0a2c0f56159999 drivers/ata/libata-eh.c  Tejun Heo                 2008-05-20  
2825                      rc, DIV_ROUND_UP(jiffies_to_msecs(delta), 1000));
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2826  
c0c362b60e259e drivers/ata/libata-eh.c  Tejun Heo                 2010-09-06  
2827              ata_eh_release(ap);
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2828              while (delta)
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2829                      delta = schedule_timeout_uninterruptible(delta);
c0c362b60e259e drivers/ata/libata-eh.c  Tejun Heo                 2010-09-06  
2830              ata_eh_acquire(ap);
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2831      }
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2832  
7a46c0780babea drivers/ata/libata-eh.c  Gwendal Grignou           2011-10-19  
2833      /*
7a46c0780babea drivers/ata/libata-eh.c  Gwendal Grignou           2011-10-19  
2834       * While disks spinup behind PMP, some controllers fail sending SRST.
7a46c0780babea drivers/ata/libata-eh.c  Gwendal Grignou           2011-10-19  
2835       * They need to be reset - as well as the PMP - before retrying.
7a46c0780babea drivers/ata/libata-eh.c  Gwendal Grignou           2011-10-19  
2836       */
7a46c0780babea drivers/ata/libata-eh.c  Gwendal Grignou           2011-10-19  
2837      if (rc == -ERESTART) {
7a46c0780babea drivers/ata/libata-eh.c  Gwendal Grignou           2011-10-19  
2838              if (ata_is_host_link(link))
7a46c0780babea drivers/ata/libata-eh.c  Gwendal Grignou           2011-10-19  
2839                      ata_eh_thaw_port(ap);
7a46c0780babea drivers/ata/libata-eh.c  Gwendal Grignou           2011-10-19  
2840              goto out;
7a46c0780babea drivers/ata/libata-eh.c  Gwendal Grignou           2011-10-19  
2841      }
7a46c0780babea drivers/ata/libata-eh.c  Gwendal Grignou           2011-10-19  
2842  
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2843      if (try == max_tries - 1) {
a07d499b475988 drivers/ata/libata-eh.c  Tejun Heo                 2009-01-29  
2844              sata_down_spd_limit(link, 0);
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2845              if (slave)
a07d499b475988 drivers/ata/libata-eh.c  Tejun Heo                 2009-01-29  
2846                      sata_down_spd_limit(slave, 0);
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2847      } else if (rc == -EPIPE)
a07d499b475988 drivers/ata/libata-eh.c  Tejun Heo                 2009-01-29  
2848              sata_down_spd_limit(failed_link, 0);
b1c72916abbdd0 drivers/ata/libata-eh.c  Tejun Heo                 2008-07-31  
2849  
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2850      if (hardreset)
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2851              reset = hardreset;
416dc9ed206bba drivers/ata/libata-eh.c  Tejun Heo                 2007-10-31  
2852      goto retry;
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2853  }
022bdb075b9e1f drivers/scsi/libata-eh.c Tejun Heo                 2006-05-15  
2854  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to