]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/block/floppy.c
floppy: tolerate DMA channel unavailability
[karo-tx-linux.git] / drivers / block / floppy.c
index 80483aac4cc9b6a166f9ed9c059fb8ec00c8806f..72803a3585ffed5b01aab41e7cafff72b7d4b938 100644 (file)
@@ -4388,11 +4388,15 @@ static int floppy_grab_irq_and_dma(void)
        if (fd_request_dma()) {
                DPRINT("Unable to grab DMA%d for the floppy driver\n",
                       FLOPPY_DMA);
-               fd_free_irq();
-               spin_lock_irqsave(&floppy_usage_lock, flags);
-               usage_count--;
-               spin_unlock_irqrestore(&floppy_usage_lock, flags);
-               return -1;
+               if (can_use_virtual_dma & 2)
+                       use_virtual_dma = can_use_virtual_dma = 1;
+               if (!(can_use_virtual_dma & 1)) {
+                       fd_free_irq();
+                       spin_lock_irqsave(&floppy_usage_lock, flags);
+                       usage_count--;
+                       spin_unlock_irqrestore(&floppy_usage_lock, flags);
+                       return -1;
+               }
        }
 
        for (fdc = 0; fdc < N_FDC; fdc++) {