diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2020-05-19 13:42:58 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2020-05-19 13:42:58 +0100 |
commit | f2465433b43fb87766d79f42191607dac4aed5b4 (patch) | |
tree | 83340a95b6ebe4433c24dbe3fefa9f14346ee351 /util | |
parent | bffe88d139ad7447e163e732e423cd767e908dc3 (diff) | |
parent | ba607ca8bff4d2c2062902f8355657c865ac7c29 (diff) | |
download | qemu-f2465433b43fb87766d79f42191607dac4aed5b4.zip qemu-f2465433b43fb87766d79f42191607dac4aed5b4.tar.gz qemu-f2465433b43fb87766d79f42191607dac4aed5b4.tar.bz2 |
Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging
Pull request
# gpg: Signature made Tue 19 May 2020 09:00:32 BST
# gpg: using RSA key 8695A8BFD3F97CDAAC35775A9CA4ABB381AB73C8
# gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" [full]
# gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>" [full]
# Primary key fingerprint: 8695 A8BF D3F9 7CDA AC35 775A 9CA4 ABB3 81AB 73C8
* remotes/stefanha/tags/block-pull-request:
aio-posix: disable fdmon-io_uring when GSource is used
aio-posix: don't duplicate fd handler deletion in fdmon_io_uring_destroy()
tests/fuzz: Extract ioport_fuzz_qtest() method
tests/fuzz: Extract pciconfig_fuzz_qos() method
tests/fuzz: Remove unuseful/unused typedefs
tests/fuzz: Add missing space in test description
Makefile: List fuzz targets in 'make help'
tests/fuzz/Makefile: Do not link code using unavailable devices
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'util')
-rw-r--r-- | util/aio-posix.c | 13 | ||||
-rw-r--r-- | util/aio-win32.c | 4 | ||||
-rw-r--r-- | util/async.c | 1 | ||||
-rw-r--r-- | util/fdmon-io_uring.c | 13 |
4 files changed, 28 insertions, 3 deletions
diff --git a/util/aio-posix.c b/util/aio-posix.c index c3613d2..1b2a3af 100644 --- a/util/aio-posix.c +++ b/util/aio-posix.c @@ -679,6 +679,19 @@ void aio_context_destroy(AioContext *ctx) { fdmon_io_uring_destroy(ctx); fdmon_epoll_disable(ctx); + aio_free_deleted_handlers(ctx); +} + +void aio_context_use_g_source(AioContext *ctx) +{ + /* + * Disable io_uring when the glib main loop is used because it doesn't + * support mixed glib/aio_poll() usage. It relies on aio_poll() being + * called regularly so that changes to the monitored file descriptors are + * submitted, otherwise a list of pending fd handlers builds up. + */ + fdmon_io_uring_destroy(ctx); + aio_free_deleted_handlers(ctx); } void aio_context_set_poll_params(AioContext *ctx, int64_t max_ns, diff --git a/util/aio-win32.c b/util/aio-win32.c index 729d533..953c56a 100644 --- a/util/aio-win32.c +++ b/util/aio-win32.c @@ -414,6 +414,10 @@ void aio_context_destroy(AioContext *ctx) { } +void aio_context_use_g_source(AioContext *ctx) +{ +} + void aio_context_set_poll_params(AioContext *ctx, int64_t max_ns, int64_t grow, int64_t shrink, Error **errp) { diff --git a/util/async.c b/util/async.c index 3165a28..1319eee 100644 --- a/util/async.c +++ b/util/async.c @@ -362,6 +362,7 @@ static GSourceFuncs aio_source_funcs = { GSource *aio_get_g_source(AioContext *ctx) { + aio_context_use_g_source(ctx); g_source_ref(&ctx->source); return &ctx->source; } diff --git a/util/fdmon-io_uring.c b/util/fdmon-io_uring.c index d5a80ed..1d14177 100644 --- a/util/fdmon-io_uring.c +++ b/util/fdmon-io_uring.c @@ -342,11 +342,18 @@ void fdmon_io_uring_destroy(AioContext *ctx) io_uring_queue_exit(&ctx->fdmon_io_uring); - /* No need to submit these anymore, just free them. */ + /* Move handlers due to be removed onto the deleted list */ while ((node = QSLIST_FIRST_RCU(&ctx->submit_list))) { + unsigned flags = atomic_fetch_and(&node->flags, + ~(FDMON_IO_URING_PENDING | + FDMON_IO_URING_ADD | + FDMON_IO_URING_REMOVE)); + + if (flags & FDMON_IO_URING_REMOVE) { + QLIST_INSERT_HEAD_RCU(&ctx->deleted_aio_handlers, node, node_deleted); + } + QSLIST_REMOVE_HEAD_RCU(&ctx->submit_list, node_submitted); - QLIST_REMOVE(node, node); - g_free(node); } ctx->fdmon_ops = &fdmon_poll_ops; |