mtip32xx: Increase timeout for STANDBY IMMEDIATE command
authorAsai Thambi S P <asamymuthupa@micron.com>
Thu, 17 Apr 2014 03:27:54 +0000 (20:27 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 7 Jul 2014 01:54:13 +0000 (18:54 -0700)
commit 670a641420a3d9586eebe7429dfeec4e7ed447aa upstream.

Increased timeout for STANDBY IMMEDIATE command to 2 minutes.

Signed-off-by: Selvan Mani <smani@micron.com>
Signed-off-by: Asai Thambi S P <asamymuthupa@micron.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/block/mtip32xx/mtip32xx.c

index 3517b99f49a520942df930fcda75a857ac71cbab..78344ae539994e948e2242f74bd6252c102ee595 100644 (file)
@@ -1493,6 +1493,37 @@ static inline void ata_swap_string(u16 *buf, unsigned int len)
                be16_to_cpus(&buf[i]);
 }
 
+static void mtip_set_timeout(struct driver_data *dd,
+                                       struct host_to_dev_fis *fis,
+                                       unsigned int *timeout, u8 erasemode)
+{
+       switch (fis->command) {
+       case ATA_CMD_DOWNLOAD_MICRO:
+               *timeout = 120000; /* 2 minutes */
+               break;
+       case ATA_CMD_SEC_ERASE_UNIT:
+       case 0xFC:
+               if (erasemode)
+                       *timeout = ((*(dd->port->identify + 90) * 2) * 60000);
+               else
+                       *timeout = ((*(dd->port->identify + 89) * 2) * 60000);
+               break;
+       case ATA_CMD_STANDBYNOW1:
+               *timeout = 120000;  /* 2 minutes */
+               break;
+       case 0xF7:
+       case 0xFA:
+               *timeout = 60000;  /* 60 seconds */
+               break;
+       case ATA_CMD_SMART:
+               *timeout = 15000;  /* 15 seconds */
+               break;
+       default:
+               *timeout = MTIP_IOCTL_COMMAND_TIMEOUT_MS;
+               break;
+       }
+}
+
 /*
  * Request the device identity information.
  *
@@ -1602,6 +1633,7 @@ static int mtip_standby_immediate(struct mtip_port *port)
        int rv;
        struct host_to_dev_fis  fis;
        unsigned long start;
+       unsigned int timeout;
 
        /* Build the FIS. */
        memset(&fis, 0, sizeof(struct host_to_dev_fis));
@@ -1609,6 +1641,8 @@ static int mtip_standby_immediate(struct mtip_port *port)
        fis.opts        = 1 << 7;
        fis.command     = ATA_CMD_STANDBYNOW1;
 
+       mtip_set_timeout(port->dd, &fis, &timeout, 0);
+
        start = jiffies;
        rv = mtip_exec_internal_command(port,
                                        &fis,
@@ -1617,7 +1651,7 @@ static int mtip_standby_immediate(struct mtip_port *port)
                                        0,
                                        0,
                                        GFP_ATOMIC,
-                                       15000);
+                                       timeout);
        dbg_printk(MTIP_DRV_NAME "Time taken to complete standby cmd: %d ms\n",
                        jiffies_to_msecs(jiffies - start));
        if (rv)
@@ -2156,36 +2190,6 @@ static unsigned int implicit_sector(unsigned char command,
        }
        return rv;
 }
-static void mtip_set_timeout(struct driver_data *dd,
-                                       struct host_to_dev_fis *fis,
-                                       unsigned int *timeout, u8 erasemode)
-{
-       switch (fis->command) {
-       case ATA_CMD_DOWNLOAD_MICRO:
-               *timeout = 120000; /* 2 minutes */
-               break;
-       case ATA_CMD_SEC_ERASE_UNIT:
-       case 0xFC:
-               if (erasemode)
-                       *timeout = ((*(dd->port->identify + 90) * 2) * 60000);
-               else
-                       *timeout = ((*(dd->port->identify + 89) * 2) * 60000);
-               break;
-       case ATA_CMD_STANDBYNOW1:
-               *timeout = 120000;  /* 2 minutes */
-               break;
-       case 0xF7:
-       case 0xFA:
-               *timeout = 60000;  /* 60 seconds */
-               break;
-       case ATA_CMD_SMART:
-               *timeout = 15000;  /* 15 seconds */
-               break;
-       default:
-               *timeout = MTIP_IOCTL_COMMAND_TIMEOUT_MS;
-               break;
-       }
-}
 
 /*
  * Executes a taskfile