qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [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).