Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d4681f6 authored by Jeff Garzik's avatar Jeff Garzik
Browse files

[libata] fix oops on non-DMA bmdma hardware



Alan noted: "bmdma may be zero but the bmdma_irq_clear function gets
called even in this case during pure PIO operation. Check we have a
bmdma before we use it."

I fixed this by adding a check for zero.  While was I there, I fixed the
non-standard indentation of the small function's code.

Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 17bb34a3
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -4202,14 +4202,17 @@ void ata_bmdma_setup(struct ata_queued_cmd *qc)

void ata_bmdma_irq_clear(struct ata_port *ap)
{
	if (!ap->ioaddr.bmdma_addr)
		return;

	if (ap->flags & ATA_FLAG_MMIO) {
        void __iomem *mmio = ((void __iomem *) ap->ioaddr.bmdma_addr) + ATA_DMA_STATUS;
		void __iomem *mmio =
		      ((void __iomem *) ap->ioaddr.bmdma_addr) + ATA_DMA_STATUS;
		writeb(readb(mmio), mmio);
	} else {
		unsigned long addr = ap->ioaddr.bmdma_addr + ATA_DMA_STATUS;
		outb(inb(addr), addr);
	}

}