• J
    ahci: properly shadow the TFD register · fac7aa7f
    John Snow 提交于
    In a real AHCI device, several S/ATA registers are mirrored or shadowed
    within the AHCI register set. These registers are not updated
    synchronously for each read access, but are instead updated after a
    Device-to-Host Register FIS packet is received. The D2H FIS contains
    the values from these registers on the device.
    
    In QEMU, by reaching directly into the device to grab these bits before
    they are "sent," we may introduce race conditions where unexpected
    values are present "before they are sent" which could cause issues for
    some guests, particularly if an attempt is made to read the PxTFD
    register prior to enabling the port, where incorrect values will be read.
    
    This patch also addresses the boot-time values for the PxTFD and PxSIG
    registers to bring them in line with the AHCI 1.3 specification.
    
    Lastly, several fields (PxTFD, PxSIG and PxSACT) are read-only,
    and any attempts to write to them should be ignored.
    Signed-off-by: NJohn Snow <jsnow@redhat.com>
    Message-id: 1408643079-30675-6-git-send-email-jsnow@redhat.com
    Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
    fac7aa7f
ahci.c 41.5 KB