mirror of
https://github.com/xemu-project/xemu.git
synced 2024-12-25 05:15:28 +00:00
ivshmem-test: Clean up wait for devices to become operational
test_ivshmem_server() waits until the first byte in BAR 2 contains the 0x42 we put into shared memory. Works because the byte reads zero until the device maps the shared memory gotten from the server. Check the IVPosition register instead: it's initially -1, and becomes non-negative right when the device maps the share memory, so no change, just cleaner, because it's what guest software is supposed to do. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <1458066895-20632-9-git-send-email-armbru@redhat.com>
This commit is contained in:
parent
4958fe5d3c
commit
14c5d49ab3
@ -301,7 +301,6 @@ static void test_ivshmem_server(bool msi)
|
||||
int nvectors = 2;
|
||||
guint64 end_time = g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND;
|
||||
|
||||
memset(tmpshmem, 0x42, TMPSHMSIZE);
|
||||
ret = ivshmem_server_init(&server, tmpserver, tmpshm, true,
|
||||
TMPSHMSIZE, nvectors,
|
||||
g_test_verbose());
|
||||
@ -315,9 +314,9 @@ static void test_ivshmem_server(bool msi)
|
||||
setup_vm_with_server(&state2, nvectors, msi);
|
||||
s2 = &state2;
|
||||
|
||||
/* check state before server sends stuff */
|
||||
g_assert_cmpuint(in_reg(s1, IVPOSITION), ==, 0xffffffff);
|
||||
g_assert_cmpuint(in_reg(s2, IVPOSITION), ==, 0xffffffff);
|
||||
|
||||
g_assert_cmpuint(qtest_readb(s1->qtest, (uintptr_t)s1->mem_base), ==, 0x00);
|
||||
|
||||
thread.server = &server;
|
||||
@ -326,12 +325,11 @@ static void test_ivshmem_server(bool msi)
|
||||
thread.thread = g_thread_new("ivshmem-server", server_thread, &thread);
|
||||
g_assert(thread.thread != NULL);
|
||||
|
||||
/* waiting until mapping is done */
|
||||
/* waiting for devices to become operational */
|
||||
while (g_get_monotonic_time() < end_time) {
|
||||
g_usleep(1000);
|
||||
|
||||
if (qtest_readb(s1->qtest, (uintptr_t)s1->mem_base) == 0x42 &&
|
||||
qtest_readb(s2->qtest, (uintptr_t)s2->mem_base) == 0x42) {
|
||||
if ((int)in_reg(s1, IVPOSITION) >= 0 &&
|
||||
(int)in_reg(s2, IVPOSITION) >= 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user