1
The following changes since commit 60205b71421cbc529ca60b12c79e0eeace007319:
1
The following changes since commit 4907644841e3200aea6475c0f72d3d987e9f3d93:
2
2
3
Merge tag 'pull-aspeed-20220801' of https://github.com/legoater/qemu into staging (2022-08-01 13:55:11 -0700)
3
Merge tag 'mem-2023-09-19' of https://github.com/davidhildenbrand/qemu into staging (2023-09-19 13:22:19 -0400)
4
4
5
are available in the Git repository at:
5
are available in the Git repository at:
6
6
7
git://repo.or.cz/qemu/kevin.git tags/for-upstream
7
https://repo.or.cz/qemu/kevin.git tags/for-upstream
8
8
9
for you to fetch changes up to 21b1d974595b3986c68fe80a1f7e9b87886d4bae:
9
for you to fetch changes up to c428b392590df6364a025d5841e3e8a589ebfd4a:
10
10
11
main loop: add missing documentation links to GS/IO macros (2022-08-02 12:02:17 +0200)
11
block: mark aio_poll as non-coroutine (2023-09-20 17:46:16 +0200)
12
12
13
----------------------------------------------------------------
13
----------------------------------------------------------------
14
Block layer patches
14
Block layer patches
15
15
16
- libvduse: Coverity fixes
16
- Graph locking part 4 (node management)
17
- hd-geometry: Fix ignored bios-chs-trans setting
17
- qemu-img map: report compressed data blocks
18
- io_uring: Fix compiler warning (missing #include)
18
- block-backend: process I/O in the current AioContext
19
- main loop: add missing documentation links to GS/IO macros
20
- qemu-iotests: Discard stderr when probing devices
21
19
22
----------------------------------------------------------------
20
----------------------------------------------------------------
23
Cole Robinson (1):
21
Andrey Drobyshev via (2):
24
qemu-iotests: Discard stderr when probing devices
22
block: add BDRV_BLOCK_COMPRESSED flag for bdrv_block_status()
23
qemu-img: map: report compressed data blocks
25
24
26
Emanuele Giuseppe Esposito (1):
25
Kevin Wolf (21):
27
main loop: add missing documentation links to GS/IO macros
26
block: Remove unused BlockReopenQueueEntry.perms_checked
27
preallocate: Factor out preallocate_truncate_to_real_size()
28
preallocate: Don't poll during permission updates
29
block: Take AioContext lock for bdrv_append() more consistently
30
block: Introduce bdrv_schedule_unref()
31
block-coroutine-wrapper: Add no_co_wrapper_bdrv_wrlock functions
32
block-coroutine-wrapper: Allow arbitrary parameter names
33
block: Mark bdrv_replace_child_noperm() GRAPH_WRLOCK
34
block: Mark bdrv_replace_child_tran() GRAPH_WRLOCK
35
block: Mark bdrv_attach_child_common() GRAPH_WRLOCK
36
block: Call transaction callbacks with lock held
37
block: Mark bdrv_attach_child() GRAPH_WRLOCK
38
block: Mark bdrv_parent_perms_conflict() and callers GRAPH_RDLOCK
39
block: Mark bdrv_get_cumulative_perm() and callers GRAPH_RDLOCK
40
block: Mark bdrv_child_perm() GRAPH_RDLOCK
41
block: Mark bdrv_parent_cb_change_media() GRAPH_RDLOCK
42
block: Take graph rdlock in bdrv_drop_intermediate()
43
block: Take graph rdlock in bdrv_change_aio_context()
44
block: Mark bdrv_root_unref_child() GRAPH_WRLOCK
45
block: Mark bdrv_unref_child() GRAPH_WRLOCK
46
block: Mark bdrv_add/del_child() and caller GRAPH_WRLOCK
28
47
29
Jinhao Fan (1):
48
Paolo Bonzini (1):
30
block/io_uring: add missing include file
49
block: mark aio_poll as non-coroutine
31
50
32
Lev Kujawski (1):
51
Stefan Hajnoczi (4):
33
hw/block/hd-geometry: Do not override specified bios-chs-trans
52
block: remove AIOCBInfo->get_aio_context()
53
test-bdrv-drain: avoid race with BH in IOThread drain test
54
block-backend: process I/O in the current AioContext
55
block-backend: process zoned requests in the current AioContext
34
56
35
Xie Yongji (3):
57
qapi/block-core.json | 6 +-
36
libvduse: Fix the incorrect function name
58
include/block/aio.h | 3 +-
37
libvduse: Replace strcpy() with strncpy()
59
include/block/block-common.h | 7 +
38
libvduse: Pass positive value to strerror()
60
include/block/block-global-state.h | 32 +-
39
61
include/block/block-io.h | 1 -
40
include/qemu/main-loop.h | 18 +++++++++++++++---
62
include/block/block_int-common.h | 34 +-
41
block/io_uring.c | 1 +
63
include/block/block_int-global-state.h | 14 +-
42
hw/block/hd-geometry.c | 7 ++++++-
64
include/sysemu/block-backend-global-state.h | 4 +-
43
subprojects/libvduse/libvduse.c | 13 +++++++------
65
block.c | 348 +++++++---
44
tests/qemu-iotests/common.rc | 4 ++--
66
block/blklogwrites.c | 4 +
45
5 files changed, 31 insertions(+), 12 deletions(-)
67
block/blkverify.c | 2 +
68
block/block-backend.c | 64 +-
69
block/copy-before-write.c | 10 +-
70
block/crypto.c | 6 +-
71
block/graph-lock.c | 26 +-
72
block/io.c | 23 +-
73
block/mirror.c | 8 +
74
block/preallocate.c | 133 ++--
75
block/qcow.c | 5 +-
76
block/qcow2.c | 7 +-
77
block/quorum.c | 23 +-
78
block/replication.c | 9 +
79
block/snapshot.c | 2 +
80
block/stream.c | 20 +-
81
block/vmdk.c | 15 +
82
blockdev.c | 23 +-
83
blockjob.c | 2 +
84
hw/nvme/ctrl.c | 7 -
85
qemu-img.c | 8 +-
86
softmmu/dma-helpers.c | 8 -
87
tests/unit/test-bdrv-drain.c | 31 +-
88
tests/unit/test-bdrv-graph-mod.c | 20 +
89
tests/unit/test-block-iothread.c | 3 +
90
util/thread-pool.c | 8 -
91
scripts/block-coroutine-wrapper.py | 18 +-
92
tests/qemu-iotests/051.pc.out | 6 +-
93
tests/qemu-iotests/122.out | 84 +--
94
tests/qemu-iotests/146.out | 780 +++++++++++------------
95
tests/qemu-iotests/154.out | 194 +++---
96
tests/qemu-iotests/179.out | 178 +++---
97
tests/qemu-iotests/209.out | 4 +-
98
tests/qemu-iotests/221.out | 16 +-
99
tests/qemu-iotests/223.out | 60 +-
100
tests/qemu-iotests/241.out | 10 +-
101
tests/qemu-iotests/244.out | 24 +-
102
tests/qemu-iotests/252.out | 10 +-
103
tests/qemu-iotests/253.out | 20 +-
104
tests/qemu-iotests/274.out | 48 +-
105
tests/qemu-iotests/tests/nbd-qemu-allocation.out | 16 +-
106
tests/qemu-iotests/tests/qemu-img-bitmaps.out | 24 +-
107
50 files changed, 1375 insertions(+), 1033 deletions(-)
diff view generated by jsdifflib
Deleted patch
1
From: Jinhao Fan <fanjinhao21s@ict.ac.cn>
2
1
3
The commit "Use io_uring_register_ring_fd() to skip fd operations" uses
4
warn_report but did not include the header file "qemu/error-report.h".
5
This causes "error: implicit declaration of function ‘warn_report’".
6
Include this header file.
7
8
Fixes: e2848bc574 ("Use io_uring_register_ring_fd() to skip fd operations")
9
Signed-off-by: Jinhao Fan <fanjinhao21s@ict.ac.cn>
10
Message-Id: <20220721065645.577404-1-fanjinhao21s@ict.ac.cn>
11
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
12
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
13
---
14
block/io_uring.c | 1 +
15
1 file changed, 1 insertion(+)
16
17
diff --git a/block/io_uring.c b/block/io_uring.c
18
index XXXXXXX..XXXXXXX 100644
19
--- a/block/io_uring.c
20
+++ b/block/io_uring.c
21
@@ -XXX,XX +XXX,XX @@
22
#include "qemu/osdep.h"
23
#include <liburing.h>
24
#include "block/aio.h"
25
+#include "qemu/error-report.h"
26
#include "qemu/queue.h"
27
#include "block/block.h"
28
#include "block/raw-aio.h"
29
--
30
2.35.3
31
32
diff view generated by jsdifflib
Deleted patch
1
From: Xie Yongji <xieyongji@bytedance.com>
2
1
3
In vduse_name_is_valid(), we actually check whether
4
the name is invalid or not. So let's change the
5
function name to vduse_name_is_invalid() to match
6
the behavior.
7
8
Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
9
Reviewed-by: Markus Armbruster <armbru@redhat.com>
10
Message-Id: <20220706095624.328-2-xieyongji@bytedance.com>
11
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
12
---
13
subprojects/libvduse/libvduse.c | 6 +++---
14
1 file changed, 3 insertions(+), 3 deletions(-)
15
16
diff --git a/subprojects/libvduse/libvduse.c b/subprojects/libvduse/libvduse.c
17
index XXXXXXX..XXXXXXX 100644
18
--- a/subprojects/libvduse/libvduse.c
19
+++ b/subprojects/libvduse/libvduse.c
20
@@ -XXX,XX +XXX,XX @@ static int vduse_dev_init(VduseDev *dev, const char *name,
21
return 0;
22
}
23
24
-static inline bool vduse_name_is_valid(const char *name)
25
+static inline bool vduse_name_is_invalid(const char *name)
26
{
27
return strlen(name) >= VDUSE_NAME_MAX || strstr(name, "..");
28
}
29
@@ -XXX,XX +XXX,XX @@ VduseDev *vduse_dev_create_by_name(const char *name, uint16_t num_queues,
30
VduseDev *dev;
31
int ret;
32
33
- if (!name || vduse_name_is_valid(name) || !ops ||
34
+ if (!name || vduse_name_is_invalid(name) || !ops ||
35
!ops->enable_queue || !ops->disable_queue) {
36
fprintf(stderr, "Invalid parameter for vduse\n");
37
return NULL;
38
@@ -XXX,XX +XXX,XX @@ VduseDev *vduse_dev_create(const char *name, uint32_t device_id,
39
struct vduse_dev_config *dev_config;
40
size_t size = offsetof(struct vduse_dev_config, config);
41
42
- if (!name || vduse_name_is_valid(name) ||
43
+ if (!name || vduse_name_is_invalid(name) ||
44
!has_feature(features, VIRTIO_F_VERSION_1) || !config ||
45
!config_size || !ops || !ops->enable_queue || !ops->disable_queue) {
46
fprintf(stderr, "Invalid parameter for vduse\n");
47
--
48
2.35.3
diff view generated by jsdifflib
Deleted patch
1
From: Xie Yongji <xieyongji@bytedance.com>
2
1
3
Coverity reported a string overflow issue since we copied
4
"name" to "dev_config->name" without checking the length.
5
This should be a false positive since we already checked
6
the length of "name" in vduse_name_is_invalid(). But anyway,
7
let's replace strcpy() with strncpy() (as a general library,
8
we'd like to minimize dependencies on other libraries, so we
9
didn't use g_strlcpy() here) to fix the coverity complaint.
10
11
Fixes: Coverity CID 1490224
12
Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
13
Reviewed-by: Markus Armbruster <armbru@redhat.com>
14
Message-Id: <20220706095624.328-3-xieyongji@bytedance.com>
15
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
16
---
17
subprojects/libvduse/libvduse.c | 3 ++-
18
1 file changed, 2 insertions(+), 1 deletion(-)
19
20
diff --git a/subprojects/libvduse/libvduse.c b/subprojects/libvduse/libvduse.c
21
index XXXXXXX..XXXXXXX 100644
22
--- a/subprojects/libvduse/libvduse.c
23
+++ b/subprojects/libvduse/libvduse.c
24
@@ -XXX,XX +XXX,XX @@ VduseDev *vduse_dev_create(const char *name, uint32_t device_id,
25
goto err_dev;
26
}
27
28
- strcpy(dev_config->name, name);
29
+ strncpy(dev_config->name, name, VDUSE_NAME_MAX);
30
+ dev_config->name[VDUSE_NAME_MAX - 1] = '\0';
31
dev_config->device_id = device_id;
32
dev_config->vendor_id = vendor_id;
33
dev_config->features = features;
34
--
35
2.35.3
diff view generated by jsdifflib
Deleted patch
1
From: Xie Yongji <xieyongji@bytedance.com>
2
1
3
The value passed to strerror() should be positive.
4
So let's fix it.
5
6
Fixes: Coverity CID 1490226, 1490223
7
Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
8
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
9
Reviewed-by: Markus Armbruster <armbru@redhat.com>
10
Message-Id: <20220706095624.328-4-xieyongji@bytedance.com>
11
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
12
---
13
subprojects/libvduse/libvduse.c | 4 ++--
14
1 file changed, 2 insertions(+), 2 deletions(-)
15
16
diff --git a/subprojects/libvduse/libvduse.c b/subprojects/libvduse/libvduse.c
17
index XXXXXXX..XXXXXXX 100644
18
--- a/subprojects/libvduse/libvduse.c
19
+++ b/subprojects/libvduse/libvduse.c
20
@@ -XXX,XX +XXX,XX @@ VduseDev *vduse_dev_create_by_name(const char *name, uint16_t num_queues,
21
ret = vduse_dev_init(dev, name, num_queues, ops, priv);
22
if (ret < 0) {
23
fprintf(stderr, "Failed to init vduse device %s: %s\n",
24
- name, strerror(ret));
25
+ name, strerror(-ret));
26
free(dev);
27
return NULL;
28
}
29
@@ -XXX,XX +XXX,XX @@ VduseDev *vduse_dev_create(const char *name, uint32_t device_id,
30
ret = vduse_dev_init(dev, name, num_queues, ops, priv);
31
if (ret < 0) {
32
fprintf(stderr, "Failed to init vduse device %s: %s\n",
33
- name, strerror(ret));
34
+ name, strerror(-ret));
35
goto err;
36
}
37
38
--
39
2.35.3
diff view generated by jsdifflib
Deleted patch
1
From: Lev Kujawski <lkujaw@member.fsf.org>
2
1
3
For small disk images (<4 GiB), QEMU and SeaBIOS default to the
4
LARGE/ECHS disk translation method, but it is not uncommon for other
5
BIOS software to use LBA in these cases as well. Some operating
6
system boot loaders (e.g., NT 4) do not handle LARGE translations
7
outside of fixed configurations. See, e.g., Q154052:
8
9
"When starting an x86 based computer, Ntdetect.com retrieves and
10
stores Interrupt 13 information. . . If the disk controller is using a
11
32 sector/64 head translation scheme, this boundary will be 1 GB. If
12
the controller uses 63 sector/255 head translation [AUTHOR: i.e.,
13
LBA], the limit will be 4 GB."
14
15
To accommodate these situations, hd_geometry_guess() now follows the
16
disk translation specified by the user even when the ATA disk geometry
17
is guessed.
18
19
hd_geometry_guess():
20
* Only set the disk translation when translation is AUTO.
21
* Show the soon-to-be active translation (*ptrans) in the trace rather
22
than what was guessed.
23
24
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/56
25
Buglink: https://bugs.launchpad.net/qemu/+bug/1745312
26
27
Signed-off-by: Lev Kujawski <lkujaw@member.fsf.org>
28
Message-Id: <20220707204045.999544-1-lkujaw@member.fsf.org>
29
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
30
---
31
hw/block/hd-geometry.c | 7 ++++++-
32
1 file changed, 6 insertions(+), 1 deletion(-)
33
34
diff --git a/hw/block/hd-geometry.c b/hw/block/hd-geometry.c
35
index XXXXXXX..XXXXXXX 100644
36
--- a/hw/block/hd-geometry.c
37
+++ b/hw/block/hd-geometry.c
38
@@ -XXX,XX +XXX,XX @@ void hd_geometry_guess(BlockBackend *blk,
39
translation = BIOS_ATA_TRANSLATION_NONE;
40
}
41
if (ptrans) {
42
- *ptrans = translation;
43
+ if (*ptrans == BIOS_ATA_TRANSLATION_AUTO) {
44
+ *ptrans = translation;
45
+ } else {
46
+ /* Defer to the translation specified by the user. */
47
+ translation = *ptrans;
48
+ }
49
}
50
trace_hd_geometry_guess(blk, *pcyls, *pheads, *psecs, translation);
51
}
52
--
53
2.35.3
diff view generated by jsdifflib
Deleted patch
1
From: Cole Robinson <crobinso@redhat.com>
2
1
3
qemu-iotests fails in the following setup:
4
5
./configure --enable-modules --enable-smartcard \
6
--target-list=x86_64-softmmu,s390x-softmmu
7
make
8
cd build
9
QEMU_PROG=`pwd`/s390x-softmmu/qemu-system-s390x \
10
../tests/check-block.sh qcow2
11
...
12
--- /home/crobinso/src/qemu/tests/qemu-iotests/127.out
13
+++ /home/crobinso/src/qemu/build/tests/qemu-iotests/scratch/127.out.bad
14
@@ -1,4 +1,18 @@
15
QA output created by 127
16
+Failed to open module: /home/crobinso/src/qemu/build/hw-usb-smartcard.so: undefined symbol: ccid_card_ccid_attach
17
...
18
--- /home/crobinso/src/qemu/tests/qemu-iotests/267.out
19
+++ /home/crobinso/src/qemu/build/tests/qemu-iotests/scratch/267.out.bad
20
@@ -1,4 +1,11 @@
21
QA output created by 267
22
+Failed to open module: /home/crobinso/src/qemu/build/hw-usb-smartcard.so: undefined symbol: ccid_card_ccid_attach
23
24
The stderr spew is its own known issue, but seems like iotests should
25
be discarding stderr in this case.
26
27
Signed-off-by: Cole Robinson <crobinso@redhat.com>
28
Reviewed-by: Thomas Huth <thuth@redhat.com>
29
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
30
---
31
tests/qemu-iotests/common.rc | 4 ++--
32
1 file changed, 2 insertions(+), 2 deletions(-)
33
34
diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
35
index XXXXXXX..XXXXXXX 100644
36
--- a/tests/qemu-iotests/common.rc
37
+++ b/tests/qemu-iotests/common.rc
38
@@ -XXX,XX +XXX,XX @@ _require_large_file()
39
#
40
_require_devices()
41
{
42
- available=$($QEMU -M none -device help | \
43
+ available=$($QEMU -M none -device help 2> /dev/null | \
44
grep ^name | sed -e 's/^name "//' -e 's/".*$//')
45
for device
46
do
47
@@ -XXX,XX +XXX,XX @@ _require_devices()
48
49
_require_one_device_of()
50
{
51
- available=$($QEMU -M none -device help | \
52
+ available=$($QEMU -M none -device help 2> /dev/null | \
53
grep ^name | sed -e 's/^name "//' -e 's/".*$//')
54
for device
55
do
56
--
57
2.35.3
diff view generated by jsdifflib
Deleted patch
1
From: Emanuele Giuseppe Esposito <eesposit@redhat.com>
2
1
3
If we go directly to GLOBAL_STATE_CODE, IO_CODE or IO_OR_GS_CODE
4
definition, we just find that they "mark and check that the function
5
is part of the {category} API".
6
However, ther is no definition on what {category} API is, they are
7
in include/block/block-*.h
8
Therefore, add a comment that refers to such documentation.
9
10
Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
11
Message-Id: <20220609122206.1016936-1-eesposit@redhat.com>
12
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
13
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14
---
15
include/qemu/main-loop.h | 18 +++++++++++++++---
16
1 file changed, 15 insertions(+), 3 deletions(-)
17
18
diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h
19
index XXXXXXX..XXXXXXX 100644
20
--- a/include/qemu/main-loop.h
21
+++ b/include/qemu/main-loop.h
22
@@ -XXX,XX +XXX,XX @@ bool qemu_mutex_iothread_locked(void);
23
*/
24
bool qemu_in_main_thread(void);
25
26
-/* Mark and check that the function is part of the global state API. */
27
+/*
28
+ * Mark and check that the function is part of the Global State API.
29
+ * Please refer to include/block/block-global-state.h for more
30
+ * information about GS API.
31
+ */
32
#ifdef CONFIG_COCOA
33
/*
34
* When using the Cocoa UI, addRemovableDevicesMenuItems() is called from
35
@@ -XXX,XX +XXX,XX @@ bool qemu_in_main_thread(void);
36
} while (0)
37
#endif /* CONFIG_COCOA */
38
39
-/* Mark and check that the function is part of the I/O API. */
40
+/*
41
+ * Mark and check that the function is part of the I/O API.
42
+ * Please refer to include/block/block-io.h for more
43
+ * information about IO API.
44
+ */
45
#define IO_CODE() \
46
do { \
47
/* nop */ \
48
} while (0)
49
50
-/* Mark and check that the function is part of the "I/O OR GS" API. */
51
+/*
52
+ * Mark and check that the function is part of the "I/O OR GS" API.
53
+ * Please refer to include/block/block-io.h for more
54
+ * information about "IO or GS" API.
55
+ */
56
#define IO_OR_GS_CODE() \
57
do { \
58
/* nop */ \
59
--
60
2.35.3
diff view generated by jsdifflib