提交 36193484 编写于 作者: J Jens Axboe

[PATCH] ide: option to disable cache flushes for buggy drives

Some drives claim they support cache flushing, but get seriously
confused if you try. Add this option to be able to boot with
barriers enabled by default.
Signed-off-by: NJens Axboe <axboe@suse.de>
上级 64821324
...@@ -776,7 +776,7 @@ static void update_ordered(ide_drive_t *drive) ...@@ -776,7 +776,7 @@ static void update_ordered(ide_drive_t *drive)
* not available so we don't need to recheck that. * not available so we don't need to recheck that.
*/ */
capacity = idedisk_capacity(drive); capacity = idedisk_capacity(drive);
barrier = ide_id_has_flush_cache(id) && barrier = ide_id_has_flush_cache(id) && !drive->noflush &&
(drive->addressing == 0 || capacity <= (1ULL << 28) || (drive->addressing == 0 || capacity <= (1ULL << 28) ||
ide_id_has_flush_cache_ext(id)); ide_id_has_flush_cache_ext(id));
......
...@@ -1539,7 +1539,7 @@ static int __init ide_setup(char *s) ...@@ -1539,7 +1539,7 @@ static int __init ide_setup(char *s)
const char *hd_words[] = { const char *hd_words[] = {
"none", "noprobe", "nowerr", "cdrom", "serialize", "none", "noprobe", "nowerr", "cdrom", "serialize",
"autotune", "noautotune", "minus8", "swapdata", "bswap", "autotune", "noautotune", "minus8", "swapdata", "bswap",
"minus11", "remap", "remap63", "scsi", NULL }; "noflush", "remap", "remap63", "scsi", NULL };
unit = s[2] - 'a'; unit = s[2] - 'a';
hw = unit / MAX_DRIVES; hw = unit / MAX_DRIVES;
unit = unit % MAX_DRIVES; unit = unit % MAX_DRIVES;
...@@ -1578,6 +1578,9 @@ static int __init ide_setup(char *s) ...@@ -1578,6 +1578,9 @@ static int __init ide_setup(char *s)
case -10: /* "bswap" */ case -10: /* "bswap" */
drive->bswap = 1; drive->bswap = 1;
goto done; goto done;
case -11: /* noflush */
drive->noflush = 1;
goto done;
case -12: /* "remap" */ case -12: /* "remap" */
drive->remap_0_to_1 = 1; drive->remap_0_to_1 = 1;
goto done; goto done;
......
...@@ -571,6 +571,7 @@ typedef struct ide_drive_s { ...@@ -571,6 +571,7 @@ typedef struct ide_drive_s {
u8 waiting_for_dma; /* dma currently in progress */ u8 waiting_for_dma; /* dma currently in progress */
u8 unmask; /* okay to unmask other irqs */ u8 unmask; /* okay to unmask other irqs */
u8 bswap; /* byte swap data */ u8 bswap; /* byte swap data */
u8 noflush; /* don't attempt flushes */
u8 dsc_overlap; /* DSC overlap */ u8 dsc_overlap; /* DSC overlap */
u8 nice1; /* give potential excess bandwidth */ u8 nice1; /* give potential excess bandwidth */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册