• Bartlomiej Zolnierkiewicz's avatar
    ide: don't allow DMA to be enabled if CONFIG_IDEDMA_{ICS,PCI}_AUTO=n · 6f5050a9
    Bartlomiej Zolnierkiewicz authored
    For CONFIG_IDEDMA_{ICS,PCI}_AUTO=n and/or "ide=nodma" option the host/device
    are not programmed for DMA and it is also explicitly disabled by ide_set_dma()
    (->ide_dma_check returns "-1").  However the code responsible for manually
    enabling DMA ("hdparm -d 1") has a bug which results in DMA being erroneously
    enabled - ide_set_dma() incorrectly passes "0" return value to set_using_dma().
    This may work if BIOS/firmware configured the host/device for DMA and chipset
    allows independent configuration of DMA/PIO modes but won't work after suspend
    and is generally unsafe on many chipsets (possibly including data corruption
    if the same registers are used for DMA/PIO timings).
    
    This patch fixes kernel bugzilla bug #8169 (piix host driver fixes for
    setting PIO mode exposed the problem described above).  The side-effect of
    the fix is that some rare configuration may be forced to PIO mode when DMA
    mode was previously used - this is addressed by the next patch which removes
    CONFIG_IDEDMA_{PCI,ICS}_AUTO config option completely.
    
    Thanks goes out to Patrick Horn for reporting the issue, narrowing it down
    to the specific commit and testing the fix.  Also thanks to Sergei Shtylyov
    for help in debugging the problem.
    
    Cc: Patrick Horn <phrh@yahoo.com>
    Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
    Cc: Russell King <rmk+lkml@arm.linux.org.uk>
    Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    6f5050a9
ide-dma.c 25.1 KB