diff mbox

[PULL,21/26] ide-test: Add FLUSH CACHE test case

Message ID 1370606325-10680-22-git-send-email-stefanha@redhat.com
State New
Headers show

Commit Message

Stefan Hajnoczi June 7, 2013, 11:58 a.m. UTC
From: Kevin Wolf <kwolf@redhat.com>

This checks in particular that BSY is set while the flush request is in
flight.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 tests/ide-test.c | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

Comments

Peter Maydell June 14, 2013, 5:54 p.m. UTC | #1
On 7 June 2013 12:58, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> From: Kevin Wolf <kwolf@redhat.com>
>
> This checks in particular that BSY is set while the flush request is in
> flight.

This test doesn't seem to pass. At commit bd07684aac
(where the test landed):

cam-vm-266:precise:qemu$ (cd build/x86;
QTEST_QEMU_BINARY=i386-softmmu/qemu-system-i386
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$((RANDOM % 255 + 1))} gtester -k
--verbose -m=quick tests/ide-test)
TEST: tests/ide-test... (pid=25118)
  /i386/ide/identify:                                                  OK
  /i386/ide/bmdma/setup:                                               OK
  /i386/ide/bmdma/simple_rw:                                           OK
  /i386/ide/bmdma/short_prdt:                                          OK
  /i386/ide/bmdma/long_prdt:                                           OK
  /i386/ide/bmdma/teardown:                                            OK
  /i386/ide/flush:
blkdebug: Suspended request 'A'
blkdebug: Resuming request 'A'
**
ERROR:/home/petmay01/linaro/qemu-from-laptop/qemu/tests/ide-test.c:460:test_flush:
assertion failed ((data) & (BSY | DF | ERR | DRQ) == 0): (0x00000080
== 0x00000000)
FAIL
GTester: last random seed: R02S67ac87128346f4ba02226525fc3ecccf
(pid=25136)
FAIL: tests/ide-test


thanks
-- PMM
Peter Maydell June 14, 2013, 6:11 p.m. UTC | #2
On 14 June 2013 18:54, Peter Maydell <peter.maydell@linaro.org> wrote:
> On 7 June 2013 12:58, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>> From: Kevin Wolf <kwolf@redhat.com>
>>
>> This checks in particular that BSY is set while the flush request is in
>> flight.
>
> This test doesn't seem to pass.

> ERROR:/home/petmay01/linaro/qemu-from-laptop/qemu/tests/ide-test.c:460:test_flush:
> assertion failed ((data) & (BSY | DF | ERR | DRQ) == 0): (0x00000080
> == 0x00000000)

...fixed by http://patchwork.ozlabs.org/patch/250334/

thanks
-- PMM
Anthony Liguori June 14, 2013, 6:18 p.m. UTC | #3
Peter Maydell <peter.maydell@linaro.org> writes:

> On 14 June 2013 18:54, Peter Maydell <peter.maydell@linaro.org> wrote:
>> On 7 June 2013 12:58, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>>> From: Kevin Wolf <kwolf@redhat.com>
>>>
>>> This checks in particular that BSY is set while the flush request is in
>>> flight.
>>
>> This test doesn't seem to pass.
>
>> ERROR:/home/petmay01/linaro/qemu-from-laptop/qemu/tests/ide-test.c:460:test_flush:
>> assertion failed ((data) & (BSY | DF | ERR | DRQ) == 0): (0x00000080
>> == 0x00000000)
>
> ...fixed by http://patchwork.ozlabs.org/patch/250334/

I'm testing it myself now.  Since it's already in the block tree, I'll
push it directly as it's blocking my queue.

Unless Kevin or Stefan are planning on sending a pull request today of
course.

Regards,

Anthony Liguori

>
> thanks
> -- PMM
Stefan Hajnoczi June 17, 2013, 12:45 p.m. UTC | #4
On Fri, Jun 14, 2013 at 01:18:44PM -0500, Anthony Liguori wrote:
> Peter Maydell <peter.maydell@linaro.org> writes:
> 
> > On 14 June 2013 18:54, Peter Maydell <peter.maydell@linaro.org> wrote:
> >> On 7 June 2013 12:58, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> >>> From: Kevin Wolf <kwolf@redhat.com>
> >>>
> >>> This checks in particular that BSY is set while the flush request is in
> >>> flight.
> >>
> >> This test doesn't seem to pass.
> >
> >> ERROR:/home/petmay01/linaro/qemu-from-laptop/qemu/tests/ide-test.c:460:test_flush:
> >> assertion failed ((data) & (BSY | DF | ERR | DRQ) == 0): (0x00000080
> >> == 0x00000000)
> >
> > ...fixed by http://patchwork.ozlabs.org/patch/250334/
> 
> I'm testing it myself now.  Since it's already in the block tree, I'll
> push it directly as it's blocking my queue.
> 
> Unless Kevin or Stefan are planning on sending a pull request today of
> course.

Thanks for merging mdroth's fix!

Stefan
diff mbox

Patch

diff --git a/tests/ide-test.c b/tests/ide-test.c
index 1c31a2e..828e71a 100644
--- a/tests/ide-test.c
+++ b/tests/ide-test.c
@@ -77,6 +77,7 @@  enum {
 enum {
     CMD_READ_DMA    = 0xc8,
     CMD_WRITE_DMA   = 0xca,
+    CMD_FLUSH_CACHE = 0xe7,
     CMD_IDENTIFY    = 0xec,
 
     CMDF_ABORT      = 0x100,
@@ -424,6 +425,43 @@  static void test_identify(void)
     ide_test_quit();
 }
 
+static void test_flush(void)
+{
+    uint8_t data;
+
+    ide_test_start(
+        "-vnc none "
+        "-drive file=blkdebug::%s,if=ide,cache=writeback",
+        tmp_path);
+
+    /* Delay the completion of the flush request until we explicitly do it */
+    qmp("{'execute':'human-monitor-command', 'arguments': { "
+        "'command-line': 'qemu-io ide0-hd0 \"break flush_to_os A\"'} }");
+
+    /* FLUSH CACHE command on device 0*/
+    outb(IDE_BASE + reg_device, 0);
+    outb(IDE_BASE + reg_command, CMD_FLUSH_CACHE);
+
+    /* Check status while request is in flight*/
+    data = inb(IDE_BASE + reg_status);
+    assert_bit_set(data, BSY | DRDY);
+    assert_bit_clear(data, DF | ERR | DRQ);
+
+    /* Complete the command */
+    qmp("{'execute':'human-monitor-command', 'arguments': { "
+        "'command-line': 'qemu-io ide0-hd0 \"resume A\"'} }");
+
+    /* Check registers */
+    data = inb(IDE_BASE + reg_device);
+    g_assert_cmpint(data & DEV, ==, 0);
+
+    data = inb(IDE_BASE + reg_status);
+    assert_bit_set(data, DRDY);
+    assert_bit_clear(data, BSY | DF | ERR | DRQ);
+
+    ide_test_quit();
+}
+
 int main(int argc, char **argv)
 {
     const char *arch = qtest_get_arch();
@@ -454,6 +492,8 @@  int main(int argc, char **argv)
     qtest_add_func("/ide/bmdma/long_prdt", test_bmdma_long_prdt);
     qtest_add_func("/ide/bmdma/teardown", test_bmdma_teardown);
 
+    qtest_add_func("/ide/flush", test_flush);
+
     ret = g_test_run();
 
     /* Cleanup */