--- linux-2.6.16.1/drivers/ide/ide-io.c 2006-03-28 07:49:02.000000000 +0100 +++ linux-2.6.16.1-imac-sky2-rtc/drivers/ide/ide-io.c 2006-05-15 03:24:57.000000000 +0100 @@ -1525,6 +1525,8 @@ * Whack the status register, just in case * we have a leftover pending IRQ. */ + /* Ack the interrupt for ich7 - XXX possible race */ + hwif->OUTB( (hwif->INB(hwif->dma_status) |4) & ~2, hwif->dma_status); (void) hwif->INB(hwif->io_ports[IDE_STATUS_OFFSET]); #endif /* CONFIG_BLK_DEV_IDEPCI */ } @@ -1567,6 +1569,9 @@ startstop = handler(drive); spin_lock_irq(&ide_lock); + /* Ack the interrupt for ich7 - XXX possible race */ + hwif->OUTB( (hwif->INB(hwif->dma_status) |4) & ~2, hwif->dma_status); + /* * Note that handler() may have set things up for another * interrupt to occur soon, but it cannot happen until