Don't return early when we're not DMAing. This causes the bus master status
to be read/acknowledged (new) and the status to be read (like before in that case) which helps discarding spurious interrupts on one controller I have that would otherwise cause an interrupt storm as the bus master interrupt would never be acknowledged. The ATA stack will discard the interrupt if it's not expecting a transfer, so no real harm done. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35083 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -201,14 +201,6 @@ ata_adapter_inthand(void *arg)
|
|||||||
|
|
||||||
TRACE_INT("ata_adapter_inthand\n");
|
TRACE_INT("ata_adapter_inthand\n");
|
||||||
|
|
||||||
if (!channel->dmaing) {
|
|
||||||
// this could be a spurious interrupt, so read status
|
|
||||||
// register unconditionally to acknowledge those
|
|
||||||
TRACE_INT("ata_adapter_inthand: not DMA\n");
|
|
||||||
pci->read_io_8(device, channel->command_block_base + 7);
|
|
||||||
return B_UNHANDLED_INTERRUPT;
|
|
||||||
}
|
|
||||||
|
|
||||||
// need to read bus master status first, because some controllers
|
// need to read bus master status first, because some controllers
|
||||||
// will clear the interrupt status bit once ATA status is read
|
// will clear the interrupt status bit once ATA status is read
|
||||||
statusBM = pci->read_io_8(device, channel->bus_master_base
|
statusBM = pci->read_io_8(device, channel->bus_master_base
|
||||||
|
|||||||
Reference in New Issue
Block a user