summaryrefslogtreecommitdiffstats
path: root/tests/libqos/ahci.c
diff options
context:
space:
mode:
authorJohn Snow2015-07-04 08:06:03 +0200
committerJohn Snow2015-07-04 08:06:03 +0200
commit4de484698bdda6c5e093dfbe4368cdb364fdf87f (patch)
tree186a5b6ec11243051650696d965920eed76fe502 /tests/libqos/ahci.c
parentlibqos/ahci: add NCQ frame support (diff)
downloadqemu-4de484698bdda6c5e093dfbe4368cdb364fdf87f.tar.gz
qemu-4de484698bdda6c5e093dfbe4368cdb364fdf87f.tar.xz
qemu-4de484698bdda6c5e093dfbe4368cdb364fdf87f.zip
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
Diffstat (limited to 'tests/libqos/ahci.c')
-rw-r--r--tests/libqos/ahci.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/tests/libqos/ahci.c b/tests/libqos/ahci.c
index 9a4d510fec..da02e2e4c7 100644
--- a/tests/libqos/ahci.c
+++ b/tests/libqos/ahci.c
@@ -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)