mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 13:55:32 +00:00
mtip32xx: Increase timeout for STANDBY IMMEDIATE command
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> Cc: stable@kernel.org Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
24cddb83b4
commit
670a641420
1 changed files with 35 additions and 31 deletions
|
@ -1529,6 +1529,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.
|
||||
*
|
||||
|
@ -1644,6 +1675,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));
|
||||
|
@ -1651,6 +1683,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,
|
||||
|
@ -1659,7 +1693,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)
|
||||
|
@ -2202,36 +2236,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
|
||||
|
|
Loading…
Reference in a new issue