diff options
author | Markus Armbruster | 2016-03-15 19:34:22 +0100 |
---|---|---|
committer | Markus Armbruster | 2016-03-21 21:28:59 +0100 |
commit | 4958fe5d3c77a40a5250bc820b582a29d73605ab (patch) | |
tree | e6a61f7b67c79edb9f9d3cfb01c551dc48f78d2e | |
parent | tests/libqos/pci-pc: Fix qpci_pc_iomap() to map BARs aligned (diff) | |
download | qemu-4958fe5d3c77a40a5250bc820b582a29d73605ab.tar.gz qemu-4958fe5d3c77a40a5250bc820b582a29d73605ab.tar.xz qemu-4958fe5d3c77a40a5250bc820b582a29d73605ab.zip |
ivshmem-test: Improve test case /ivshmem/single
Test state of registers after reset.
Test reading Interrupt Status clears it.
Test (invalid) read of Doorbell.
Add more comments.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <1458066895-20632-8-git-send-email-armbru@redhat.com>
-rw-r--r-- | tests/ivshmem-test.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/tests/ivshmem-test.c b/tests/ivshmem-test.c index da6ca0dd9e..a48dc49cd0 100644 --- a/tests/ivshmem-test.c +++ b/tests/ivshmem-test.c @@ -143,32 +143,41 @@ static void test_ivshmem_single(void) setup_vm(&state); s = &state; - /* valid io */ - out_reg(s, INTRMASK, 0); - in_reg(s, INTRSTATUS); - in_reg(s, IVPOSITION); + /* initial state of readable registers */ + g_assert_cmpuint(in_reg(s, INTRMASK), ==, 0); + g_assert_cmpuint(in_reg(s, INTRSTATUS), ==, 0); + g_assert_cmpuint(in_reg(s, IVPOSITION), ==, 0); + /* trigger interrupt via registers */ out_reg(s, INTRMASK, 0xffffffff); g_assert_cmpuint(in_reg(s, INTRMASK), ==, 0xffffffff); out_reg(s, INTRSTATUS, 1); - /* XXX: intercept IRQ, not seen in resp */ + /* check interrupt status */ g_assert_cmpuint(in_reg(s, INTRSTATUS), ==, 1); + /* reading clears */ + g_assert_cmpuint(in_reg(s, INTRSTATUS), ==, 0); + /* TODO intercept actual interrupt (needs qtest work) */ - /* invalid io */ + /* invalid register access */ out_reg(s, IVPOSITION, 1); + in_reg(s, DOORBELL); + + /* ring the (non-functional) doorbell */ out_reg(s, DOORBELL, 8 << 16); + /* write shared memory */ for (i = 0; i < G_N_ELEMENTS(data); i++) { data[i] = i; } qtest_memwrite(s->qtest, (uintptr_t)s->mem_base, data, sizeof(data)); + /* verify write */ for (i = 0; i < G_N_ELEMENTS(data); i++) { g_assert_cmpuint(((uint32_t *)tmpshmem)[i], ==, i); } + /* read it back and verify read */ memset(data, 0, sizeof(data)); - qtest_memread(s->qtest, (uintptr_t)s->mem_base, data, sizeof(data)); for (i = 0; i < G_N_ELEMENTS(data); i++) { g_assert_cmpuint(data[i], ==, i); |