summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJohn Snow <jsnow@redhat.com>2015-07-04 02:06:03 -0400
committerJohn Snow <jsnow@redhat.com>2015-07-04 02:06:03 -0400
commit4de484698bdda6c5e093dfbe4368cdb364fdf87f (patch)
tree186a5b6ec11243051650696d965920eed76fe502
parentcb45304108ab733aaf2e4351e77cb6d07ac88fd5 (diff)
downloadfocaccia-qemu-4de484698bdda6c5e093dfbe4368cdb364fdf87f.tar.gz
focaccia-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
-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)