qemu-cr16/tests/unit
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
..
check-block-qdict.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
check-qdict.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
check-qjson.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
check-qlist.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
check-qlit.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
check-qnull.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
check-qnum.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
check-qobject.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
check-qom-interface.c qom: Make InterfaceInfo[] uses const 2025-04-25 17:00:41 +02:00
check-qom-proplist.c qom: Make InterfaceInfo[] uses const 2025-04-25 17:00:41 +02:00
check-qstring.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
crypto-tls-psk-helpers.c crypto: Remove 'crypto-tls-x509-helpers.h' from crypto-tls-psk-helpers.c 2024-07-24 10:39:10 +01:00
crypto-tls-psk-helpers.h tests: add migration tests of TLS with PSK credentials 2022-05-16 11:46:04 +01:00
crypto-tls-x509-helpers.c tests/unit/crypto-tls-x509-helpers: deinit privkey in test_tls_cleanup 2024-09-03 16:24:34 -03:00
crypto-tls-x509-helpers.h crypto: stop requiring "key encipherment" usage in x509 certs 2025-10-24 16:36:14 +01:00
io-channel-helpers.c treewide: handle result of qio_channel_set_blocking() 2025-09-19 12:46:07 +01:00
io-channel-helpers.h
iothread.c
iothread.h
meson.build crypto: drop in-tree XTS cipher mode impl 2025-11-03 10:45:55 +00:00
pkix_asn1_tab.c.inc crypto: Restrict pkix_asn1_tab[] to crypto-tls-x509-helpers.c 2024-07-24 10:39:10 +01:00
ptimer-test-stubs.c async: Add an optional reentrancy guard to the BH API 2023-04-28 11:31:07 +02:00
ptimer-test.c hw/core/ptimer: fix timer zero period condition for freq > 1GHz 2024-08-12 11:40:16 +01:00
ptimer-test.h
rcutorture.c Updated the FSF address to <https://www.gnu.org/licenses/> 2023-02-27 09:15:39 +01:00
socket-helpers.c util: drop qemu_socket_set_nonblock() 2025-09-19 12:46:07 +01:00
socket-helpers.h tests/unit: Update test-io-channel-socket.c for Windows 2022-09-02 15:54:47 +04:00
test-aio-multithread.c timers: properly prefix init_clocks() 2025-11-03 11:59:32 +01:00
test-aio.c aio-posix: integrate fdmon into glib event loop 2025-11-11 22:04:53 +01:00
test-authz-list.c
test-authz-listfile.c
test-authz-pam.c
test-authz-simple.c
test-base64.c
test-bdrv-drain.c block: drop wrapper for bdrv_set_backing_hd_drained() 2025-07-14 15:41:58 +02:00
test-bdrv-graph-mod.c block: drop wrapper for bdrv_set_backing_hd_drained() 2025-07-14 15:41:58 +02:00
test-bitcnt.c
test-bitmap.c
test-bitops.c
test-block-backend.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
test-block-iothread.c mirror: Drop redundant zero_target parameter 2025-05-14 20:10:12 -05:00
test-blockjob-txn.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
test-blockjob.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
test-bufferiszero.c
test-char.c char: rename CharBackend->CharFrontend 2025-10-28 14:49:52 +01:00
test-clone-visitor.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
test-coroutine.c tests/coroutine: Clean up global variable shadowing 2023-10-27 09:39:08 +02:00
test-crypto-afsplit.c qapi/crypto: Rename QCryptoHashAlgorithm to *Algo, and drop prefix 2024-09-10 14:02:16 +02:00
test-crypto-akcipher.c qapi/crypto: Rename QCryptoRSAPaddingAlgorithm to *Algo, and drop prefix 2024-09-10 14:03:30 +02:00
test-crypto-block.c crypto: bump min gnutls to 3.7.5 2025-11-03 10:45:55 +00:00
test-crypto-cipher.c tests: fix skipping cipher tests when AES is not available 2025-05-21 19:36:43 +01:00
test-crypto-der.c crypto: Support DER encodings 2022-11-02 06:56:32 -04:00
test-crypto-hash.c crypto: Introduce SM3 hash hmac pbkdf algorithm 2024-11-05 18:37:18 +00:00
test-crypto-hmac.c crypto: Introduce SM3 hash hmac pbkdf algorithm 2024-11-05 18:37:18 +00:00
test-crypto-ivgen.c qapi/crypto: Rename QCryptoIVGenAlgorithm to *Algo, and drop prefix 2024-09-10 14:03:30 +02:00
test-crypto-pbkdf.c crypto: Introduce SM3 hash hmac pbkdf algorithm 2024-11-05 18:37:18 +00:00
test-crypto-secret.c tests: skip encrypted secret tests if AES is not available 2025-05-21 19:36:43 +01:00
test-crypto-tlscredsx509.c crypto: avoid loading the identity certs twice 2025-11-03 10:45:55 +00:00
test-crypto-tlssession.c io/channel: Have read/write functions take void * buffer argument 2025-11-03 10:05:40 +00:00
test-cutils.c cutils: Improve qemu_strtosz handling of fractions 2023-06-02 12:29:27 -05:00
test-div128.c
test-error-report.c error: Kill @error_warn 2025-10-01 08:33:24 +02:00
test-fifo.c tests/unit: Comment FIFO8 tests 2024-09-13 20:11:13 +02:00
test-forward-visitor.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
test-hbitmap.c
test-image-locking.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
test-int128.c qemu/int128: add int128_urshift 2022-04-20 18:00:30 -03:00
test-interval-tree.c util: Add interval-tree.c 2022-12-20 17:09:41 -08:00
test-io-channel-buffer.c
test-io-channel-command.c tests: fix path separator, use g_build_filename() 2023-03-13 15:39:31 +04:00
test-io-channel-file.c tests: replace pipe() with g_unix_open_pipe(CLOEXEC) 2022-05-03 15:46:08 +04:00
test-io-channel-null.c io: add a QIOChannelNull equivalent to /dev/null 2022-06-22 18:11:21 +01:00
test-io-channel-socket.c tests/unit: Add a assert for test_io_channel_unix_listen_cleanup 2024-10-10 13:41:45 +01:00
test-io-channel-tls.c crypto: stop requiring "key encipherment" usage in x509 certs 2025-10-24 16:36:14 +01:00
test-io-task.c tests/unit/test-io-task: Rename "qemu:dummy" to avoid colon in the name 2023-12-20 10:29:23 +01:00
test-iov.c treewide: use qemu_set_blocking instead of g_unix_set_fd_nonblocking 2025-09-19 12:46:07 +01:00
test-keyval.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
test-logging.c util/log: Remove qemu_log_close 2022-04-20 10:51:11 -07:00
test-mul64.c
test-nested-aio-poll.c tests/unit: skip test-nested-aio-poll with io_uring 2025-11-11 17:32:48 +01:00
test-opts-visitor.c
test-qapi-util.c
test-qdev-global-props.c qom: Have class_init() take a const data argument 2025-04-25 17:00:41 +02:00
test-qdist.c
test-qemu-opts.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
test-qga.c qga: Add tests for guest-get-load command 2025-06-12 17:02:05 +03:00
test-qgraph.c cleanup: Drop pointless return at end of function 2025-04-24 09:33:42 +02:00
test-qht.c
test-qmp-cmds.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
test-qmp-event.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
test-qobject-input-visitor.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
test-qobject-output-visitor.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
test-qtree.c util: import GTree as QTree 2023-03-28 15:23:10 -07:00
test-rcu-list.c replace TABs with spaces 2023-03-20 12:43:50 +01:00
test-rcu-simpleq.c
test-rcu-slist.c
test-rcu-tailq.c
test-replication.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
test-resv-mem.c include/system: Move exec/memory.h to system/memory.h 2025-04-23 14:08:21 -07:00
test-seccomp.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
test-shift128.c
test-smp-parse.c qom: Have class_init() take a const data argument 2025-04-25 17:00:41 +02:00
test-string-input-visitor.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
test-string-output-visitor.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
test-thread-pool.c thread-pool: Remove thread_pool_submit() function 2025-03-06 06:47:33 +01:00
test-throttle.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
test-timed-average.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
test-util-filemonitor.c test-util-filemonitor: Adapt to the FreeBSD inotify rename semantics 2024-02-06 10:27:50 +01:00
test-util-sockets.c tests/unit/test-util-sockets: fix mem-leak on error object 2025-05-30 09:52:08 +02:00
test-uuid.c util/uuid: Add UUID_STR_LEN definition 2023-11-03 09:20:31 +01:00
test-virtio-dmabuf.c hw/display: introduce virtio-dmabuf 2023-10-04 18:15:06 -04:00
test-visitor-serialization.c qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
test-vmstate.c migration: Remove error variant of vmstate_save_state() function 2025-10-03 09:48:02 -04:00
test-write-threshold.c
test-x86-topo.c tests: Add test case of APIC ID for module level parsing 2024-05-22 19:43:29 +02:00
test-xbzrle.c migration/xbzrle: Use i386 host/cpuinfo.h 2023-05-23 16:51:18 -07:00
test-xs-node.c tests/unit: replace assert(0) with g_assert_not_reached() 2024-09-17 10:50:39 +02:00
test-yank.c char: rename CharBackend->CharFrontend 2025-10-28 14:49:52 +01:00