Hi, I have a problem that our hardware (Celleb) cannot exit from ata_host_intr() when ATAPI DMA data read fails. This PATA controller sets bit2 (ATA_DMA_INTR) of BMDMA status register after it finished DMA data read. If ATAPI DMA data read fails due to no CDROM, it doesn't transfer data and generates an interrupt. In this case, bit2 of BMDMA status register is not set. libata ISR (ata_host_intr()) checks this bit by the following code: /* if it's not our irq... */ if (!(host_stat & ATA_DMA_INTR)) goto idle_irq; Our driver always hits this check. As a result, ISR loops forever. I temporarily use libata by removing this check. I wonder if this check is necessary. In drivers/ide, cdrom_decode_status() seems to check IDE STATUS register instead of BMDMA status register. If there is no problem, I hope this check will be removed. Best regards, Akira Iguchi - To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html