aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/kernel-parameters.txt3
-rw-r--r--drivers/ata/libata-core.c1
-rw-r--r--drivers/ata/libata-eh.c2
-rw-r--r--include/linux/libata.h1
4 files changed, 7 insertions, 0 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index ad7e2e5088c1..2cb2d81a51ab 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -1350,6 +1350,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
1350 * nohrst, nosrst, norst: suppress hard, soft 1350 * nohrst, nosrst, norst: suppress hard, soft
1351 and both resets. 1351 and both resets.
1352 1352
1353 * rstonce: only attempt one reset during
1354 hot-unplug link recovery
1355
1353 * dump_id: dump IDENTIFY data. 1356 * dump_id: dump IDENTIFY data.
1354 1357
1355 If there are multiple matching configurations changing 1358 If there are multiple matching configurations changing
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index fadd5866d40f..70964aabcb89 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -6387,6 +6387,7 @@ static int __init ata_parse_force_one(char **cur,
6387 { "nohrst", .lflags = ATA_LFLAG_NO_HRST }, 6387 { "nohrst", .lflags = ATA_LFLAG_NO_HRST },
6388 { "nosrst", .lflags = ATA_LFLAG_NO_SRST }, 6388 { "nosrst", .lflags = ATA_LFLAG_NO_SRST },
6389 { "norst", .lflags = ATA_LFLAG_NO_HRST | ATA_LFLAG_NO_SRST }, 6389 { "norst", .lflags = ATA_LFLAG_NO_HRST | ATA_LFLAG_NO_SRST },
6390 { "rstonce", .lflags = ATA_LFLAG_RST_ONCE },
6390 }; 6391 };
6391 char *start = *cur, *p = *cur; 6392 char *start = *cur, *p = *cur;
6392 char *id, *val, *endp; 6393 char *id, *val, *endp;
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 7d4535e989bf..100428dde421 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -2623,6 +2623,8 @@ int ata_eh_reset(struct ata_link *link, int classify,
2623 */ 2623 */
2624 while (ata_eh_reset_timeouts[max_tries] != ULONG_MAX) 2624 while (ata_eh_reset_timeouts[max_tries] != ULONG_MAX)
2625 max_tries++; 2625 max_tries++;
2626 if (link->flags & ATA_LFLAG_RST_ONCE)
2627 max_tries = 1;
2626 if (link->flags & ATA_LFLAG_NO_HRST) 2628 if (link->flags & ATA_LFLAG_NO_HRST)
2627 hardreset = NULL; 2629 hardreset = NULL;
2628 if (link->flags & ATA_LFLAG_NO_SRST) 2630 if (link->flags & ATA_LFLAG_NO_SRST)
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 64f90e17e51d..31a2853e9530 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -184,6 +184,7 @@ enum {
184 ATA_LFLAG_DISABLED = (1 << 6), /* link is disabled */ 184 ATA_LFLAG_DISABLED = (1 << 6), /* link is disabled */
185 ATA_LFLAG_SW_ACTIVITY = (1 << 7), /* keep activity stats */ 185 ATA_LFLAG_SW_ACTIVITY = (1 << 7), /* keep activity stats */
186 ATA_LFLAG_NO_LPM = (1 << 8), /* disable LPM on this link */ 186 ATA_LFLAG_NO_LPM = (1 << 8), /* disable LPM on this link */
187 ATA_LFLAG_RST_ONCE = (1 << 9), /* limit recovery to one reset */
187 188
188 /* struct ata_port flags */ 189 /* struct ata_port flags */
189 ATA_FLAG_SLAVE_POSS = (1 << 0), /* host supports slave dev */ 190 ATA_FLAG_SLAVE_POSS = (1 << 0), /* host supports slave dev */