diff options
-rw-r--r-- | Documentation/kernel-parameters.txt | 3 | ||||
-rw-r--r-- | drivers/ata/libata-core.c | 1 | ||||
-rw-r--r-- | drivers/ata/libata-eh.c | 2 | ||||
-rw-r--r-- | include/linux/libata.h | 1 |
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 */ |