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