* [PATCH 0/5] block: move AioContext and AIOCB out of include/block/
@ 2025-12-03 18:51 Paolo Bonzini
2025-12-03 18:51 ` [PATCH 1/5] hw: add missing includes hidden by block/aio.h Paolo Bonzini
` (4 more replies)
0 siblings, 5 replies; 14+ messages in thread
From: Paolo Bonzini @ 2025-12-03 18:51 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, kwolf
Split include/block/aio.h into qemu/aiocb.h and qemu/aio.h,
and reduce the amount of included files from outside include/qemu/
for consistency with the implementation's placement in util/.
While Kevin originally suggested moving AIOCB declarations to
block-common.h, the functions are implemented in util/aiocb.c
and outside the block layer too, for example in the thread pool
(see thread_pool_submit_aio which is used in places such as 9pfs,
TPM backends or hw/virtio/virtio-pmem.c). So, do keep a separate
small header but call it util/aiocb.h---not block/aio.h.
Compared to the previous attempt, this introduces another teeny tiny
header qemu/mem-reentrancy.h, which is used to avoid including
hw/core/qdev.h
Also for consistency, move block/aio-wait.h to qemu/aio-wait.h;
it is effectively part of the main event loop implementation, not
the block layer.
Paolo
Based-on: <20251127131516.80807-1-pbonzini@redhat.com>
Supersedes: <20251128101555.227630-1-pbonzini@redhat.com>
Paolo Bonzini (5):
hw: add missing includes hidden by block/aio.h
block: extract include/qemu/aiocb.h out of include/block/aio.h
block: reduce files included by block/aio.h
block: rename block/aio.h to qemu/aio.h
block: rename block/aio-wait.h to qemu/aio-wait.h
MAINTAINERS | 4 ++--
docs/devel/multiple-iothreads.rst | 4 ++--
fsdev/qemu-fsdev-throttle.h | 1 -
include/block/block-copy.h | 1 +
include/block/block-global-state.h | 2 ++
include/block/block-io.h | 4 +++-
include/block/block_int-common.h | 2 +-
include/block/dirty-bitmap.h | 1 +
include/block/raw-aio.h | 3 ++-
include/block/thread-pool.h | 3 ++-
include/hw/char/serial.h | 1 +
include/hw/core/qdev.h | 6 +----
include/hw/ide/ide-dma.h | 2 +-
include/hw/scsi/scsi.h | 3 ++-
include/hw/virtio/virtio.h | 2 +-
include/io/channel.h | 2 +-
include/{block => qemu}/aio-wait.h | 2 +-
include/{block => qemu}/aio.h | 28 +++-------------------
include/qemu/aiocb.h | 38 ++++++++++++++++++++++++++++++
include/qemu/job.h | 4 +++-
include/qemu/main-loop.h | 4 ++--
include/qemu/mem-reentrancy.h | 10 ++++++++
include/qemu/throttle.h | 1 +
include/scsi/pr-manager.h | 2 +-
include/system/event-loop-base.h | 2 +-
include/system/iothread.h | 2 +-
include/system/replay.h | 2 +-
tests/unit/iothread.h | 2 +-
util/aio-posix.h | 2 +-
block/aio_task.c | 2 +-
block/export/fuse.c | 2 +-
block/io.c | 2 +-
block/io_uring.c | 2 +-
block/linux-aio.c | 2 +-
block/win32-aio.c | 3 ++-
blockjob.c | 2 +-
hw/core/ptimer.c | 1 -
hw/misc/i2c-echo.c | 1 -
hw/virtio/iothread-vq-mapping.c | 1 +
hw/virtio/virtio-pmem.c | 1 -
io/channel.c | 2 +-
iothread.c | 2 +-
job.c | 2 +-
net/colo-compare.c | 2 +-
net/filter-mirror.c | 2 +-
net/net.c | 1 +
qapi/qmp-dispatch.c | 2 +-
replay/replay-events.c | 2 +-
scsi/pr-manager.c | 2 +-
scsi/qemu-pr-helper.c | 1 -
stubs/linux-aio.c | 2 +-
stubs/replay-tools.c | 2 +-
tests/unit/iothread.c | 2 +-
tests/unit/test-aio-multithread.c | 2 +-
tests/unit/test-aio.c | 2 +-
tests/unit/test-nested-aio-poll.c | 2 +-
tests/unit/test-thread-pool.c | 3 ++-
tests/unit/test-throttle.c | 2 +-
ui/input-linux.c | 1 -
ui/vnc-jobs.c | 1 -
util/aio-wait.c | 2 +-
util/aiocb.c | 2 +-
util/async.c | 3 ++-
util/main-loop.c | 2 +-
util/qemu-co-timeout.c | 2 +-
util/qemu-coroutine-lock.c | 2 +-
util/qemu-coroutine-sleep.c | 2 +-
util/qemu-coroutine.c | 2 +-
util/throttle.c | 2 +-
util/vhost-user-server.c | 2 +-
hw/display/apple-gfx-mmio.m | 2 +-
hw/display/apple-gfx.m | 2 +-
scripts/analyze-inclusions | 2 +-
73 files changed, 128 insertions(+), 95 deletions(-)
rename include/{block => qemu}/aio-wait.h (99%)
rename include/{block => qemu}/aio.h (97%)
create mode 100644 include/qemu/aiocb.h
create mode 100644 include/qemu/mem-reentrancy.h
--
2.52.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/5] hw: add missing includes hidden by block/aio.h
2025-12-03 18:51 [PATCH 0/5] block: move AioContext and AIOCB out of include/block/ Paolo Bonzini
@ 2025-12-03 18:51 ` Paolo Bonzini
2025-12-04 8:32 ` Philippe Mathieu-Daudé
2025-12-03 18:51 ` [PATCH 2/5] block: extract include/qemu/aiocb.h out of include/block/aio.h Paolo Bonzini
` (3 subsequent siblings)
4 siblings, 1 reply; 14+ messages in thread
From: Paolo Bonzini @ 2025-12-03 18:51 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, kwolf
hw/qdev/core.h being included by core headers means that it was quite
easy to forget including it, or anything that hw/qdev/core.h included.
Add the missing inclusions.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
include/hw/char/serial.h | 1 +
hw/virtio/iothread-vq-mapping.c | 1 +
2 files changed, 2 insertions(+)
diff --git a/include/hw/char/serial.h b/include/hw/char/serial.h
index b804e225886..ea82ffac476 100644
--- a/include/hw/char/serial.h
+++ b/include/hw/char/serial.h
@@ -26,6 +26,7 @@
#ifndef HW_SERIAL_H
#define HW_SERIAL_H
+#include "hw/core/qdev.h"
#include "chardev/char-fe.h"
#include "system/memory.h"
#include "qemu/fifo8.h"
diff --git a/hw/virtio/iothread-vq-mapping.c b/hw/virtio/iothread-vq-mapping.c
index 15909eb9332..55ce62986c7 100644
--- a/hw/virtio/iothread-vq-mapping.c
+++ b/hw/virtio/iothread-vq-mapping.c
@@ -8,6 +8,7 @@
#include "qemu/osdep.h"
#include "system/iothread.h"
+#include "qemu/bitmap.h"
#include "hw/virtio/iothread-vq-mapping.h"
static bool
--
2.52.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/5] block: extract include/qemu/aiocb.h out of include/block/aio.h
2025-12-03 18:51 [PATCH 0/5] block: move AioContext and AIOCB out of include/block/ Paolo Bonzini
2025-12-03 18:51 ` [PATCH 1/5] hw: add missing includes hidden by block/aio.h Paolo Bonzini
@ 2025-12-03 18:51 ` Paolo Bonzini
2025-12-04 8:33 ` Philippe Mathieu-Daudé
2025-12-03 18:51 ` [PATCH 3/5] block: reduce files included by block/aio.h Paolo Bonzini
` (2 subsequent siblings)
4 siblings, 1 reply; 14+ messages in thread
From: Paolo Bonzini @ 2025-12-03 18:51 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, kwolf
Create a new header corresponding to functions defined in
util/aiocb.c, and include it whenever AIOCBs are used but
AioContext is not.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
fsdev/qemu-fsdev-throttle.h | 1 -
include/block/aio.h | 21 -----------------
include/block/block-global-state.h | 1 +
include/block/block-io.h | 1 +
include/block/block_int-common.h | 2 +-
include/block/raw-aio.h | 1 +
include/block/thread-pool.h | 1 +
include/hw/ide/ide-dma.h | 2 +-
include/hw/scsi/scsi.h | 1 +
include/qemu/aiocb.h | 38 ++++++++++++++++++++++++++++++
include/qemu/job.h | 1 +
include/qemu/throttle.h | 1 +
block/win32-aio.c | 1 +
hw/core/ptimer.c | 1 -
hw/misc/i2c-echo.c | 1 -
hw/virtio/virtio-pmem.c | 1 -
scsi/qemu-pr-helper.c | 1 -
tests/unit/test-thread-pool.c | 1 +
ui/input-linux.c | 1 -
ui/vnc-jobs.c | 1 -
util/aiocb.c | 2 +-
21 files changed, 50 insertions(+), 31 deletions(-)
create mode 100644 include/qemu/aiocb.h
diff --git a/fsdev/qemu-fsdev-throttle.h b/fsdev/qemu-fsdev-throttle.h
index daa8ca2494d..a1dc0307903 100644
--- a/fsdev/qemu-fsdev-throttle.h
+++ b/fsdev/qemu-fsdev-throttle.h
@@ -15,7 +15,6 @@
#ifndef QEMU_FSDEV_THROTTLE_H
#define QEMU_FSDEV_THROTTLE_H
-#include "block/aio.h"
#include "qemu/coroutine.h"
#include "qemu/throttle.h"
diff --git a/include/block/aio.h b/include/block/aio.h
index cc3d5f25a24..59c56d695ee 100644
--- a/include/block/aio.h
+++ b/include/block/aio.h
@@ -27,27 +27,6 @@
#include "hw/core/qdev.h"
-typedef struct BlockAIOCB BlockAIOCB;
-typedef void BlockCompletionFunc(void *opaque, int ret);
-
-typedef struct AIOCBInfo {
- void (*cancel_async)(BlockAIOCB *acb);
- size_t aiocb_size;
-} AIOCBInfo;
-
-struct BlockAIOCB {
- const AIOCBInfo *aiocb_info;
- BlockDriverState *bs;
- BlockCompletionFunc *cb;
- void *opaque;
- int refcnt;
-};
-
-void *qemu_aio_get(const AIOCBInfo *aiocb_info, BlockDriverState *bs,
- BlockCompletionFunc *cb, void *opaque);
-void qemu_aio_unref(void *p);
-void qemu_aio_ref(void *p);
-
typedef struct AioHandler AioHandler;
typedef QLIST_HEAD(, AioHandler) AioHandlerList;
typedef void QEMUBHFunc(void *opaque);
diff --git a/include/block/block-global-state.h b/include/block/block-global-state.h
index 479ca2858e1..c2127f17249 100644
--- a/include/block/block-global-state.h
+++ b/include/block/block-global-state.h
@@ -24,6 +24,7 @@
#ifndef BLOCK_GLOBAL_STATE_H
#define BLOCK_GLOBAL_STATE_H
+#include "qemu/aiocb.h"
#include "block/block-common.h"
#include "qemu/coroutine.h"
#include "qemu/transactions.h"
diff --git a/include/block/block-io.h b/include/block/block-io.h
index 4cf83fb3674..e5efe0efb2f 100644
--- a/include/block/block-io.h
+++ b/include/block/block-io.h
@@ -24,6 +24,7 @@
#ifndef BLOCK_IO_H
#define BLOCK_IO_H
+#include "qemu/aiocb.h"
#include "block/aio-wait.h"
#include "block/block-common.h"
#include "qemu/coroutine.h"
diff --git a/include/block/block_int-common.h b/include/block/block_int-common.h
index cb0143ea77b..6d0898e53d1 100644
--- a/include/block/block_int-common.h
+++ b/include/block/block_int-common.h
@@ -24,10 +24,10 @@
#ifndef BLOCK_INT_COMMON_H
#define BLOCK_INT_COMMON_H
-#include "block/aio.h"
#include "block/block-common.h"
#include "block/block-global-state.h"
#include "block/snapshot.h"
+#include "qemu/aiocb.h"
#include "qemu/iov.h"
#include "qemu/rcu.h"
#include "qemu/stats64.h"
diff --git a/include/block/raw-aio.h b/include/block/raw-aio.h
index 30e5fc9a9fd..d568b887f1c 100644
--- a/include/block/raw-aio.h
+++ b/include/block/raw-aio.h
@@ -16,6 +16,7 @@
#ifndef QEMU_RAW_AIO_H
#define QEMU_RAW_AIO_H
+#include "qemu/aiocb.h"
#include "block/aio.h"
#include "block/block-common.h"
#include "qemu/iov.h"
diff --git a/include/block/thread-pool.h b/include/block/thread-pool.h
index dd48cf07e85..65cabfc1388 100644
--- a/include/block/thread-pool.h
+++ b/include/block/thread-pool.h
@@ -18,6 +18,7 @@
#ifndef QEMU_THREAD_POOL_H
#define QEMU_THREAD_POOL_H
+#include "qemu/aiocb.h"
#include "block/aio.h"
#define THREAD_POOL_MAX_THREADS_DEFAULT 64
diff --git a/include/hw/ide/ide-dma.h b/include/hw/ide/ide-dma.h
index d0b19ac9c57..296010a4e0d 100644
--- a/include/hw/ide/ide-dma.h
+++ b/include/hw/ide/ide-dma.h
@@ -1,7 +1,7 @@
#ifndef HW_IDE_DMA_H
#define HW_IDE_DMA_H
-#include "block/aio.h"
+#include "qemu/aiocb.h"
#include "qemu/iov.h"
typedef struct IDEState IDEState;
diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h
index 83782339d4b..75b4d781a5c 100644
--- a/include/hw/scsi/scsi.h
+++ b/include/hw/scsi/scsi.h
@@ -1,6 +1,7 @@
#ifndef QEMU_HW_SCSI_H
#define QEMU_HW_SCSI_H
+#include "qemu/aiocb.h"
#include "block/aio.h"
#include "hw/block/block.h"
#include "hw/core/qdev.h"
diff --git a/include/qemu/aiocb.h b/include/qemu/aiocb.h
new file mode 100644
index 00000000000..0622646f31d
--- /dev/null
+++ b/include/qemu/aiocb.h
@@ -0,0 +1,38 @@
+/*
+ * Data structures representing asynchronous I/O operations
+ *
+ * Copyright IBM, Corp. 2008
+ *
+ * Authors:
+ * Anthony Liguori <aliguori@us.ibm.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See
+ * the COPYING file in the top-level directory.
+ *
+ */
+
+#ifndef QEMU_AIOCB_H
+#define QEMU_AIOCB_H
+
+typedef struct BlockAIOCB BlockAIOCB;
+typedef void BlockCompletionFunc(void *opaque, int ret);
+
+typedef struct AIOCBInfo {
+ void (*cancel_async)(BlockAIOCB *acb);
+ size_t aiocb_size;
+} AIOCBInfo;
+
+struct BlockAIOCB {
+ const AIOCBInfo *aiocb_info;
+ BlockDriverState *bs;
+ BlockCompletionFunc *cb;
+ void *opaque;
+ int refcnt;
+};
+
+void *qemu_aio_get(const AIOCBInfo *aiocb_info, BlockDriverState *bs,
+ BlockCompletionFunc *cb, void *opaque);
+void qemu_aio_unref(void *p);
+void qemu_aio_ref(void *p);
+
+#endif
diff --git a/include/qemu/job.h b/include/qemu/job.h
index ead31578d3d..af29b8c6531 100644
--- a/include/qemu/job.h
+++ b/include/qemu/job.h
@@ -27,6 +27,7 @@
#define JOB_H
#include "qapi/qapi-types-job.h"
+#include "qemu/aiocb.h"
#include "qemu/queue.h"
#include "qemu/progress_meter.h"
#include "qemu/coroutine.h"
diff --git a/include/qemu/throttle.h b/include/qemu/throttle.h
index 181245d29bc..8fa2b29452a 100644
--- a/include/qemu/throttle.h
+++ b/include/qemu/throttle.h
@@ -25,6 +25,7 @@
#ifndef THROTTLE_H
#define THROTTLE_H
+#include "block/aio.h"
#include "qapi/qapi-types-block-core.h"
#include "qemu/timer.h"
diff --git a/block/win32-aio.c b/block/win32-aio.c
index f0689f3ee95..539f1c81c65 100644
--- a/block/win32-aio.c
+++ b/block/win32-aio.c
@@ -28,6 +28,7 @@
#include "block/block_int.h"
#include "block/aio.h"
#include "block/raw-aio.h"
+#include "qemu/aiocb.h"
#include "qemu/event_notifier.h"
#include "qemu/iov.h"
#include "qemu/memalign.h"
diff --git a/hw/core/ptimer.c b/hw/core/ptimer.c
index e42e06fa4de..0cbe1ed5787 100644
--- a/hw/core/ptimer.c
+++ b/hw/core/ptimer.c
@@ -13,7 +13,6 @@
#include "exec/replay-core.h"
#include "exec/icount.h"
#include "system/qtest.h"
-#include "block/aio.h"
#include "hw/core/clock.h"
#define DELTA_ADJUST 1
diff --git a/hw/misc/i2c-echo.c b/hw/misc/i2c-echo.c
index 2bb99ec0dbf..54d07db6fae 100644
--- a/hw/misc/i2c-echo.c
+++ b/hw/misc/i2c-echo.c
@@ -11,7 +11,6 @@
#include "qemu/osdep.h"
#include "qemu/timer.h"
#include "qemu/main-loop.h"
-#include "block/aio.h"
#include "hw/i2c/i2c.h"
#include "trace.h"
diff --git a/hw/virtio/virtio-pmem.c b/hw/virtio/virtio-pmem.c
index 854d08abf6e..5381d592824 100644
--- a/hw/virtio/virtio-pmem.c
+++ b/hw/virtio/virtio-pmem.c
@@ -22,7 +22,6 @@
#include "standard-headers/linux/virtio_ids.h"
#include "standard-headers/linux/virtio_pmem.h"
#include "system/hostmem.h"
-#include "block/aio.h"
#include "block/thread-pool.h"
#include "trace.h"
diff --git a/scsi/qemu-pr-helper.c b/scsi/qemu-pr-helper.c
index 074b4db4720..9dcd3ec7111 100644
--- a/scsi/qemu-pr-helper.c
+++ b/scsi/qemu-pr-helper.c
@@ -52,7 +52,6 @@
#include "trace/control.h"
#include "qemu-version.h"
-#include "block/aio.h"
#include "block/thread-pool.h"
#include "scsi/constants.h"
diff --git a/tests/unit/test-thread-pool.c b/tests/unit/test-thread-pool.c
index 33407b595d3..ea5234f9f48 100644
--- a/tests/unit/test-thread-pool.c
+++ b/tests/unit/test-thread-pool.c
@@ -3,6 +3,7 @@
#include "block/thread-pool.h"
#include "block/block.h"
#include "qapi/error.h"
+#include "qemu/aiocb.h"
#include "qemu/timer.h"
#include "qemu/error-report.h"
#include "qemu/main-loop.h"
diff --git a/ui/input-linux.c b/ui/input-linux.c
index 44d0c15a9b7..c16726a3b79 100644
--- a/ui/input-linux.c
+++ b/ui/input-linux.c
@@ -13,7 +13,6 @@
#include "ui/input.h"
#include "qom/object_interfaces.h"
#include "system/iothread.h"
-#include "block/aio.h"
#include <sys/ioctl.h>
#include "standard-headers/linux/input.h"
diff --git a/ui/vnc-jobs.c b/ui/vnc-jobs.c
index bed33950a87..b296d19e089 100644
--- a/ui/vnc-jobs.c
+++ b/ui/vnc-jobs.c
@@ -31,7 +31,6 @@
#include "vnc-jobs.h"
#include "qemu/sockets.h"
#include "qemu/main-loop.h"
-#include "block/aio.h"
#include "trace.h"
/*
diff --git a/util/aiocb.c b/util/aiocb.c
index 5aef3a069c8..d1a581080d3 100644
--- a/util/aiocb.c
+++ b/util/aiocb.c
@@ -23,7 +23,7 @@
*/
#include "qemu/osdep.h"
-#include "block/aio.h"
+#include "qemu/aiocb.h"
void *qemu_aio_get(const AIOCBInfo *aiocb_info, BlockDriverState *bs,
BlockCompletionFunc *cb, void *opaque)
--
2.52.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 3/5] block: reduce files included by block/aio.h
2025-12-03 18:51 [PATCH 0/5] block: move AioContext and AIOCB out of include/block/ Paolo Bonzini
2025-12-03 18:51 ` [PATCH 1/5] hw: add missing includes hidden by block/aio.h Paolo Bonzini
2025-12-03 18:51 ` [PATCH 2/5] block: extract include/qemu/aiocb.h out of include/block/aio.h Paolo Bonzini
@ 2025-12-03 18:51 ` Paolo Bonzini
2025-12-04 8:35 ` Philippe Mathieu-Daudé
2025-12-03 18:51 ` [PATCH 4/5] block: rename block/aio.h to qemu/aio.h Paolo Bonzini
2025-12-03 18:51 ` [PATCH 5/5] block: rename block/aio-wait.h to qemu/aio-wait.h Paolo Bonzini
4 siblings, 1 reply; 14+ messages in thread
From: Paolo Bonzini @ 2025-12-03 18:51 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, kwolf
Avoid including all of qdev everywhere (the hw/core/qdev.h header in fact
brings in a lot more headers too), instead declare a couple structs for
which only a pointer type is needed.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
include/block/aio.h | 7 +++----
include/block/block-copy.h | 1 +
include/block/block-global-state.h | 1 +
include/block/block-io.h | 1 +
include/block/dirty-bitmap.h | 1 +
include/hw/core/qdev.h | 6 +-----
include/qemu/job.h | 1 +
include/qemu/main-loop.h | 2 +-
include/qemu/mem-reentrancy.h | 10 ++++++++++
net/net.c | 1 +
util/async.c | 1 +
11 files changed, 22 insertions(+), 10 deletions(-)
create mode 100644 include/qemu/mem-reentrancy.h
diff --git a/include/block/aio.h b/include/block/aio.h
index 59c56d695ee..8cca2360d1a 100644
--- a/include/block/aio.h
+++ b/include/block/aio.h
@@ -23,9 +23,8 @@
#include "qemu/lockcnt.h"
#include "qemu/thread.h"
#include "qemu/timer.h"
-#include "block/graph-lock.h"
-#include "hw/core/qdev.h"
+struct MemReentrancyGuard;
typedef struct AioHandler AioHandler;
typedef QLIST_HEAD(, AioHandler) AioHandlerList;
@@ -211,7 +210,7 @@ struct AioContext {
* of nodes and edges from block graph while some
* other thread is traversing it.
*/
- BdrvGraphRWlock *bdrv_graph;
+ struct BdrvGraphRWlock *bdrv_graph;
/* The list of registered AIO handlers. Protected by ctx->list_lock. */
AioHandlerList aio_handlers;
@@ -393,7 +392,7 @@ void aio_bh_schedule_oneshot_full(AioContext *ctx, QEMUBHFunc *cb, void *opaque,
* device-reentrancy issues
*/
QEMUBH *aio_bh_new_full(AioContext *ctx, QEMUBHFunc *cb, void *opaque,
- const char *name, MemReentrancyGuard *reentrancy_guard);
+ const char *name, struct MemReentrancyGuard *reentrancy_guard);
/**
* aio_bh_new: Allocate a new bottom half structure
diff --git a/include/block/block-copy.h b/include/block/block-copy.h
index dd5cc82f3b2..0df2771181b 100644
--- a/include/block/block-copy.h
+++ b/include/block/block-copy.h
@@ -16,6 +16,7 @@
#define BLOCK_COPY_H
#include "block/block-common.h"
+#include "block/graph-lock.h"
#include "qemu/progress_meter.h"
/* All APIs are thread-safe */
diff --git a/include/block/block-global-state.h b/include/block/block-global-state.h
index c2127f17249..ed89999f0fb 100644
--- a/include/block/block-global-state.h
+++ b/include/block/block-global-state.h
@@ -25,6 +25,7 @@
#define BLOCK_GLOBAL_STATE_H
#include "qemu/aiocb.h"
+#include "block/graph-lock.h"
#include "block/block-common.h"
#include "qemu/coroutine.h"
#include "qemu/transactions.h"
diff --git a/include/block/block-io.h b/include/block/block-io.h
index e5efe0efb2f..7925e2241e6 100644
--- a/include/block/block-io.h
+++ b/include/block/block-io.h
@@ -27,6 +27,7 @@
#include "qemu/aiocb.h"
#include "block/aio-wait.h"
#include "block/block-common.h"
+#include "block/graph-lock.h"
#include "qemu/coroutine.h"
#include "qemu/iov.h"
diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h
index fa956debfb2..28029bbc2bc 100644
--- a/include/block/dirty-bitmap.h
+++ b/include/block/dirty-bitmap.h
@@ -2,6 +2,7 @@
#define BLOCK_DIRTY_BITMAP_H
#include "block/block-common.h"
+#include "block/graph-lock.h"
#include "qapi/qapi-types-block-core.h"
#include "qemu/hbitmap.h"
diff --git a/include/hw/core/qdev.h b/include/hw/core/qdev.h
index e211d807e82..4b2730e9d8e 100644
--- a/include/hw/core/qdev.h
+++ b/include/hw/core/qdev.h
@@ -4,6 +4,7 @@
#include "qemu/atomic.h"
#include "qemu/queue.h"
#include "qemu/bitmap.h"
+#include "qemu/mem-reentrancy.h"
#include "qemu/rcu.h"
#include "qemu/rcu_queue.h"
#include "qom/object.h"
@@ -208,11 +209,6 @@ struct NamedClockList {
QLIST_ENTRY(NamedClockList) node;
};
-typedef struct MemReentrancyGuard {
- bool engaged_in_io;
-} MemReentrancyGuard;
-
-
typedef QLIST_HEAD(, NamedGPIOList) NamedGPIOListHead;
typedef QLIST_HEAD(, NamedClockList) NamedClockListHead;
typedef QLIST_HEAD(, BusState) BusStateHead;
diff --git a/include/qemu/job.h b/include/qemu/job.h
index af29b8c6531..2b163602c56 100644
--- a/include/qemu/job.h
+++ b/include/qemu/job.h
@@ -32,6 +32,7 @@
#include "qemu/progress_meter.h"
#include "qemu/coroutine.h"
#include "block/aio.h"
+#include "block/graph-lock.h"
typedef struct JobDriver JobDriver;
typedef struct JobTxn JobTxn;
diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h
index 0d55c636b21..241dc87be50 100644
--- a/include/qemu/main-loop.h
+++ b/include/qemu/main-loop.h
@@ -431,7 +431,7 @@ void qemu_cond_timedwait_bql(QemuCond *cond, int ms);
#define qemu_bh_new(cb, opaque) \
qemu_bh_new_full((cb), (opaque), (stringify(cb)), NULL)
QEMUBH *qemu_bh_new_full(QEMUBHFunc *cb, void *opaque, const char *name,
- MemReentrancyGuard *reentrancy_guard);
+ struct MemReentrancyGuard *reentrancy_guard);
void qemu_bh_schedule_idle(QEMUBH *bh);
enum {
diff --git a/include/qemu/mem-reentrancy.h b/include/qemu/mem-reentrancy.h
new file mode 100644
index 00000000000..07cafd47179
--- /dev/null
+++ b/include/qemu/mem-reentrancy.h
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#ifndef QEMU_MEM_REENTRANCY_H
+#define QEMU_MEM_REENTRANCY_H 1
+
+typedef struct MemReentrancyGuard {
+ bool engaged_in_io;
+} MemReentrancyGuard;
+
+#endif
diff --git a/net/net.c b/net/net.c
index 4930b573ed3..a176936f9bc 100644
--- a/net/net.c
+++ b/net/net.c
@@ -39,6 +39,7 @@
#include "qobject/qdict.h"
#include "qapi/qmp/qerror.h"
#include "qemu/error-report.h"
+#include "qemu/mem-reentrancy.h"
#include "qemu/sockets.h"
#include "qemu/cutils.h"
#include "qemu/config-file.h"
diff --git a/util/async.c b/util/async.c
index 48f88286369..39f391fb71a 100644
--- a/util/async.c
+++ b/util/async.c
@@ -29,6 +29,7 @@
#include "block/thread-pool.h"
#include "block/graph-lock.h"
#include "qemu/main-loop.h"
+#include "qemu/mem-reentrancy.h"
#include "qemu/atomic.h"
#include "qemu/lockcnt.h"
#include "qemu/rcu_queue.h"
--
2.52.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 4/5] block: rename block/aio.h to qemu/aio.h
2025-12-03 18:51 [PATCH 0/5] block: move AioContext and AIOCB out of include/block/ Paolo Bonzini
` (2 preceding siblings ...)
2025-12-03 18:51 ` [PATCH 3/5] block: reduce files included by block/aio.h Paolo Bonzini
@ 2025-12-03 18:51 ` Paolo Bonzini
2025-12-04 8:35 ` Philippe Mathieu-Daudé
2025-12-03 18:51 ` [PATCH 5/5] block: rename block/aio-wait.h to qemu/aio-wait.h Paolo Bonzini
4 siblings, 1 reply; 14+ messages in thread
From: Paolo Bonzini @ 2025-12-03 18:51 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, kwolf
AioContexts are used as a generic event loop even outside the block
layer; move the header file out of block/ just like the implementation
is in util/.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
MAINTAINERS | 2 +-
docs/devel/multiple-iothreads.rst | 4 ++--
include/block/aio-wait.h | 2 +-
include/block/raw-aio.h | 2 +-
include/block/thread-pool.h | 2 +-
include/hw/scsi/scsi.h | 2 +-
include/hw/virtio/virtio.h | 2 +-
include/io/channel.h | 2 +-
include/{block => qemu}/aio.h | 0
include/qemu/job.h | 2 +-
include/qemu/main-loop.h | 2 +-
include/qemu/throttle.h | 2 +-
include/scsi/pr-manager.h | 2 +-
include/system/event-loop-base.h | 2 +-
include/system/iothread.h | 2 +-
include/system/replay.h | 2 +-
tests/unit/iothread.h | 2 +-
util/aio-posix.h | 2 +-
block/aio_task.c | 2 +-
block/export/fuse.c | 2 +-
block/io_uring.c | 2 +-
block/linux-aio.c | 2 +-
block/win32-aio.c | 2 +-
iothread.c | 2 +-
qapi/qmp-dispatch.c | 2 +-
replay/replay-events.c | 2 +-
scsi/pr-manager.c | 2 +-
stubs/linux-aio.c | 2 +-
stubs/replay-tools.c | 2 +-
tests/unit/iothread.c | 2 +-
tests/unit/test-aio-multithread.c | 2 +-
tests/unit/test-aio.c | 2 +-
tests/unit/test-nested-aio-poll.c | 2 +-
tests/unit/test-thread-pool.c | 2 +-
tests/unit/test-throttle.c | 2 +-
util/async.c | 2 +-
util/main-loop.c | 2 +-
util/qemu-co-timeout.c | 2 +-
util/qemu-coroutine-lock.c | 2 +-
util/qemu-coroutine-sleep.c | 2 +-
util/qemu-coroutine.c | 2 +-
util/throttle.c | 2 +-
scripts/analyze-inclusions | 2 +-
43 files changed, 43 insertions(+), 43 deletions(-)
rename include/{block => qemu}/aio.h (100%)
diff --git a/MAINTAINERS b/MAINTAINERS
index dab02da37a7..24cf2946e77 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3071,7 +3071,7 @@ F: util/aio-*.h
F: util/defer-call.c
F: util/fdmon-*.c
F: block/io.c
-F: include/block/aio.h
+F: include/qemu/aio.h
F: include/block/aio-wait.h
F: include/qemu/defer-call.h
F: scripts/qemugdb/aio.py
diff --git a/docs/devel/multiple-iothreads.rst b/docs/devel/multiple-iothreads.rst
index d1f3fc4510a..a6eb0462673 100644
--- a/docs/devel/multiple-iothreads.rst
+++ b/docs/devel/multiple-iothreads.rst
@@ -52,7 +52,7 @@ How to program for ``IOThread``\ s
----------------------------------
The main difference between legacy code and new code that can run in an
``IOThread`` is dealing explicitly with the event loop object, ``AioContext``
-(see ``include/block/aio.h``). Code that only works in the main loop
+(see ``include/qemu/aio.h``). Code that only works in the main loop
implicitly uses the main loop's ``AioContext``. Code that supports running
in ``IOThread``\ s must be aware of its ``AioContext``.
@@ -74,7 +74,7 @@ Since they implicitly work on the main loop they cannot be used in code that
runs in an ``IOThread``. They might cause a crash or deadlock if called from an
``IOThread`` since the BQL is not held.
-Instead, use the ``AioContext`` functions directly (see ``include/block/aio.h``):
+Instead, use the ``AioContext`` functions directly (see ``include/qemu/aio.h``):
* ``aio_set_fd_handler()`` - monitor a file descriptor
* ``aio_set_event_notifier()`` - monitor an event notifier
* ``aio_timer_new()`` - create a timer
diff --git a/include/block/aio-wait.h b/include/block/aio-wait.h
index cf5e8bde1ca..57ebe21b31f 100644
--- a/include/block/aio-wait.h
+++ b/include/block/aio-wait.h
@@ -25,7 +25,7 @@
#ifndef QEMU_AIO_WAIT_H
#define QEMU_AIO_WAIT_H
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "qemu/main-loop.h"
/**
diff --git a/include/block/raw-aio.h b/include/block/raw-aio.h
index d568b887f1c..256d0468a88 100644
--- a/include/block/raw-aio.h
+++ b/include/block/raw-aio.h
@@ -17,7 +17,7 @@
#define QEMU_RAW_AIO_H
#include "qemu/aiocb.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "block/block-common.h"
#include "qemu/iov.h"
diff --git a/include/block/thread-pool.h b/include/block/thread-pool.h
index 65cabfc1388..e9ddb2b6d3c 100644
--- a/include/block/thread-pool.h
+++ b/include/block/thread-pool.h
@@ -19,7 +19,7 @@
#define QEMU_THREAD_POOL_H
#include "qemu/aiocb.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#define THREAD_POOL_MAX_THREADS_DEFAULT 64
diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h
index 75b4d781a5c..d26f1127bb5 100644
--- a/include/hw/scsi/scsi.h
+++ b/include/hw/scsi/scsi.h
@@ -2,7 +2,7 @@
#define QEMU_HW_SCSI_H
#include "qemu/aiocb.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "hw/block/block.h"
#include "hw/core/qdev.h"
#include "scsi/utils.h"
diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index 91ff2fa21a5..27cd98d2fe1 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -23,7 +23,7 @@
#include "standard-headers/linux/virtio_config.h"
#include "standard-headers/linux/virtio_ring.h"
#include "qom/object.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
/*
* A guest should never accept this. It implies negotiation is broken
diff --git a/include/io/channel.h b/include/io/channel.h
index f42be760f9f..1b02350437d 100644
--- a/include/io/channel.h
+++ b/include/io/channel.h
@@ -23,7 +23,7 @@
#include "qom/object.h"
#include "qemu/coroutine-core.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#define TYPE_QIO_CHANNEL "qio-channel"
OBJECT_DECLARE_TYPE(QIOChannel, QIOChannelClass,
diff --git a/include/block/aio.h b/include/qemu/aio.h
similarity index 100%
rename from include/block/aio.h
rename to include/qemu/aio.h
diff --git a/include/qemu/job.h b/include/qemu/job.h
index 2b163602c56..0e40e8b4570 100644
--- a/include/qemu/job.h
+++ b/include/qemu/job.h
@@ -31,7 +31,7 @@
#include "qemu/queue.h"
#include "qemu/progress_meter.h"
#include "qemu/coroutine.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "block/graph-lock.h"
typedef struct JobDriver JobDriver;
diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h
index 241dc87be50..8c1241a2c11 100644
--- a/include/qemu/main-loop.h
+++ b/include/qemu/main-loop.h
@@ -25,7 +25,7 @@
#ifndef QEMU_MAIN_LOOP_H
#define QEMU_MAIN_LOOP_H
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "qom/object.h"
#include "system/event-loop-base.h"
diff --git a/include/qemu/throttle.h b/include/qemu/throttle.h
index 8fa2b29452a..06b6589c946 100644
--- a/include/qemu/throttle.h
+++ b/include/qemu/throttle.h
@@ -25,7 +25,7 @@
#ifndef THROTTLE_H
#define THROTTLE_H
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "qapi/qapi-types-block-core.h"
#include "qemu/timer.h"
diff --git a/include/scsi/pr-manager.h b/include/scsi/pr-manager.h
index 45de28d3542..5045d115c44 100644
--- a/include/scsi/pr-manager.h
+++ b/include/scsi/pr-manager.h
@@ -4,7 +4,7 @@
#include "qom/object.h"
#include "qapi/visitor.h"
#include "qom/object_interfaces.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#define TYPE_PR_MANAGER "pr-manager"
diff --git a/include/system/event-loop-base.h b/include/system/event-loop-base.h
index a6c24f13513..130629e7f31 100644
--- a/include/system/event-loop-base.h
+++ b/include/system/event-loop-base.h
@@ -13,7 +13,7 @@
#define QEMU_EVENT_LOOP_BASE_H
#include "qom/object.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#define TYPE_EVENT_LOOP_BASE "event-loop-base"
OBJECT_DECLARE_TYPE(EventLoopBase, EventLoopBaseClass,
diff --git a/include/system/iothread.h b/include/system/iothread.h
index d95c17a6456..e26d13c6c71 100644
--- a/include/system/iothread.h
+++ b/include/system/iothread.h
@@ -14,7 +14,7 @@
#ifndef IOTHREAD_H
#define IOTHREAD_H
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "qemu/thread.h"
#include "qom/object.h"
#include "system/event-loop-base.h"
diff --git a/include/system/replay.h b/include/system/replay.h
index 68f91bdfbf2..f8715ca9feb 100644
--- a/include/system/replay.h
+++ b/include/system/replay.h
@@ -15,7 +15,7 @@
#include "qapi/qapi-types-misc.h"
#include "qapi/qapi-types-run-state.h"
#include "qapi/qapi-types-ui.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "qemu/audio.h"
/* replay clock kinds */
diff --git a/tests/unit/iothread.h b/tests/unit/iothread.h
index 4877cea6a31..eb4d0c77f86 100644
--- a/tests/unit/iothread.h
+++ b/tests/unit/iothread.h
@@ -13,7 +13,7 @@
#ifndef TEST_IOTHREAD_H
#define TEST_IOTHREAD_H
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "qemu/thread.h"
typedef struct IOThread IOThread;
diff --git a/util/aio-posix.h b/util/aio-posix.h
index babbfa83141..0cedb8d1891 100644
--- a/util/aio-posix.h
+++ b/util/aio-posix.h
@@ -17,7 +17,7 @@
#ifndef AIO_POSIX_H
#define AIO_POSIX_H
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "qapi/error.h"
struct AioHandler {
diff --git a/block/aio_task.c b/block/aio_task.c
index bb5c05f455d..21b68a9fc02 100644
--- a/block/aio_task.c
+++ b/block/aio_task.c
@@ -23,7 +23,7 @@
*/
#include "qemu/osdep.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "block/aio_task.h"
struct AioTaskPool {
diff --git a/block/export/fuse.c b/block/export/fuse.c
index 465cc9891d6..8cf4572f78d 100644
--- a/block/export/fuse.c
+++ b/block/export/fuse.c
@@ -20,7 +20,7 @@
#include "qemu/osdep.h"
#include "qemu/memalign.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "block/block_int-common.h"
#include "block/export.h"
#include "block/fuse.h"
diff --git a/block/io_uring.c b/block/io_uring.c
index f1514cf024a..cb131d3b8b5 100644
--- a/block/io_uring.c
+++ b/block/io_uring.c
@@ -10,7 +10,7 @@
*/
#include "qemu/osdep.h"
#include <liburing.h>
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "block/block.h"
#include "block/raw-aio.h"
#include "qemu/coroutine.h"
diff --git a/block/linux-aio.c b/block/linux-aio.c
index c200e7ad20f..53c3e9af8ae 100644
--- a/block/linux-aio.c
+++ b/block/linux-aio.c
@@ -8,7 +8,7 @@
* See the COPYING file in the top-level directory.
*/
#include "qemu/osdep.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "qemu/queue.h"
#include "block/block.h"
#include "block/raw-aio.h"
diff --git a/block/win32-aio.c b/block/win32-aio.c
index 539f1c81c65..6e1b34fb95f 100644
--- a/block/win32-aio.c
+++ b/block/win32-aio.c
@@ -26,7 +26,7 @@
#include "qemu/timer.h"
#include "block/block-io.h"
#include "block/block_int.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "block/raw-aio.h"
#include "qemu/aiocb.h"
#include "qemu/event_notifier.h"
diff --git a/iothread.c b/iothread.c
index 8810376dcea..caf68e07645 100644
--- a/iothread.c
+++ b/iothread.c
@@ -15,7 +15,7 @@
#include "qom/object.h"
#include "qom/object_interfaces.h"
#include "qemu/module.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "block/block.h"
#include "system/event-loop-base.h"
#include "system/iothread.h"
diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c
index e569224eaea..9bb1e6a9f4a 100644
--- a/qapi/qmp-dispatch.c
+++ b/qapi/qmp-dispatch.c
@@ -13,7 +13,7 @@
#include "qemu/osdep.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "qapi/compat-policy.h"
#include "qapi/error.h"
#include "qapi/qmp-registry.h"
diff --git a/replay/replay-events.c b/replay/replay-events.c
index a96e47e7740..9e5af5e8495 100644
--- a/replay/replay-events.c
+++ b/replay/replay-events.c
@@ -13,7 +13,7 @@
#include "qemu/error-report.h"
#include "system/replay.h"
#include "replay-internal.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "ui/input.h"
#include "hw/core/cpu.h"
diff --git a/scsi/pr-manager.c b/scsi/pr-manager.c
index 40e1210eb21..fec0d68c4cc 100644
--- a/scsi/pr-manager.c
+++ b/scsi/pr-manager.c
@@ -13,7 +13,7 @@
#include <scsi/sg.h>
#include "qapi/error.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "block/thread-pool.h"
#include "scsi/pr-manager.h"
#include "trace.h"
diff --git a/stubs/linux-aio.c b/stubs/linux-aio.c
index 84d1f784aed..b1a27e926e3 100644
--- a/stubs/linux-aio.c
+++ b/stubs/linux-aio.c
@@ -8,7 +8,7 @@
* See the COPYING file in the top-level directory.
*/
#include "qemu/osdep.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "block/raw-aio.h"
void laio_detach_aio_context(LinuxAioState *s, AioContext *old_context)
diff --git a/stubs/replay-tools.c b/stubs/replay-tools.c
index c537485f401..17dc3babd9b 100644
--- a/stubs/replay-tools.c
+++ b/stubs/replay-tools.c
@@ -1,6 +1,6 @@
#include "qemu/osdep.h"
#include "system/replay.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
bool replay_events_enabled(void)
{
diff --git a/tests/unit/iothread.c b/tests/unit/iothread.c
index f9b0791084e..a363bf8f709 100644
--- a/tests/unit/iothread.c
+++ b/tests/unit/iothread.c
@@ -14,7 +14,7 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "qemu/main-loop.h"
#include "qemu/rcu.h"
#include "iothread.h"
diff --git a/tests/unit/test-aio-multithread.c b/tests/unit/test-aio-multithread.c
index c24200a7121..9179cdc6a32 100644
--- a/tests/unit/test-aio-multithread.c
+++ b/tests/unit/test-aio-multithread.c
@@ -11,7 +11,7 @@
*/
#include "qemu/osdep.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "qemu/coroutine.h"
#include "qemu/thread.h"
#include "qemu/error-report.h"
diff --git a/tests/unit/test-aio.c b/tests/unit/test-aio.c
index 010d65b79a5..b3ca4d8a596 100644
--- a/tests/unit/test-aio.c
+++ b/tests/unit/test-aio.c
@@ -11,7 +11,7 @@
*/
#include "qemu/osdep.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "qapi/error.h"
#include "qemu/timer.h"
#include "qemu/sockets.h"
diff --git a/tests/unit/test-nested-aio-poll.c b/tests/unit/test-nested-aio-poll.c
index d13ecccd8c0..9ab1ad08a79 100644
--- a/tests/unit/test-nested-aio-poll.c
+++ b/tests/unit/test-nested-aio-poll.c
@@ -13,7 +13,7 @@
* aio_poll() calls. This test case checks that this is indeed what happens.
*/
#include "qemu/osdep.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "qapi/error.h"
#include "util/aio-posix.h"
diff --git a/tests/unit/test-thread-pool.c b/tests/unit/test-thread-pool.c
index ea5234f9f48..1e2f05f8416 100644
--- a/tests/unit/test-thread-pool.c
+++ b/tests/unit/test-thread-pool.c
@@ -1,5 +1,5 @@
#include "qemu/osdep.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "block/thread-pool.h"
#include "block/block.h"
#include "qapi/error.h"
diff --git a/tests/unit/test-throttle.c b/tests/unit/test-throttle.c
index dfa61c75ea4..52eb8966b3f 100644
--- a/tests/unit/test-throttle.c
+++ b/tests/unit/test-throttle.c
@@ -14,7 +14,7 @@
#include "qemu/osdep.h"
#include <math.h>
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "qapi/error.h"
#include "qemu/throttle.h"
#include "qemu/error-report.h"
diff --git a/util/async.c b/util/async.c
index 39f391fb71a..80d6b01a8aa 100644
--- a/util/async.c
+++ b/util/async.c
@@ -25,7 +25,7 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "block/thread-pool.h"
#include "block/graph-lock.h"
#include "qemu/main-loop.h"
diff --git a/util/main-loop.c b/util/main-loop.c
index b462598f76e..ad8645c30a4 100644
--- a/util/main-loop.c
+++ b/util/main-loop.c
@@ -30,7 +30,7 @@
#include "exec/icount.h"
#include "system/replay.h"
#include "qemu/main-loop.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "block/thread-pool.h"
#include "qemu/error-report.h"
#include "qemu/queue.h"
diff --git a/util/qemu-co-timeout.c b/util/qemu-co-timeout.c
index 00cd335649f..6774440b287 100644
--- a/util/qemu-co-timeout.c
+++ b/util/qemu-co-timeout.c
@@ -25,7 +25,7 @@
#include "qemu/osdep.h"
#include "qemu/coroutine.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
typedef struct QemuCoTimeoutState {
CoroutineEntry *entry;
diff --git a/util/qemu-coroutine-lock.c b/util/qemu-coroutine-lock.c
index 2534435388f..fac91582b5f 100644
--- a/util/qemu-coroutine-lock.c
+++ b/util/qemu-coroutine-lock.c
@@ -30,7 +30,7 @@
#include "qemu/coroutine_int.h"
#include "qemu/processor.h"
#include "qemu/queue.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
#include "trace.h"
void qemu_co_queue_init(CoQueue *queue)
diff --git a/util/qemu-coroutine-sleep.c b/util/qemu-coroutine-sleep.c
index af59f9af984..edef1172844 100644
--- a/util/qemu-coroutine-sleep.c
+++ b/util/qemu-coroutine-sleep.c
@@ -14,7 +14,7 @@
#include "qemu/osdep.h"
#include "qemu/coroutine_int.h"
#include "qemu/timer.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
static const char *qemu_co_sleep_ns__scheduled = "qemu_co_sleep_ns";
diff --git a/util/qemu-coroutine.c b/util/qemu-coroutine.c
index 64d6264fc74..d17135f585a 100644
--- a/util/qemu-coroutine.c
+++ b/util/qemu-coroutine.c
@@ -19,7 +19,7 @@
#include "qemu/coroutine_int.h"
#include "qemu/coroutine-tls.h"
#include "qemu/cutils.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
enum {
COROUTINE_POOL_BATCH_MAX_SIZE = 128,
diff --git a/util/throttle.c b/util/throttle.c
index 9582899da3e..8044f04ffc9 100644
--- a/util/throttle.c
+++ b/util/throttle.c
@@ -26,7 +26,7 @@
#include "qapi/error.h"
#include "qemu/throttle.h"
#include "qemu/timer.h"
-#include "block/aio.h"
+#include "qemu/aio.h"
/* This function make a bucket leak
*
diff --git a/scripts/analyze-inclusions b/scripts/analyze-inclusions
index 50a7d95d9e7..c30e44f02ec 100644
--- a/scripts/analyze-inclusions
+++ b/scripts/analyze-inclusions
@@ -52,7 +52,7 @@ echo $(grep_include -F 'qapi-types.h') files include qapi-types.h
echo $(grep_include -F 'trace/generated-tracers.h') files include generated-tracers.h
echo $(grep_include -F 'qapi/error.h') files include qapi/error.h
echo $(grep_include -F 'qom/object.h') files include qom/object.h
-echo $(grep_include -F 'block/aio.h') files include block/aio.h
+echo $(grep_include -F 'qemu/aio.h') files include block/aio.h
echo $(grep_include -F 'system/memory.h') files include system/memory.h
echo $(grep_include -F 'fpu/softfloat.h') files include fpu/softfloat.h
echo $(grep_include -F 'qemu/bswap.h') files include qemu/bswap.h
--
2.52.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 5/5] block: rename block/aio-wait.h to qemu/aio-wait.h
2025-12-03 18:51 [PATCH 0/5] block: move AioContext and AIOCB out of include/block/ Paolo Bonzini
` (3 preceding siblings ...)
2025-12-03 18:51 ` [PATCH 4/5] block: rename block/aio.h to qemu/aio.h Paolo Bonzini
@ 2025-12-03 18:51 ` Paolo Bonzini
2025-12-04 8:36 ` Philippe Mathieu-Daudé
4 siblings, 1 reply; 14+ messages in thread
From: Paolo Bonzini @ 2025-12-03 18:51 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, kwolf
AIO_WAIT_WHILE is used even outside the block layer; move the header file
out of block/ just like the implementation is in util/.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
MAINTAINERS | 2 +-
include/block/block-io.h | 2 +-
include/{block => qemu}/aio-wait.h | 0
block/io.c | 2 +-
blockjob.c | 2 +-
io/channel.c | 2 +-
job.c | 2 +-
net/colo-compare.c | 2 +-
net/filter-mirror.c | 2 +-
util/aio-wait.c | 2 +-
util/vhost-user-server.c | 2 +-
hw/display/apple-gfx-mmio.m | 2 +-
hw/display/apple-gfx.m | 2 +-
13 files changed, 12 insertions(+), 12 deletions(-)
rename include/{block => qemu}/aio-wait.h (100%)
diff --git a/MAINTAINERS b/MAINTAINERS
index 24cf2946e77..4582c5f72a9 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3072,7 +3072,7 @@ F: util/defer-call.c
F: util/fdmon-*.c
F: block/io.c
F: include/qemu/aio.h
-F: include/block/aio-wait.h
+F: include/qemu/aio-wait.h
F: include/qemu/defer-call.h
F: scripts/qemugdb/aio.py
F: tests/unit/test-fdmon-epoll.c
diff --git a/include/block/block-io.h b/include/block/block-io.h
index 7925e2241e6..d34d846bb2a 100644
--- a/include/block/block-io.h
+++ b/include/block/block-io.h
@@ -25,7 +25,7 @@
#define BLOCK_IO_H
#include "qemu/aiocb.h"
-#include "block/aio-wait.h"
+#include "qemu/aio-wait.h"
#include "block/block-common.h"
#include "block/graph-lock.h"
#include "qemu/coroutine.h"
diff --git a/include/block/aio-wait.h b/include/qemu/aio-wait.h
similarity index 100%
rename from include/block/aio-wait.h
rename to include/qemu/aio-wait.h
diff --git a/block/io.c b/block/io.c
index c4a43013210..cace297f226 100644
--- a/block/io.c
+++ b/block/io.c
@@ -25,7 +25,7 @@
#include "qemu/osdep.h"
#include "trace.h"
#include "system/block-backend.h"
-#include "block/aio-wait.h"
+#include "qemu/aio-wait.h"
#include "block/blockjob.h"
#include "block/blockjob_int.h"
#include "block/block_int.h"
diff --git a/blockjob.c b/blockjob.c
index db7c3a69a0c..f3b11cc7a19 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -24,7 +24,7 @@
*/
#include "qemu/osdep.h"
-#include "block/aio-wait.h"
+#include "qemu/aio-wait.h"
#include "block/block.h"
#include "block/blockjob_int.h"
#include "block/block_int.h"
diff --git a/io/channel.c b/io/channel.c
index b7966abc4f0..cc02d997a4d 100644
--- a/io/channel.c
+++ b/io/channel.c
@@ -19,7 +19,7 @@
*/
#include "qemu/osdep.h"
-#include "block/aio-wait.h"
+#include "qemu/aio-wait.h"
#include "io/channel.h"
#include "qapi/error.h"
#include "qemu/main-loop.h"
diff --git a/job.c b/job.c
index 0653bc2ba69..e7479084726 100644
--- a/job.c
+++ b/job.c
@@ -28,7 +28,7 @@
#include "qemu/job.h"
#include "qemu/id.h"
#include "qemu/main-loop.h"
-#include "block/aio-wait.h"
+#include "qemu/aio-wait.h"
#include "trace/trace-root.h"
#include "qapi/qapi-events-job.h"
diff --git a/net/colo-compare.c b/net/colo-compare.c
index 95018b47049..c356419d6a8 100644
--- a/net/colo-compare.c
+++ b/net/colo-compare.c
@@ -30,7 +30,7 @@
#include "migration/colo.h"
#include "util.h"
-#include "block/aio-wait.h"
+#include "qemu/aio-wait.h"
#include "qemu/coroutine.h"
#define TYPE_COLO_COMPARE "colo-compare"
diff --git a/net/filter-mirror.c b/net/filter-mirror.c
index 8e01e98f405..d2bfde42e85 100644
--- a/net/filter-mirror.c
+++ b/net/filter-mirror.c
@@ -20,7 +20,7 @@
#include "chardev/char-fe.h"
#include "qemu/iov.h"
#include "qemu/sockets.h"
-#include "block/aio-wait.h"
+#include "qemu/aio-wait.h"
#define TYPE_FILTER_MIRROR "filter-mirror"
typedef struct MirrorState MirrorState;
diff --git a/util/aio-wait.c b/util/aio-wait.c
index b5336cf5fd2..53913c4bd1b 100644
--- a/util/aio-wait.c
+++ b/util/aio-wait.c
@@ -24,7 +24,7 @@
#include "qemu/osdep.h"
#include "qemu/main-loop.h"
-#include "block/aio-wait.h"
+#include "qemu/aio-wait.h"
AioWait global_aio_wait;
diff --git a/util/vhost-user-server.c b/util/vhost-user-server.c
index 1dbe409f829..1536d97baf8 100644
--- a/util/vhost-user-server.c
+++ b/util/vhost-user-server.c
@@ -11,7 +11,7 @@
#include "qemu/error-report.h"
#include "qemu/main-loop.h"
#include "qemu/vhost-user-server.h"
-#include "block/aio-wait.h"
+#include "qemu/aio-wait.h"
/*
* Theory of operation:
diff --git a/hw/display/apple-gfx-mmio.m b/hw/display/apple-gfx-mmio.m
index 983fc1724a0..58beaadd1f1 100644
--- a/hw/display/apple-gfx-mmio.m
+++ b/hw/display/apple-gfx-mmio.m
@@ -14,7 +14,7 @@
#include "qemu/osdep.h"
#include "qemu/log.h"
-#include "block/aio-wait.h"
+#include "qemu/aio-wait.h"
#include "hw/core/sysbus.h"
#include "hw/core/irq.h"
#include "apple-gfx.h"
diff --git a/hw/display/apple-gfx.m b/hw/display/apple-gfx.m
index 174d56ae05b..e0a765fcb1f 100644
--- a/hw/display/apple-gfx.m
+++ b/hw/display/apple-gfx.m
@@ -17,7 +17,7 @@
#include "qemu/log.h"
#include "qapi/visitor.h"
#include "qapi/error.h"
-#include "block/aio-wait.h"
+#include "qemu/aio-wait.h"
#include "system/address-spaces.h"
#include "system/dma.h"
#include "migration/blocker.h"
--
2.52.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 1/5] hw: add missing includes hidden by block/aio.h
2025-12-03 18:51 ` [PATCH 1/5] hw: add missing includes hidden by block/aio.h Paolo Bonzini
@ 2025-12-04 8:32 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 14+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-12-04 8:32 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel; +Cc: qemu-block, kwolf
On 3/12/25 19:51, Paolo Bonzini wrote:
> hw/qdev/core.h being included by core headers means that it was quite
> easy to forget including it, or anything that hw/qdev/core.h included.
> Add the missing inclusions.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> include/hw/char/serial.h | 1 +
> hw/virtio/iothread-vq-mapping.c | 1 +
> 2 files changed, 2 insertions(+)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/5] block: extract include/qemu/aiocb.h out of include/block/aio.h
2025-12-03 18:51 ` [PATCH 2/5] block: extract include/qemu/aiocb.h out of include/block/aio.h Paolo Bonzini
@ 2025-12-04 8:33 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 14+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-12-04 8:33 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel; +Cc: qemu-block, kwolf
On 3/12/25 19:51, Paolo Bonzini wrote:
> Create a new header corresponding to functions defined in
> util/aiocb.c, and include it whenever AIOCBs are used but
> AioContext is not.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> fsdev/qemu-fsdev-throttle.h | 1 -
> include/block/aio.h | 21 -----------------
> include/block/block-global-state.h | 1 +
> include/block/block-io.h | 1 +
> include/block/block_int-common.h | 2 +-
> include/block/raw-aio.h | 1 +
> include/block/thread-pool.h | 1 +
> include/hw/ide/ide-dma.h | 2 +-
> include/hw/scsi/scsi.h | 1 +
> include/qemu/aiocb.h | 38 ++++++++++++++++++++++++++++++
> include/qemu/job.h | 1 +
> include/qemu/throttle.h | 1 +
> block/win32-aio.c | 1 +
> hw/core/ptimer.c | 1 -
> hw/misc/i2c-echo.c | 1 -
> hw/virtio/virtio-pmem.c | 1 -
> scsi/qemu-pr-helper.c | 1 -
> tests/unit/test-thread-pool.c | 1 +
> ui/input-linux.c | 1 -
> ui/vnc-jobs.c | 1 -
> util/aiocb.c | 2 +-
> 21 files changed, 50 insertions(+), 31 deletions(-)
> create mode 100644 include/qemu/aiocb.h
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/5] block: reduce files included by block/aio.h
2025-12-03 18:51 ` [PATCH 3/5] block: reduce files included by block/aio.h Paolo Bonzini
@ 2025-12-04 8:35 ` Philippe Mathieu-Daudé
2025-12-04 9:25 ` Paolo Bonzini
0 siblings, 1 reply; 14+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-12-04 8:35 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel; +Cc: qemu-block, kwolf
On 3/12/25 19:51, Paolo Bonzini wrote:
> Avoid including all of qdev everywhere (the hw/core/qdev.h header in fact
> brings in a lot more headers too), instead declare a couple structs for
> which only a pointer type is needed.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> include/block/aio.h | 7 +++----
> include/block/block-copy.h | 1 +
> include/block/block-global-state.h | 1 +
> include/block/block-io.h | 1 +
> include/block/dirty-bitmap.h | 1 +
> include/hw/core/qdev.h | 6 +-----
> include/qemu/job.h | 1 +
> include/qemu/main-loop.h | 2 +-
> include/qemu/mem-reentrancy.h | 10 ++++++++++
> net/net.c | 1 +
> util/async.c | 1 +
> 11 files changed, 22 insertions(+), 10 deletions(-)
> create mode 100644 include/qemu/mem-reentrancy.h
>
> diff --git a/include/block/aio.h b/include/block/aio.h
> index 59c56d695ee..8cca2360d1a 100644
> --- a/include/block/aio.h
> +++ b/include/block/aio.h
> @@ -23,9 +23,8 @@
> #include "qemu/lockcnt.h"
> #include "qemu/thread.h"
> #include "qemu/timer.h"
> -#include "block/graph-lock.h"
> -#include "hw/core/qdev.h"
>
> +struct MemReentrancyGuard;
>
> typedef struct AioHandler AioHandler;
> typedef QLIST_HEAD(, AioHandler) AioHandlerList;
> @@ -211,7 +210,7 @@ struct AioContext {
> * of nodes and edges from block graph while some
> * other thread is traversing it.
> */
> - BdrvGraphRWlock *bdrv_graph;
> + struct BdrvGraphRWlock *bdrv_graph;
>
> /* The list of registered AIO handlers. Protected by ctx->list_lock. */
> AioHandlerList aio_handlers;
> @@ -393,7 +392,7 @@ void aio_bh_schedule_oneshot_full(AioContext *ctx, QEMUBHFunc *cb, void *opaque,
> * device-reentrancy issues
> */
> QEMUBH *aio_bh_new_full(AioContext *ctx, QEMUBHFunc *cb, void *opaque,
> - const char *name, MemReentrancyGuard *reentrancy_guard);
> + const char *name, struct MemReentrancyGuard *reentrancy_guard);
>
I suppose these changes were before you move the declarations to their
own "qemu/mem-reentrancy.h" header?
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 4/5] block: rename block/aio.h to qemu/aio.h
2025-12-03 18:51 ` [PATCH 4/5] block: rename block/aio.h to qemu/aio.h Paolo Bonzini
@ 2025-12-04 8:35 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 14+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-12-04 8:35 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel; +Cc: qemu-block, kwolf
On 3/12/25 19:51, Paolo Bonzini wrote:
> AioContexts are used as a generic event loop even outside the block
> layer; move the header file out of block/ just like the implementation
> is in util/.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> MAINTAINERS | 2 +-
> docs/devel/multiple-iothreads.rst | 4 ++--
> include/block/aio-wait.h | 2 +-
> include/block/raw-aio.h | 2 +-
> include/block/thread-pool.h | 2 +-
> include/hw/scsi/scsi.h | 2 +-
> include/hw/virtio/virtio.h | 2 +-
> include/io/channel.h | 2 +-
> include/{block => qemu}/aio.h | 0
> include/qemu/job.h | 2 +-
> include/qemu/main-loop.h | 2 +-
> include/qemu/throttle.h | 2 +-
> include/scsi/pr-manager.h | 2 +-
> include/system/event-loop-base.h | 2 +-
> include/system/iothread.h | 2 +-
> include/system/replay.h | 2 +-
> tests/unit/iothread.h | 2 +-
> util/aio-posix.h | 2 +-
> block/aio_task.c | 2 +-
> block/export/fuse.c | 2 +-
> block/io_uring.c | 2 +-
> block/linux-aio.c | 2 +-
> block/win32-aio.c | 2 +-
> iothread.c | 2 +-
> qapi/qmp-dispatch.c | 2 +-
> replay/replay-events.c | 2 +-
> scsi/pr-manager.c | 2 +-
> stubs/linux-aio.c | 2 +-
> stubs/replay-tools.c | 2 +-
> tests/unit/iothread.c | 2 +-
> tests/unit/test-aio-multithread.c | 2 +-
> tests/unit/test-aio.c | 2 +-
> tests/unit/test-nested-aio-poll.c | 2 +-
> tests/unit/test-thread-pool.c | 2 +-
> tests/unit/test-throttle.c | 2 +-
> util/async.c | 2 +-
> util/main-loop.c | 2 +-
> util/qemu-co-timeout.c | 2 +-
> util/qemu-coroutine-lock.c | 2 +-
> util/qemu-coroutine-sleep.c | 2 +-
> util/qemu-coroutine.c | 2 +-
> util/throttle.c | 2 +-
> scripts/analyze-inclusions | 2 +-
> 43 files changed, 43 insertions(+), 43 deletions(-)
> rename include/{block => qemu}/aio.h (100%)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/5] block: rename block/aio-wait.h to qemu/aio-wait.h
2025-12-03 18:51 ` [PATCH 5/5] block: rename block/aio-wait.h to qemu/aio-wait.h Paolo Bonzini
@ 2025-12-04 8:36 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 14+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-12-04 8:36 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel; +Cc: qemu-block, kwolf
On 3/12/25 19:51, Paolo Bonzini wrote:
> AIO_WAIT_WHILE is used even outside the block layer; move the header file
> out of block/ just like the implementation is in util/.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> MAINTAINERS | 2 +-
> include/block/block-io.h | 2 +-
> include/{block => qemu}/aio-wait.h | 0
> block/io.c | 2 +-
> blockjob.c | 2 +-
> io/channel.c | 2 +-
> job.c | 2 +-
> net/colo-compare.c | 2 +-
> net/filter-mirror.c | 2 +-
> util/aio-wait.c | 2 +-
> util/vhost-user-server.c | 2 +-
> hw/display/apple-gfx-mmio.m | 2 +-
> hw/display/apple-gfx.m | 2 +-
> 13 files changed, 12 insertions(+), 12 deletions(-)
> rename include/{block => qemu}/aio-wait.h (100%)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/5] block: reduce files included by block/aio.h
2025-12-04 8:35 ` Philippe Mathieu-Daudé
@ 2025-12-04 9:25 ` Paolo Bonzini
2025-12-04 17:03 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 14+ messages in thread
From: Paolo Bonzini @ 2025-12-04 9:25 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel; +Cc: qemu-block, kwolf
On 12/4/25 09:35, Philippe Mathieu-Daudé wrote:
> On 3/12/25 19:51, Paolo Bonzini wrote:
>> Avoid including all of qdev everywhere (the hw/core/qdev.h header in fact
>> brings in a lot more headers too), instead declare a couple structs for
>> which only a pointer type is needed.
>>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>> include/block/aio.h | 7 +++----
>> include/block/block-copy.h | 1 +
>> include/block/block-global-state.h | 1 +
>> include/block/block-io.h | 1 +
>> include/block/dirty-bitmap.h | 1 +
>> include/hw/core/qdev.h | 6 +-----
>> include/qemu/job.h | 1 +
>> include/qemu/main-loop.h | 2 +-
>> include/qemu/mem-reentrancy.h | 10 ++++++++++
>> net/net.c | 1 +
>> util/async.c | 1 +
>> 11 files changed, 22 insertions(+), 10 deletions(-)
>> create mode 100644 include/qemu/mem-reentrancy.h
>>
>> diff --git a/include/block/aio.h b/include/block/aio.h
>> index 59c56d695ee..8cca2360d1a 100644
>> --- a/include/block/aio.h
>> +++ b/include/block/aio.h
>> @@ -23,9 +23,8 @@
>> #include "qemu/lockcnt.h"
>> #include "qemu/thread.h"
>> #include "qemu/timer.h"
>> -#include "block/graph-lock.h"
>> -#include "hw/core/qdev.h"
>> +struct MemReentrancyGuard;
>> typedef struct AioHandler AioHandler;
>> typedef QLIST_HEAD(, AioHandler) AioHandlerList;
>> @@ -211,7 +210,7 @@ struct AioContext {
>> * of nodes and edges from block graph while some
>> * other thread is traversing it.
>> */
>> - BdrvGraphRWlock *bdrv_graph;
>> + struct BdrvGraphRWlock *bdrv_graph;
>> /* The list of registered AIO handlers. Protected by ctx-
>> >list_lock. */
>> AioHandlerList aio_handlers;
>> @@ -393,7 +392,7 @@ void aio_bh_schedule_oneshot_full(AioContext *ctx,
>> QEMUBHFunc *cb, void *opaque,
>> * device-reentrancy issues
>> */
>> QEMUBH *aio_bh_new_full(AioContext *ctx, QEMUBHFunc *cb, void *opaque,
>> - const char *name, MemReentrancyGuard
>> *reentrancy_guard);
>> + const char *name, struct MemReentrancyGuard
>> *reentrancy_guard);
>
> I suppose these changes were before you move the declarations to their
> own "qemu/mem-reentrancy.h" header?
Yes, but also qemu/mem-reentrancy.h is not included here.
Paolo
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/5] block: reduce files included by block/aio.h
2025-12-04 9:25 ` Paolo Bonzini
@ 2025-12-04 17:03 ` Philippe Mathieu-Daudé
2025-12-04 17:46 ` Paolo Bonzini
0 siblings, 1 reply; 14+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-12-04 17:03 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel; +Cc: qemu-block, kwolf
On 4/12/25 10:25, Paolo Bonzini wrote:
> On 12/4/25 09:35, Philippe Mathieu-Daudé wrote:
>> On 3/12/25 19:51, Paolo Bonzini wrote:
>>> Avoid including all of qdev everywhere (the hw/core/qdev.h header in
>>> fact
>>> brings in a lot more headers too), instead declare a couple structs for
>>> which only a pointer type is needed.
>>>
>>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>>> ---
>>> include/block/aio.h | 7 +++----
>>> include/block/block-copy.h | 1 +
>>> include/block/block-global-state.h | 1 +
>>> include/block/block-io.h | 1 +
>>> include/block/dirty-bitmap.h | 1 +
>>> include/hw/core/qdev.h | 6 +-----
>>> include/qemu/job.h | 1 +
>>> include/qemu/main-loop.h | 2 +-
>>> include/qemu/mem-reentrancy.h | 10 ++++++++++
>>> net/net.c | 1 +
>>> util/async.c | 1 +
>>> 11 files changed, 22 insertions(+), 10 deletions(-)
>>> create mode 100644 include/qemu/mem-reentrancy.h
>>>
>>> diff --git a/include/block/aio.h b/include/block/aio.h
>>> index 59c56d695ee..8cca2360d1a 100644
>>> --- a/include/block/aio.h
>>> +++ b/include/block/aio.h
>>> @@ -23,9 +23,8 @@
>>> #include "qemu/lockcnt.h"
>>> #include "qemu/thread.h"
>>> #include "qemu/timer.h"
>>> -#include "block/graph-lock.h"
>>> -#include "hw/core/qdev.h"
>>> +struct MemReentrancyGuard;
>>> typedef struct AioHandler AioHandler;
>>> typedef QLIST_HEAD(, AioHandler) AioHandlerList;
>>> @@ -211,7 +210,7 @@ struct AioContext {
>>> * of nodes and edges from block graph while some
>>> * other thread is traversing it.
>>> */
>>> - BdrvGraphRWlock *bdrv_graph;
>>> + struct BdrvGraphRWlock *bdrv_graph;
>>> /* The list of registered AIO handlers. Protected by ctx-
>>> >list_lock. */
>>> AioHandlerList aio_handlers;
>>> @@ -393,7 +392,7 @@ void aio_bh_schedule_oneshot_full(AioContext
>>> *ctx, QEMUBHFunc *cb, void *opaque,
>>> * device-reentrancy issues
>>> */
>>> QEMUBH *aio_bh_new_full(AioContext *ctx, QEMUBHFunc *cb, void *opaque,
>>> - const char *name, MemReentrancyGuard
>>> *reentrancy_guard);
>>> + const char *name, struct MemReentrancyGuard
>>> *reentrancy_guard);
>>
>> I suppose these changes were before you move the declarations to their
>> own "qemu/mem-reentrancy.h" header?
>
> Yes, but also qemu/mem-reentrancy.h is not included here.
We want to also include it instead, right? (No need to forward declare)
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/5] block: reduce files included by block/aio.h
2025-12-04 17:03 ` Philippe Mathieu-Daudé
@ 2025-12-04 17:46 ` Paolo Bonzini
0 siblings, 0 replies; 14+ messages in thread
From: Paolo Bonzini @ 2025-12-04 17:46 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel; +Cc: qemu-block, kwolf
On 12/4/25 18:03, Philippe Mathieu-Daudé wrote:
>>>> QEMUBH *aio_bh_new_full(AioContext *ctx, QEMUBHFunc *cb, void
>>>> *opaque,
>>>> - const char *name, MemReentrancyGuard
>>>> *reentrancy_guard);
>>>> + const char *name, struct MemReentrancyGuard
>>>> *reentrancy_guard);
>>>
>>> I suppose these changes were before you move the declarations to their
>>> own "qemu/mem-reentrancy.h" header?
>>
>> Yes, but also qemu/mem-reentrancy.h is not included here.
>
> We want to also include it instead, right? (No need to forward declare)
Why? The struct is opaque, and as a general principle avoiding
header-from-header inclusions reduces compile times.
Paolo
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2025-12-04 17:47 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-03 18:51 [PATCH 0/5] block: move AioContext and AIOCB out of include/block/ Paolo Bonzini
2025-12-03 18:51 ` [PATCH 1/5] hw: add missing includes hidden by block/aio.h Paolo Bonzini
2025-12-04 8:32 ` Philippe Mathieu-Daudé
2025-12-03 18:51 ` [PATCH 2/5] block: extract include/qemu/aiocb.h out of include/block/aio.h Paolo Bonzini
2025-12-04 8:33 ` Philippe Mathieu-Daudé
2025-12-03 18:51 ` [PATCH 3/5] block: reduce files included by block/aio.h Paolo Bonzini
2025-12-04 8:35 ` Philippe Mathieu-Daudé
2025-12-04 9:25 ` Paolo Bonzini
2025-12-04 17:03 ` Philippe Mathieu-Daudé
2025-12-04 17:46 ` Paolo Bonzini
2025-12-03 18:51 ` [PATCH 4/5] block: rename block/aio.h to qemu/aio.h Paolo Bonzini
2025-12-04 8:35 ` Philippe Mathieu-Daudé
2025-12-03 18:51 ` [PATCH 5/5] block: rename block/aio-wait.h to qemu/aio-wait.h Paolo Bonzini
2025-12-04 8:36 ` Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).