]> rtime.felk.cvut.cz Git - lisovros/qemu_apohw.git/commitdiff
ide-test: fix failure for test_flush
authorMichael Roth <mdroth@linux.vnet.ibm.com>
Mon, 10 Jun 2013 18:23:20 +0000 (13:23 -0500)
committerAnthony Liguori <aliguori@us.ibm.com>
Fri, 14 Jun 2013 18:08:15 +0000 (13:08 -0500)
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>
tests/ide-test.c

index 828e71a38ce81297b6fd273c1f8aeb6b0b49f9c5..7e2eb9455a6e91c05284c15e6466cafeba4f6962 100644 (file)
@@ -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);