Messages in this thread Patch in this message | | | Date | Tue, 5 Oct 2004 16:20:01 +0200 | From | Jens Axboe <> | Subject | [PATCH] ide-dma blacklist behaviour broken |
| |
Hi,
The blacklist stuff is broken. When set_using_dma() calls into ide_dma_check(), it returns ide_dma_off() for a blacklisted drive. This of course succeeds, returning success to the caller of ide_dma_check(). Not so good... It then uncondtionally calls ide_dma_on(), which turns on dma for the drive.
This moves the check to ide_dma_on() so we also catch the buggy ->ide_dma_check() defined by various chipset drivers.
--- drivers/ide/ide-dma.c~ 2004-10-05 16:11:49.631910586 +0200 +++ drivers/ide/ide-dma.c 2004-10-05 16:21:58.828330845 +0200 @@ -354,11 +355,13 @@ struct hd_driveid *id = drive->id; ide_hwif_t *hwif = HWIF(drive); - if ((id->capability & 1) && hwif->autodma) { - /* Consult the list of known "bad" drives */ - if (__ide_dma_bad_drive(drive)) - return __ide_dma_off(drive); + /* Consult the list of known "bad" drives */ + if (__ide_dma_bad_drive(drive)) { + __ide_dma_off(drive); + return 1; + } + if ((id->capability & 1) && hwif->autodma) { /* * Enable DMA on any drive that has * UltraDMA (mode 0/1/2/3/4/5/6) enabled @@ -512,6 +515,9 @@ int __ide_dma_on (ide_drive_t *drive) { + if (__ide_dma_bad_drive(drive)) + return 1; + drive->using_dma = 1; ide_toggle_bounce(drive, 1); -- Jens Axboe
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |