qemu-cr16/tests
Stefan Hajnoczi ded29e64c6 aio-posix: integrate fdmon into glib event loop
AioContext's glib integration only supports ppoll(2) file descriptor
monitoring. epoll(7) and io_uring(7) disable themselves and switch back
to ppoll(2) when the glib event loop is used. The main loop thread
cannot use epoll(7) or io_uring(7) because it always uses the glib event
loop.

Future QEMU features may require io_uring(7). One example is uring_cmd
support in FUSE exports. Each feature could create its own io_uring(7)
context and integrate it into the event loop, but this is inefficient
due to extra syscalls. It would be more efficient to reuse the
AioContext's existing fdmon-io_uring.c io_uring(7) context because
fdmon-io_uring.c will already be active on systems where Linux io_uring
is available.

In order to keep fdmon-io_uring.c's AioContext operational even when the
glib event loop is used, extend FDMonOps with an API similar to
GSourceFuncs so that file descriptor monitoring can integrate into the
glib event loop.

A quick summary of the GSourceFuncs API:
- prepare() is called each event loop iteration before waiting for file
  descriptors and timers.
- check() is called to determine whether events are ready to be
  dispatched after waiting.
- dispatch() is called to process events.

More details here: https://docs.gtk.org/glib/struct.SourceFuncs.html

Move the ppoll(2)-specific code from aio-posix.c into fdmon-poll.c and
also implement epoll(7)- and io_uring(7)-specific file descriptor
monitoring code for glib event loops.

Note that it's still faster to use aio_poll() rather than the glib event
loop since glib waits for file descriptor activity with ppoll(2) and
does not support adaptive polling. But at least epoll(7) and io_uring(7)
now work in glib event loops.

Splitting this into multiple commits without temporarily breaking
AioContext proved difficult so this commit makes all the changes. The
next commit will remove the aio_context_use_g_source() API because it is
no longer needed.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-ID: <20251104022933.618123-7-stefanha@redhat.com>
[kwolf: Build fixes; fix AioContext.list_lock use after destroy]
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2025-11-11 22:04:53 +01:00
..
bench tests/bench: Rename test_akcipher_keys.inc -> test_akcipher_keys.c.inc 2024-09-20 10:08:24 +03:00
data tests/qtest/bios-tables-test: Update DSDT blobs after GPEX _DSM change 2025-11-09 08:24:29 -05:00
decode decodetree: Infer argument set before inferring format 2025-07-25 10:31:45 +01:00
docker rust: add back to Ubuntu 22.04 jobs 2025-11-04 17:13:25 +01:00
fp fpu: allow flushing of output denormals to be after rounding 2025-02-11 16:22:07 +00:00
functional tests/functional: Mark another MIPS replay test as flaky 2025-11-10 11:58:19 +01:00
guest-debug tests, scripts: Don't import print_function from __future__ 2025-09-16 17:31:53 +01:00
image-fuzzer
include meson: fix Windows build 2025-06-16 13:16:27 -04:00
keys
lcitool rust: add back to Ubuntu 22.04 jobs 2025-11-04 17:13:25 +01:00
migration-stress guestperf: Add test result data into report 2025-02-14 15:19:07 -03:00
multiboot
perf/block/qcow2
qapi-schema qapi: Add documentation format validation 2025-11-04 13:55:27 +01:00
qemu-iotests migration: Introduce POSTCOPY_DEVICE state 2025-11-03 16:04:10 -05:00
qtest tests/qtest/bios-tables-test: Update DSDT blobs after GPEX _DSM change 2025-11-09 08:24:29 -05:00
rocker
tcg tests/tcg/s390x: Test SET CLOCK COMPARATOR 2025-11-03 08:27:59 +01:00
tracetool tracetool/syslog: add Rust support 2025-10-01 11:22:07 -04:00
tsan system/physmem: Drop 'cpu_' prefix in Physical Memory API 2025-10-07 05:03:56 +02:00
uefi-test-tools uefi-test-tools:: Add LoongArch64 support 2025-06-01 06:38:53 -04:00
unit aio-posix: integrate fdmon into glib event loop 2025-11-11 22:04:53 +01:00
vm tests/freebsd: enable Rust 2025-09-30 19:33:25 +04:00
dbus-vmstate-daemon.sh
Makefile.include tests: Evict stale files in the functional download cache after a while 2025-10-16 17:44:32 +02:00
meson.build tracetool: add test suite for tracetool with reference output 2025-09-16 13:31:40 -04:00
test-qht-par.c
vhost-user-bridge.c