1 | The following changes since commit 063833a6ec2a6747e27c5f9866bb44c7e8de1265: | 1 | The following changes since commit 29e0855c5af62bbb0b0b6fed792e004dad92ba95: |
---|---|---|---|
2 | 2 | ||
3 | Merge remote-tracking branch 'remotes/mcayland/tags/qemu-sparc-signed' into staging (2017-10-19 18:42:51 +0100) | 3 | Merge remote-tracking branch 'remotes/elmarco/tags/slirp-pull-request' into staging (2020-03-22 21:00:38 +0000) |
4 | 4 | ||
5 | are available in the git repository at: | 5 | are available in the Git repository at: |
6 | 6 | ||
7 | git://github.com/stefanha/qemu.git tags/block-pull-request | 7 | https://github.com/stefanha/qemu.git tags/block-pull-request |
8 | 8 | ||
9 | for you to fetch changes up to e947d47da0b16e80d237c510e9d2e80799578c7f: | 9 | for you to fetch changes up to ff807d559205a434fd37d3343f01a0ab128bd190: |
10 | 10 | ||
11 | oslib-posix: Fix compiler warning and some data types (2017-10-20 11:16:27 +0200) | 11 | aio-posix: fix io_uring with external events (2020-03-23 11:05:44 +0000) |
12 | |||
13 | ---------------------------------------------------------------- | ||
14 | Pull request | ||
12 | 15 | ||
13 | ---------------------------------------------------------------- | 16 | ---------------------------------------------------------------- |
14 | 17 | ||
15 | ---------------------------------------------------------------- | 18 | Stefan Hajnoczi (1): |
19 | aio-posix: fix io_uring with external events | ||
16 | 20 | ||
17 | Stefan Weil (1): | 21 | util/fdmon-io_uring.c | 13 ++++++++++++- |
18 | oslib-posix: Fix compiler warning and some data types | 22 | 1 file changed, 12 insertions(+), 1 deletion(-) |
19 | |||
20 | util/oslib-posix.c | 15 ++++++++------- | ||
21 | 1 file changed, 8 insertions(+), 7 deletions(-) | ||
22 | 23 | ||
23 | -- | 24 | -- |
24 | 2.13.6 | 25 | 2.24.1 |
25 | 26 | ||
26 | diff view generated by jsdifflib |
1 | From: Stefan Weil <sw@weilnetz.de> | 1 | When external event sources are disabled fdmon-io_uring falls back to |
---|---|---|---|
2 | fdmon-poll. The ->need_wait() callback needs to watch for this so it | ||
3 | can return true when external event sources are disabled. | ||
2 | 4 | ||
3 | gcc warning: | 5 | It is also necessary to call ->wait() when AioHandlers have changed |
6 | because io_uring is asynchronous and we must submit new sqes. | ||
4 | 7 | ||
5 | /qemu/util/oslib-posix.c:304:11: error: | 8 | Both of these changes to ->need_wait() together fix tests/test-aio -p |
6 | variable ‘addr’ might be clobbered by ‘longjmp’ or ‘vfork’ | 9 | /aio/external-client, which failed with: |
7 | [-Werror=clobbered] | ||
8 | 10 | ||
9 | Fix also some related data types: | 11 | test-aio: tests/test-aio.c:404: test_aio_external_client: Assertion `aio_poll(ctx, false)' failed. |
10 | 12 | ||
11 | numpages, hpagesize are used as pointer offset. | 13 | Reported-by: Julia Suvorova <jusual@redhat.com> |
12 | Always use size_t for them and also for the derived | 14 | Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> |
13 | numpages_per_thread and size_per_thread. | 15 | Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> |
14 | 16 | Message-id: 20200319163559.117903-1-stefanha@redhat.com | |
15 | Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> | ||
16 | Signed-off-by: Stefan Weil <sw@weilnetz.de> | ||
17 | Message-id: 20171016202912.1117-1-sw@weilnetz.de | ||
18 | Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> | 17 | Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> |
19 | --- | 18 | --- |
20 | util/oslib-posix.c | 15 ++++++++------- | 19 | util/fdmon-io_uring.c | 13 ++++++++++++- |
21 | 1 file changed, 8 insertions(+), 7 deletions(-) | 20 | 1 file changed, 12 insertions(+), 1 deletion(-) |
22 | 21 | ||
23 | diff --git a/util/oslib-posix.c b/util/oslib-posix.c | 22 | diff --git a/util/fdmon-io_uring.c b/util/fdmon-io_uring.c |
24 | index XXXXXXX..XXXXXXX 100644 | 23 | index XXXXXXX..XXXXXXX 100644 |
25 | --- a/util/oslib-posix.c | 24 | --- a/util/fdmon-io_uring.c |
26 | +++ b/util/oslib-posix.c | 25 | +++ b/util/fdmon-io_uring.c |
27 | @@ -XXX,XX +XXX,XX @@ | 26 | @@ -XXX,XX +XXX,XX @@ static int fdmon_io_uring_wait(AioContext *ctx, AioHandlerList *ready_list, |
28 | 27 | ||
29 | struct MemsetThread { | 28 | static bool fdmon_io_uring_need_wait(AioContext *ctx) |
30 | char *addr; | ||
31 | - uint64_t numpages; | ||
32 | - uint64_t hpagesize; | ||
33 | + size_t numpages; | ||
34 | + size_t hpagesize; | ||
35 | QemuThread pgthread; | ||
36 | sigjmp_buf env; | ||
37 | }; | ||
38 | @@ -XXX,XX +XXX,XX @@ static void sigbus_handler(int signal) | ||
39 | static void *do_touch_pages(void *arg) | ||
40 | { | 29 | { |
41 | MemsetThread *memset_args = (MemsetThread *)arg; | 30 | - return io_uring_cq_ready(&ctx->fdmon_io_uring); |
42 | - char *addr = memset_args->addr; | 31 | + /* Have io_uring events completed? */ |
43 | - uint64_t numpages = memset_args->numpages; | 32 | + if (io_uring_cq_ready(&ctx->fdmon_io_uring)) { |
44 | - uint64_t hpagesize = memset_args->hpagesize; | 33 | + return true; |
45 | sigset_t set, oldset; | 34 | + } |
46 | - int i = 0; | 35 | + |
47 | 36 | + /* Do we need to submit new io_uring sqes? */ | |
48 | /* unblock SIGBUS */ | 37 | + if (!QSLIST_EMPTY_RCU(&ctx->submit_list)) { |
49 | sigemptyset(&set); | 38 | + return true; |
50 | @@ -XXX,XX +XXX,XX @@ static void *do_touch_pages(void *arg) | 39 | + } |
51 | if (sigsetjmp(memset_args->env, 1)) { | 40 | + |
52 | memset_thread_failed = true; | 41 | + /* Are we falling back to fdmon-poll? */ |
53 | } else { | 42 | + return atomic_read(&ctx->external_disable_cnt); |
54 | + char *addr = memset_args->addr; | 43 | } |
55 | + size_t numpages = memset_args->numpages; | 44 | |
56 | + size_t hpagesize = memset_args->hpagesize; | 45 | static const FDMonOps fdmon_io_uring_ops = { |
57 | + size_t i; | ||
58 | for (i = 0; i < numpages; i++) { | ||
59 | /* | ||
60 | * Read & write back the same value, so we don't | ||
61 | @@ -XXX,XX +XXX,XX @@ static inline int get_memset_num_threads(int smp_cpus) | ||
62 | static bool touch_all_pages(char *area, size_t hpagesize, size_t numpages, | ||
63 | int smp_cpus) | ||
64 | { | ||
65 | - uint64_t numpages_per_thread, size_per_thread; | ||
66 | + size_t numpages_per_thread; | ||
67 | + size_t size_per_thread; | ||
68 | char *addr = area; | ||
69 | int i = 0; | ||
70 | |||
71 | -- | 46 | -- |
72 | 2.13.6 | 47 | 2.24.1 |
73 | 48 | ||
74 | diff view generated by jsdifflib |