summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Roth <mdroth@linux.vnet.ibm.com>2013-06-10 13:23:20 -0500
committerAnthony Liguori <aliguori@us.ibm.com>2013-06-14 13:08:15 -0500
commit22bfa16ed3d4c9d534dcfe6f2381a654f32296b9 (patch)
tree2749defa66174233fc74ad04b555c3dcc9ac64c4
parent52bb7c6a0663b9a0ac1727f7b55811d69aaf3789 (diff)
downloadqemu-22bfa16ed3d4c9d534dcfe6f2381a654f32296b9.tar.gz
ide-test: fix failure for test_flush
bd07684aacfb61668ae2c25b7dd00b64f3d7c7f3 added a test to ensure BSY flag is set when a flush request is in flight. It does this by setting a blkdebug breakpoint on flush_to_os before issuing a CMD_FLUSH_CACHE. It then resumes CMD_FLUSH_CACHE operation and checks that BSY is unset. The actual unsetting of BSY does not occur until ide_flush_cb gets called in a bh, however, so in some cases this check will race with the actual completion. Fix this by polling the ide status register until BSY flag gets unset before we do our final sanity checks. According to f68ec8379e88502b4841a110c070e9b118d3151c this is in line with how a guest would determine whether or not the device is still busy. Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r--tests/ide-test.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/tests/ide-test.c b/tests/ide-test.c
index 828e71a38c..7e2eb9455a 100644
--- a/tests/ide-test.c
+++ b/tests/ide-test.c
@@ -455,7 +455,10 @@ static void test_flush(void)
data = inb(IDE_BASE + reg_device);
g_assert_cmpint(data & DEV, ==, 0);
- data = inb(IDE_BASE + reg_status);
+ do {
+ data = inb(IDE_BASE + reg_status);
+ } while (data & BSY);
+
assert_bit_set(data, DRDY);
assert_bit_clear(data, BSY | DF | ERR | DRQ);