On 21/03/2018 01:35, John Snow wrote: >> The ATAPI_INT_REASON_IO interrupt is raised when I/O starts, but in the >> AHCI case ide_set_irq was actually called at the end of a mutual recursion. >> Move it early, with the side effect that ide_transfer_start becomes a tail >> call in ide_atapi_cmd_reply_end. >> > Do you know in which spec it specifies that we should interrupt? > > Seems okay, but I wanted to double check the wording in the spec (was > looking in scsi MMC and ATA8) and couldn't find it quickly.
I have an "Interrupt Reason" field in my copy of the ATA/ATAPI spec: --- 6.4.3 Input/Output (I/O) bit The Input/Output bit shall be cleared to zero if the transfer is to the device. The Input/Output bit shall be set to one if the transfer is to the host. In ATA/ATAPI-7 this bit was documented as the I/O bit. --- I suppose the commit message needs some improvement---the point is that since this is a READ, the I/O bit must be set before we start the transfer. It can be done after the disk I/O starts, but it must be done before the PIO transfer starts; in other words, the bug is only there for AHCI. Paolo