mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
aio: Add "is_external" flag for event handlers
All callers pass in false, and the real external ones will switch to true in coming patches. Signed-off-by: Fam Zheng <famz@redhat.com> Reviewed-by: Jeff Cody <jcody@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
d87d01e16a
commit
dca21ef23b
17 changed files with 130 additions and 84 deletions
|
@ -118,6 +118,12 @@ static void *test_acquire_thread(void *opaque)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static void set_event_notifier(AioContext *ctx, EventNotifier *notifier,
|
||||
EventNotifierHandler *handler)
|
||||
{
|
||||
aio_set_event_notifier(ctx, notifier, false, handler);
|
||||
}
|
||||
|
||||
static void dummy_notifier_read(EventNotifier *unused)
|
||||
{
|
||||
g_assert(false); /* should never be invoked */
|
||||
|
@ -131,7 +137,7 @@ static void test_acquire(void)
|
|||
|
||||
/* Dummy event notifier ensures aio_poll() will block */
|
||||
event_notifier_init(¬ifier, false);
|
||||
aio_set_event_notifier(ctx, ¬ifier, dummy_notifier_read);
|
||||
set_event_notifier(ctx, ¬ifier, dummy_notifier_read);
|
||||
g_assert(!aio_poll(ctx, false)); /* consume aio_notify() */
|
||||
|
||||
qemu_mutex_init(&data.start_lock);
|
||||
|
@ -149,7 +155,7 @@ static void test_acquire(void)
|
|||
aio_context_release(ctx);
|
||||
|
||||
qemu_thread_join(&thread);
|
||||
aio_set_event_notifier(ctx, ¬ifier, NULL);
|
||||
set_event_notifier(ctx, ¬ifier, NULL);
|
||||
event_notifier_cleanup(¬ifier);
|
||||
|
||||
g_assert(data.thread_acquired);
|
||||
|
@ -308,11 +314,11 @@ static void test_set_event_notifier(void)
|
|||
{
|
||||
EventNotifierTestData data = { .n = 0, .active = 0 };
|
||||
event_notifier_init(&data.e, false);
|
||||
aio_set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
g_assert(!aio_poll(ctx, false));
|
||||
g_assert_cmpint(data.n, ==, 0);
|
||||
|
||||
aio_set_event_notifier(ctx, &data.e, NULL);
|
||||
set_event_notifier(ctx, &data.e, NULL);
|
||||
g_assert(!aio_poll(ctx, false));
|
||||
g_assert_cmpint(data.n, ==, 0);
|
||||
event_notifier_cleanup(&data.e);
|
||||
|
@ -322,7 +328,7 @@ static void test_wait_event_notifier(void)
|
|||
{
|
||||
EventNotifierTestData data = { .n = 0, .active = 1 };
|
||||
event_notifier_init(&data.e, false);
|
||||
aio_set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
while (aio_poll(ctx, false));
|
||||
g_assert_cmpint(data.n, ==, 0);
|
||||
g_assert_cmpint(data.active, ==, 1);
|
||||
|
@ -336,7 +342,7 @@ static void test_wait_event_notifier(void)
|
|||
g_assert_cmpint(data.n, ==, 1);
|
||||
g_assert_cmpint(data.active, ==, 0);
|
||||
|
||||
aio_set_event_notifier(ctx, &data.e, NULL);
|
||||
set_event_notifier(ctx, &data.e, NULL);
|
||||
g_assert(!aio_poll(ctx, false));
|
||||
g_assert_cmpint(data.n, ==, 1);
|
||||
|
||||
|
@ -347,7 +353,7 @@ static void test_flush_event_notifier(void)
|
|||
{
|
||||
EventNotifierTestData data = { .n = 0, .active = 10, .auto_set = true };
|
||||
event_notifier_init(&data.e, false);
|
||||
aio_set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
while (aio_poll(ctx, false));
|
||||
g_assert_cmpint(data.n, ==, 0);
|
||||
g_assert_cmpint(data.active, ==, 10);
|
||||
|
@ -363,7 +369,7 @@ static void test_flush_event_notifier(void)
|
|||
g_assert_cmpint(data.active, ==, 0);
|
||||
g_assert(!aio_poll(ctx, false));
|
||||
|
||||
aio_set_event_notifier(ctx, &data.e, NULL);
|
||||
set_event_notifier(ctx, &data.e, NULL);
|
||||
g_assert(!aio_poll(ctx, false));
|
||||
event_notifier_cleanup(&data.e);
|
||||
}
|
||||
|
@ -374,7 +380,7 @@ static void test_wait_event_notifier_noflush(void)
|
|||
EventNotifierTestData dummy = { .n = 0, .active = 1 };
|
||||
|
||||
event_notifier_init(&data.e, false);
|
||||
aio_set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
|
||||
g_assert(!aio_poll(ctx, false));
|
||||
g_assert_cmpint(data.n, ==, 0);
|
||||
|
@ -387,7 +393,7 @@ static void test_wait_event_notifier_noflush(void)
|
|||
|
||||
/* An active event notifier forces aio_poll to look at EventNotifiers. */
|
||||
event_notifier_init(&dummy.e, false);
|
||||
aio_set_event_notifier(ctx, &dummy.e, event_ready_cb);
|
||||
set_event_notifier(ctx, &dummy.e, event_ready_cb);
|
||||
|
||||
event_notifier_set(&data.e);
|
||||
g_assert(aio_poll(ctx, false));
|
||||
|
@ -407,10 +413,10 @@ static void test_wait_event_notifier_noflush(void)
|
|||
g_assert_cmpint(dummy.n, ==, 1);
|
||||
g_assert_cmpint(dummy.active, ==, 0);
|
||||
|
||||
aio_set_event_notifier(ctx, &dummy.e, NULL);
|
||||
set_event_notifier(ctx, &dummy.e, NULL);
|
||||
event_notifier_cleanup(&dummy.e);
|
||||
|
||||
aio_set_event_notifier(ctx, &data.e, NULL);
|
||||
set_event_notifier(ctx, &data.e, NULL);
|
||||
g_assert(!aio_poll(ctx, false));
|
||||
g_assert_cmpint(data.n, ==, 2);
|
||||
|
||||
|
@ -428,7 +434,7 @@ static void test_timer_schedule(void)
|
|||
* an fd to wait on. Fixing this breaks other tests. So create a dummy one.
|
||||
*/
|
||||
event_notifier_init(&e, false);
|
||||
aio_set_event_notifier(ctx, &e, dummy_io_handler_read);
|
||||
set_event_notifier(ctx, &e, dummy_io_handler_read);
|
||||
aio_poll(ctx, false);
|
||||
|
||||
aio_timer_init(ctx, &data.timer, data.clock_type,
|
||||
|
@ -467,7 +473,7 @@ static void test_timer_schedule(void)
|
|||
g_assert(!aio_poll(ctx, false));
|
||||
g_assert_cmpint(data.n, ==, 2);
|
||||
|
||||
aio_set_event_notifier(ctx, &e, NULL);
|
||||
set_event_notifier(ctx, &e, NULL);
|
||||
event_notifier_cleanup(&e);
|
||||
|
||||
timer_del(&data.timer);
|
||||
|
@ -638,11 +644,11 @@ static void test_source_set_event_notifier(void)
|
|||
{
|
||||
EventNotifierTestData data = { .n = 0, .active = 0 };
|
||||
event_notifier_init(&data.e, false);
|
||||
aio_set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
while (g_main_context_iteration(NULL, false));
|
||||
g_assert_cmpint(data.n, ==, 0);
|
||||
|
||||
aio_set_event_notifier(ctx, &data.e, NULL);
|
||||
set_event_notifier(ctx, &data.e, NULL);
|
||||
while (g_main_context_iteration(NULL, false));
|
||||
g_assert_cmpint(data.n, ==, 0);
|
||||
event_notifier_cleanup(&data.e);
|
||||
|
@ -652,7 +658,7 @@ static void test_source_wait_event_notifier(void)
|
|||
{
|
||||
EventNotifierTestData data = { .n = 0, .active = 1 };
|
||||
event_notifier_init(&data.e, false);
|
||||
aio_set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
while (g_main_context_iteration(NULL, false));
|
||||
g_assert_cmpint(data.n, ==, 0);
|
||||
g_assert_cmpint(data.active, ==, 1);
|
||||
|
@ -666,7 +672,7 @@ static void test_source_wait_event_notifier(void)
|
|||
g_assert_cmpint(data.n, ==, 1);
|
||||
g_assert_cmpint(data.active, ==, 0);
|
||||
|
||||
aio_set_event_notifier(ctx, &data.e, NULL);
|
||||
set_event_notifier(ctx, &data.e, NULL);
|
||||
while (g_main_context_iteration(NULL, false));
|
||||
g_assert_cmpint(data.n, ==, 1);
|
||||
|
||||
|
@ -677,7 +683,7 @@ static void test_source_flush_event_notifier(void)
|
|||
{
|
||||
EventNotifierTestData data = { .n = 0, .active = 10, .auto_set = true };
|
||||
event_notifier_init(&data.e, false);
|
||||
aio_set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
while (g_main_context_iteration(NULL, false));
|
||||
g_assert_cmpint(data.n, ==, 0);
|
||||
g_assert_cmpint(data.active, ==, 10);
|
||||
|
@ -693,7 +699,7 @@ static void test_source_flush_event_notifier(void)
|
|||
g_assert_cmpint(data.active, ==, 0);
|
||||
g_assert(!g_main_context_iteration(NULL, false));
|
||||
|
||||
aio_set_event_notifier(ctx, &data.e, NULL);
|
||||
set_event_notifier(ctx, &data.e, NULL);
|
||||
while (g_main_context_iteration(NULL, false));
|
||||
event_notifier_cleanup(&data.e);
|
||||
}
|
||||
|
@ -704,7 +710,7 @@ static void test_source_wait_event_notifier_noflush(void)
|
|||
EventNotifierTestData dummy = { .n = 0, .active = 1 };
|
||||
|
||||
event_notifier_init(&data.e, false);
|
||||
aio_set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
set_event_notifier(ctx, &data.e, event_ready_cb);
|
||||
|
||||
while (g_main_context_iteration(NULL, false));
|
||||
g_assert_cmpint(data.n, ==, 0);
|
||||
|
@ -717,7 +723,7 @@ static void test_source_wait_event_notifier_noflush(void)
|
|||
|
||||
/* An active event notifier forces aio_poll to look at EventNotifiers. */
|
||||
event_notifier_init(&dummy.e, false);
|
||||
aio_set_event_notifier(ctx, &dummy.e, event_ready_cb);
|
||||
set_event_notifier(ctx, &dummy.e, event_ready_cb);
|
||||
|
||||
event_notifier_set(&data.e);
|
||||
g_assert(g_main_context_iteration(NULL, false));
|
||||
|
@ -737,10 +743,10 @@ static void test_source_wait_event_notifier_noflush(void)
|
|||
g_assert_cmpint(dummy.n, ==, 1);
|
||||
g_assert_cmpint(dummy.active, ==, 0);
|
||||
|
||||
aio_set_event_notifier(ctx, &dummy.e, NULL);
|
||||
set_event_notifier(ctx, &dummy.e, NULL);
|
||||
event_notifier_cleanup(&dummy.e);
|
||||
|
||||
aio_set_event_notifier(ctx, &data.e, NULL);
|
||||
set_event_notifier(ctx, &data.e, NULL);
|
||||
while (g_main_context_iteration(NULL, false));
|
||||
g_assert_cmpint(data.n, ==, 2);
|
||||
|
||||
|
@ -759,7 +765,7 @@ static void test_source_timer_schedule(void)
|
|||
* an fd to wait on. Fixing this breaks other tests. So create a dummy one.
|
||||
*/
|
||||
event_notifier_init(&e, false);
|
||||
aio_set_event_notifier(ctx, &e, dummy_io_handler_read);
|
||||
set_event_notifier(ctx, &e, dummy_io_handler_read);
|
||||
do {} while (g_main_context_iteration(NULL, false));
|
||||
|
||||
aio_timer_init(ctx, &data.timer, data.clock_type,
|
||||
|
@ -784,7 +790,7 @@ static void test_source_timer_schedule(void)
|
|||
g_assert_cmpint(data.n, ==, 2);
|
||||
g_assert(qemu_clock_get_ns(data.clock_type) > expiry);
|
||||
|
||||
aio_set_event_notifier(ctx, &e, NULL);
|
||||
set_event_notifier(ctx, &e, NULL);
|
||||
event_notifier_cleanup(&e);
|
||||
|
||||
timer_del(&data.timer);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue