On 26/08/2015 01:45, John Snow wrote: > IDEState's io_buffer_offset was originally added to keep track of offsets > in AHCI rather exclusively, but it was added to IDEState instead of an > AHCI-specific structure.
Interesting to see something weird turn into feature. :) Reviewed-by: Paolo Bonzini <pbonz...@redhat.com> > AHCI fakes all PIO transfers using DMA and a scatter-gather list. When > the core or atapi layers invoke HBA-specific mechanisms for transfers, > they do not always know that it is being backed by DMA or a sglist, so > this offset is not always updated by the HBA code everywhere. > > If we modify it in dma_buf_commit, however, any HBA that needs to use > this offset to manage operating on only part of a sglist will have > access to it. > > This will fix ATAPI PIO transfers performed through the AHCI HBA, > which were previously not modifying this value appropriately. > > This will fix ATAPI PIO transfers larger than one sector.