libqos/ahci: edit wait to be ncq aware
The wait command should check to make sure SACT is clear as well as the Command Issue register. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Message-id: 1435016308-6150-12-git-send-email-jsnow@redhat.com
This commit is contained in:
parent
cb45304108
commit
4de484698b
@ -908,11 +908,15 @@ void ahci_command_wait(AHCIQState *ahci, AHCICommand *cmd)
|
||||
/* We can't rely on STS_BSY until the command has started processing.
|
||||
* Therefore, we also use the Command Issue bit as indication of
|
||||
* a command in-flight. */
|
||||
while (BITSET(ahci_px_rreg(ahci, cmd->port, AHCI_PX_TFD),
|
||||
AHCI_PX_TFD_STS_BSY) ||
|
||||
BITSET(ahci_px_rreg(ahci, cmd->port, AHCI_PX_CI), (1 << cmd->slot))) {
|
||||
|
||||
#define RSET(REG, MASK) (BITSET(ahci_px_rreg(ahci, cmd->port, (REG)), (MASK)))
|
||||
|
||||
while (RSET(AHCI_PX_TFD, AHCI_PX_TFD_STS_BSY) ||
|
||||
RSET(AHCI_PX_CI, 1 << cmd->slot) ||
|
||||
(cmd->props->ncq && RSET(AHCI_PX_SACT, 1 << cmd->slot))) {
|
||||
usleep(50);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void ahci_command_issue(AHCIQState *ahci, AHCICommand *cmd)
|
||||
|
Loading…
Reference in New Issue
Block a user