All of lore.kernel.org
 help / color / mirror / Atom feed
* [PULL 00/12] Header cleanup patches for 2023-01-20
@ 2023-01-20  7:01 Markus Armbruster
  2023-01-20  7:01 ` [PULL 01/12] coroutine: Clean up superfluous inclusion of qemu/coroutine.h Markus Armbruster
                   ` (12 more replies)
  0 siblings, 13 replies; 17+ messages in thread
From: Markus Armbruster @ 2023-01-20  7:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell

The following changes since commit 7ec8aeb6048018680c06fb9205c01ca6bda08846:

  Merge tag 'pull-tpm-2023-01-17-1' of https://github.com/stefanberger/qemu-tpm into staging (2023-01-17 15:47:53 +0000)

are available in the Git repository at:

  https://repo.or.cz/qemu/armbru.git tags/pull-include-2023-01-20

for you to fetch changes up to b6c80037ed3ba275eea2b33bc17e36af2b89813a:

  include/hw/ppc include/hw/pci-host: Drop extra typedefs (2023-01-20 07:25:22 +0100)

----------------------------------------------------------------
Header cleanup patches for 2023-01-20

----------------------------------------------------------------
Markus Armbruster (12):
      coroutine: Clean up superfluous inclusion of qemu/coroutine.h
      coroutine: Move coroutine_fn to qemu/osdep.h, trim includes
      coroutine: Clean up superfluous inclusion of qemu/lockable.h
      coroutine: Split qemu/coroutine-core.h off qemu/coroutine.h
      coroutine: Use Coroutine typedef name instead of structure tag
      include/block: Untangle inclusion loops
      hw/sparc64/niagara: Use blk_name() instead of open-coding it
      include/hw/block: Include hw/block/block.h where needed
      include/hw/ppc: Split pnv_chip.h off pnv.h
      include/hw/ppc: Supply a few missing includes
      include/hw/ppc: Don't include hw/pci-host/pnv_phb.h from pnv.h
      include/hw/ppc include/hw/pci-host: Drop extra typedefs

 accel/tcg/debuginfo.h                  |   2 +
 crypto/block-luks-priv.h               |   1 -
 hw/9pfs/coth.h                         |   2 +-
 hw/pci-host/pnv_phb.h                  |   2 +-
 include/block/aio.h                    |   9 +-
 include/block/aio_task.h               |   2 -
 include/block/block-common.h           |  10 +--
 include/block/block-copy.h             |   4 +-
 include/block/block-global-state.h     |   4 +-
 include/block/block-hmp-cmds.h         |   2 +
 include/block/block-io.h               |   5 +-
 include/block/block.h                  |   4 +-
 include/block/block_backup.h           |   2 +-
 include/block/block_int-common.h       |  14 ++-
 include/block/block_int-global-state.h |   5 +-
 include/block/block_int-io.h           |   4 +-
 include/block/block_int.h              |   4 +-
 include/block/blockjob.h               |   2 +-
 include/block/blockjob_int.h           |   1 -
 include/block/dirty-bitmap.h           |   1 +
 include/block/graph-lock.h             |   2 -
 include/block/qapi.h                   |   2 +-
 include/block/raw-aio.h                |   1 -
 include/block/thread-pool.h            |   2 +-
 include/block/throttle-groups.h        |   2 +-
 include/hw/block/swim.h                |   1 +
 include/hw/pci-host/pnv_phb3.h         |   1 -
 include/hw/pci-host/pnv_phb4.h         |   5 +-
 include/hw/ppc/pnv.h                   | 146 +------------------------------
 include/hw/ppc/pnv_chip.h              | 147 +++++++++++++++++++++++++++++++
 include/hw/ppc/pnv_core.h              |   3 +-
 include/hw/ppc/pnv_homer.h             |   2 +-
 include/hw/ppc/pnv_lpc.h               |  11 +--
 include/hw/ppc/pnv_occ.h               |   3 +-
 include/hw/ppc/pnv_pnor.h              |   2 +-
 include/hw/ppc/pnv_sbe.h               |   3 +-
 include/hw/ppc/pnv_xive.h              |   7 +-
 include/hw/ppc/pnv_xscom.h             |   3 +-
 include/hw/ppc/xive2.h                 |   2 +
 include/hw/ppc/xive2_regs.h            |   2 +
 include/io/channel.h                   |   2 +-
 include/monitor/hmp.h                  |   1 -
 include/qemu/coroutine-core.h          | 154 +++++++++++++++++++++++++++++++++
 include/qemu/coroutine.h               | 113 ++----------------------
 include/qemu/lockable.h                |   2 +-
 include/qemu/osdep.h                   |  16 ++++
 include/qemu/progress_meter.h          |   2 +-
 include/qemu/typedefs.h                |   1 -
 include/scsi/pr-manager.h              |   1 -
 include/sysemu/block-backend-io.h      |   1 +
 nbd/nbd-internal.h                     |   1 -
 block.c                                |   1 +
 block/amend.c                          |   1 +
 block/backup.c                         |   1 +
 block/blkdebug.c                       |   1 +
 block/blklogwrites.c                   |   1 +
 block/blkreplay.c                      |   1 +
 block/blkverify.c                      |   1 +
 block/block-copy.c                     |   4 +
 block/bochs.c                          |   1 +
 block/cloop.c                          |   1 +
 block/copy-before-write.c              |   1 +
 block/copy-on-read.c                   |   1 +
 block/curl.c                           |   1 +
 block/dirty-bitmap.c                   |   2 +
 block/dmg.c                            |   1 +
 block/export/fuse.c                    |   3 +-
 block/file-posix.c                     |   1 +
 block/file-win32.c                     |   1 +
 block/filter-compress.c                |   1 +
 block/gluster.c                        |   1 +
 block/io.c                             |   1 +
 block/iscsi.c                          |   1 +
 block/mirror.c                         |   1 +
 block/monitor/bitmap-qmp-cmds.c        |   2 +
 block/nfs.c                            |   1 +
 block/null.c                           |   1 +
 block/nvme.c                           |   1 +
 block/parallels-ext.c                  |   2 +
 block/preallocate.c                    |   1 +
 block/progress_meter.c                 |   2 +
 block/qapi-sysemu.c                    |   1 +
 block/qapi.c                           |   1 +
 block/qcow2-bitmap.c                   |   2 +
 block/qcow2-cache.c                    |   1 +
 block/qcow2-cluster.c                  |   1 +
 block/qcow2-refcount.c                 |   1 +
 block/qcow2-threads.c                  |   1 +
 block/qcow2.c                          |   1 +
 block/qed-check.c                      |   1 +
 block/qed-table.c                      |   1 +
 block/raw-format.c                     |   1 +
 block/rbd.c                            |   1 +
 block/ssh.c                            |   1 +
 block/throttle.c                       |   2 +
 block/vhdx-log.c                       |   1 +
 block/vvfat.c                          |   1 +
 block/win32-aio.c                      |   1 +
 block/write-threshold.c                |   1 +
 blockdev.c                             |   1 +
 blockjob.c                             |   2 +-
 crypto/block-luks.c                    |   1 -
 hw/9pfs/codir.c                        |   1 -
 hw/9pfs/cofile.c                       |   1 -
 hw/9pfs/cofs.c                         |   1 -
 hw/9pfs/coxattr.c                      |   1 -
 hw/block/block.c                       |   1 +
 hw/intc/pnv_xive.c                     |   1 +
 hw/intc/pnv_xive2.c                    |   1 +
 hw/pci-host/pnv_phb3.c                 |   1 +
 hw/pci-host/pnv_phb4_pec.c             |   1 +
 hw/ppc/pnv.c                           |   3 +
 hw/ppc/pnv_core.c                      |   1 +
 hw/ppc/pnv_homer.c                     |   1 +
 hw/ppc/pnv_lpc.c                       |   1 +
 hw/ppc/pnv_psi.c                       |   1 +
 hw/ppc/pnv_xscom.c                     |   1 +
 hw/sparc64/niagara.c                   |   5 +-
 hw/virtio/virtio-pmem.c                |   1 +
 migration/block-dirty-bitmap.c         |   1 +
 migration/block.c                      |   1 +
 migration/savevm.c                     |   1 +
 monitor/qmp-cmds.c                     |   1 +
 nbd/client-connection.c                |   1 +
 nbd/server.c                           |   2 +
 qemu-img.c                             |   1 +
 softmmu/cpus.c                         |   1 +
 softmmu/physmem.c                      |   1 +
 storage-daemon/qemu-storage-daemon.c   |   1 +
 target/i386/kvm/kvm.c                  |   1 +
 tests/unit/test-aio.c                  |   2 +-
 tests/unit/test-bdrv-drain.c           |   2 +-
 tests/unit/test-block-iothread.c       |   1 +
 tests/unit/test-coroutine.c            |   2 -
 tests/unit/test-vmstate.c              |   1 -
 ui/console.c                           |   1 +
 util/async.c                           |   4 +-
 util/qemu-coroutine-lock.c             |   1 -
 util/qemu-coroutine-sleep.c            |   1 -
 util/qemu-coroutine.c                  |   1 -
 scripts/block-coroutine-wrapper.py     |   3 +-
 141 files changed, 494 insertions(+), 344 deletions(-)
 create mode 100644 include/hw/ppc/pnv_chip.h
 create mode 100644 include/qemu/coroutine-core.h

-- 
2.39.0



^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PULL 01/12] coroutine: Clean up superfluous inclusion of qemu/coroutine.h
  2023-01-20  7:01 [PULL 00/12] Header cleanup patches for 2023-01-20 Markus Armbruster
@ 2023-01-20  7:01 ` Markus Armbruster
  2023-01-20  7:01 ` [PULL 02/12] coroutine: Move coroutine_fn to qemu/osdep.h, trim includes Markus Armbruster
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 17+ messages in thread
From: Markus Armbruster @ 2023-01-20  7:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, Stefan Hajnoczi

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20221221131435.3851212-2-armbru@redhat.com>
---
 crypto/block-luks-priv.h    | 1 -
 include/block/raw-aio.h     | 1 -
 include/scsi/pr-manager.h   | 1 -
 nbd/nbd-internal.h          | 1 -
 blockjob.c                  | 1 -
 crypto/block-luks.c         | 1 -
 hw/9pfs/codir.c             | 1 -
 hw/9pfs/cofile.c            | 1 -
 hw/9pfs/cofs.c              | 1 -
 hw/9pfs/coxattr.c           | 1 -
 tests/unit/test-coroutine.c | 1 -
 tests/unit/test-vmstate.c   | 1 -
 util/qemu-coroutine-lock.c  | 1 -
 util/qemu-coroutine-sleep.c | 1 -
 util/qemu-coroutine.c       | 1 -
 15 files changed, 15 deletions(-)

diff --git a/crypto/block-luks-priv.h b/crypto/block-luks-priv.h
index 90a20d432b..dc2dd14e52 100644
--- a/crypto/block-luks-priv.h
+++ b/crypto/block-luks-priv.h
@@ -31,7 +31,6 @@
 #include "crypto/random.h"
 #include "qemu/uuid.h"
 
-#include "qemu/coroutine.h"
 #include "qemu/bitmap.h"
 
 /*
diff --git a/include/block/raw-aio.h b/include/block/raw-aio.h
index 21fc10c4c9..f8cda9df91 100644
--- a/include/block/raw-aio.h
+++ b/include/block/raw-aio.h
@@ -17,7 +17,6 @@
 #define QEMU_RAW_AIO_H
 
 #include "block/aio.h"
-#include "qemu/coroutine.h"
 #include "qemu/iov.h"
 
 /* AIO request types */
diff --git a/include/scsi/pr-manager.h b/include/scsi/pr-manager.h
index e4ecbe00f6..45de28d354 100644
--- a/include/scsi/pr-manager.h
+++ b/include/scsi/pr-manager.h
@@ -5,7 +5,6 @@
 #include "qapi/visitor.h"
 #include "qom/object_interfaces.h"
 #include "block/aio.h"
-#include "qemu/coroutine.h"
 
 #define TYPE_PR_MANAGER "pr-manager"
 
diff --git a/nbd/nbd-internal.h b/nbd/nbd-internal.h
index 1b2141ab4b..df42fef706 100644
--- a/nbd/nbd-internal.h
+++ b/nbd/nbd-internal.h
@@ -13,7 +13,6 @@
 #include "sysemu/block-backend.h"
 #include "io/channel-tls.h"
 
-#include "qemu/coroutine.h"
 #include "qemu/iov.h"
 
 #ifndef _WIN32
diff --git a/blockjob.c b/blockjob.c
index b7daf2a9f6..54b4091a36 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -32,7 +32,6 @@
 #include "qapi/error.h"
 #include "qapi/qapi-events-block-core.h"
 #include "qapi/qmp/qerror.h"
-#include "qemu/coroutine.h"
 #include "qemu/main-loop.h"
 #include "qemu/timer.h"
 
diff --git a/crypto/block-luks.c b/crypto/block-luks.c
index ff9e3945d1..5688783ab1 100644
--- a/crypto/block-luks.c
+++ b/crypto/block-luks.c
@@ -32,7 +32,6 @@
 #include "crypto/random.h"
 #include "qemu/uuid.h"
 
-#include "qemu/coroutine.h"
 #include "qemu/bitmap.h"
 
 /*
diff --git a/hw/9pfs/codir.c b/hw/9pfs/codir.c
index 93ba44fb75..7ba63be489 100644
--- a/hw/9pfs/codir.c
+++ b/hw/9pfs/codir.c
@@ -19,7 +19,6 @@
 #include "qemu/osdep.h"
 #include "fsdev/qemu-fsdev.h"
 #include "qemu/thread.h"
-#include "qemu/coroutine.h"
 #include "qemu/main-loop.h"
 #include "coth.h"
 #include "9p-xattr.h"
diff --git a/hw/9pfs/cofile.c b/hw/9pfs/cofile.c
index 20f93a90e7..9c5344039e 100644
--- a/hw/9pfs/cofile.c
+++ b/hw/9pfs/cofile.c
@@ -19,7 +19,6 @@
 #include "qemu/osdep.h"
 #include "fsdev/qemu-fsdev.h"
 #include "qemu/thread.h"
-#include "qemu/coroutine.h"
 #include "qemu/main-loop.h"
 #include "coth.h"
 
diff --git a/hw/9pfs/cofs.c b/hw/9pfs/cofs.c
index 9d0adc2e78..67e3ae5c5c 100644
--- a/hw/9pfs/cofs.c
+++ b/hw/9pfs/cofs.c
@@ -19,7 +19,6 @@
 #include "qemu/osdep.h"
 #include "fsdev/qemu-fsdev.h"
 #include "qemu/thread.h"
-#include "qemu/coroutine.h"
 #include "qemu/main-loop.h"
 #include "coth.h"
 
diff --git a/hw/9pfs/coxattr.c b/hw/9pfs/coxattr.c
index dbcd09e0fd..cd0f8488ac 100644
--- a/hw/9pfs/coxattr.c
+++ b/hw/9pfs/coxattr.c
@@ -19,7 +19,6 @@
 #include "qemu/osdep.h"
 #include "fsdev/qemu-fsdev.h"
 #include "qemu/thread.h"
-#include "qemu/coroutine.h"
 #include "qemu/main-loop.h"
 #include "coth.h"
 
diff --git a/tests/unit/test-coroutine.c b/tests/unit/test-coroutine.c
index e16b80c245..513800d3db 100644
--- a/tests/unit/test-coroutine.c
+++ b/tests/unit/test-coroutine.c
@@ -12,7 +12,6 @@
  */
 
 #include "qemu/osdep.h"
-#include "qemu/coroutine.h"
 #include "qemu/coroutine_int.h"
 #include "qemu/lockable.h"
 
diff --git a/tests/unit/test-vmstate.c b/tests/unit/test-vmstate.c
index 541bb4f63e..79357b29ca 100644
--- a/tests/unit/test-vmstate.c
+++ b/tests/unit/test-vmstate.c
@@ -29,7 +29,6 @@
 #include "migration/qemu-file-types.h"
 #include "../migration/qemu-file.h"
 #include "../migration/savevm.h"
-#include "qemu/coroutine.h"
 #include "qemu/module.h"
 #include "io/channel-file.h"
 
diff --git a/util/qemu-coroutine-lock.c b/util/qemu-coroutine-lock.c
index 45c6b57374..58f3f77181 100644
--- a/util/qemu-coroutine-lock.c
+++ b/util/qemu-coroutine-lock.c
@@ -27,7 +27,6 @@
  */
 
 #include "qemu/osdep.h"
-#include "qemu/coroutine.h"
 #include "qemu/coroutine_int.h"
 #include "qemu/processor.h"
 #include "qemu/queue.h"
diff --git a/util/qemu-coroutine-sleep.c b/util/qemu-coroutine-sleep.c
index 571ab521ff..af59f9af98 100644
--- a/util/qemu-coroutine-sleep.c
+++ b/util/qemu-coroutine-sleep.c
@@ -12,7 +12,6 @@
  */
 
 #include "qemu/osdep.h"
-#include "qemu/coroutine.h"
 #include "qemu/coroutine_int.h"
 #include "qemu/timer.h"
 #include "block/aio.h"
diff --git a/util/qemu-coroutine.c b/util/qemu-coroutine.c
index 356b746f0b..8494523692 100644
--- a/util/qemu-coroutine.c
+++ b/util/qemu-coroutine.c
@@ -16,7 +16,6 @@
 #include "trace.h"
 #include "qemu/thread.h"
 #include "qemu/atomic.h"
-#include "qemu/coroutine.h"
 #include "qemu/coroutine_int.h"
 #include "qemu/coroutine-tls.h"
 #include "block/aio.h"
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PULL 02/12] coroutine: Move coroutine_fn to qemu/osdep.h, trim includes
  2023-01-20  7:01 [PULL 00/12] Header cleanup patches for 2023-01-20 Markus Armbruster
  2023-01-20  7:01 ` [PULL 01/12] coroutine: Clean up superfluous inclusion of qemu/coroutine.h Markus Armbruster
@ 2023-01-20  7:01 ` Markus Armbruster
  2023-01-20  7:01 ` [PULL 03/12] coroutine: Clean up superfluous inclusion of qemu/lockable.h Markus Armbruster
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 17+ messages in thread
From: Markus Armbruster @ 2023-01-20  7:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, Stefan Hajnoczi

block/block-hmp-cmds.h and qemu/co-shared-resource.h use coroutine_fn
without including qemu/coroutine.h.  They compile only if it's already
included from elsewhere.

I could fix that, but pulling in qemu/coroutine.h and everything it
includes just for a macro that expands into nothing feels silly.
Instead, move the macro to qemu/osdep.h.

Inclusions of qemu/coroutine.h just for coroutine_fn become
superfluous.  Drop them.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20221221131435.3851212-3-armbru@redhat.com>
---
 include/block/aio_task.h     |  2 --
 include/block/block-common.h |  1 -
 include/block/graph-lock.h   |  2 --
 include/monitor/hmp.h        |  1 -
 include/qemu/coroutine.h     | 18 +++++++-----------
 include/qemu/osdep.h         | 16 ++++++++++++++++
 6 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/include/block/aio_task.h b/include/block/aio_task.h
index 50bc1e1817..18a9c41f4e 100644
--- a/include/block/aio_task.h
+++ b/include/block/aio_task.h
@@ -25,8 +25,6 @@
 #ifndef BLOCK_AIO_TASK_H
 #define BLOCK_AIO_TASK_H
 
-#include "qemu/coroutine.h"
-
 typedef struct AioTaskPool AioTaskPool;
 typedef struct AioTask AioTask;
 typedef int coroutine_fn (*AioTaskFunc)(AioTask *task);
diff --git a/include/block/block-common.h b/include/block/block-common.h
index 4749c46a5e..434ffc5d34 100644
--- a/include/block/block-common.h
+++ b/include/block/block-common.h
@@ -27,7 +27,6 @@
 #include "block/aio.h"
 #include "block/aio-wait.h"
 #include "qemu/iov.h"
-#include "qemu/coroutine.h"
 #include "block/accounting.h"
 #include "qemu/hbitmap.h"
 #include "qemu/transactions.h"
diff --git a/include/block/graph-lock.h b/include/block/graph-lock.h
index 4c92cd8edf..3ab924d5e2 100644
--- a/include/block/graph-lock.h
+++ b/include/block/graph-lock.h
@@ -23,8 +23,6 @@
 #include "qemu/osdep.h"
 #include "qemu/clang-tsa.h"
 
-#include "qemu/coroutine.h"
-
 /**
  * Graph Lock API
  * This API provides a rwlock used to protect block layer
diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h
index 27f86399f7..c9e3887737 100644
--- a/include/monitor/hmp.h
+++ b/include/monitor/hmp.h
@@ -15,7 +15,6 @@
 #define HMP_H
 
 #include "qemu/readline.h"
-#include "qemu/coroutine.h"
 #include "qapi/qapi-types-common.h"
 
 bool hmp_handle_error(Monitor *mon, Error *err);
diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h
index 89650a2d7f..2496a4f4ef 100644
--- a/include/qemu/coroutine.h
+++ b/include/qemu/coroutine.h
@@ -26,23 +26,19 @@
  * waiting for events to complete.
  *
  * These functions are re-entrant and may be used outside the global mutex.
- */
-
-/**
- * Mark a function that executes in coroutine context
  *
- * Functions that execute in coroutine context cannot be called directly from
- * normal functions.  In the future it would be nice to enable compiler or
- * static checker support for catching such errors.  This annotation might make
- * it possible and in the meantime it serves as documentation.
- *
- * For example:
+ * Functions that execute in coroutine context cannot be called
+ * directly from normal functions.  Use @coroutine_fn to mark such
+ * functions.  For example:
  *
  *   static void coroutine_fn foo(void) {
  *       ....
  *   }
+ *
+ * In the future it would be nice to have the compiler or a static
+ * checker catch misuse of such functions.  This annotation might make
+ * it possible and in the meantime it serves as documentation.
  */
-#define coroutine_fn
 
 typedef struct Coroutine Coroutine;
 
diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
index bd23a08595..c850001408 100644
--- a/include/qemu/osdep.h
+++ b/include/qemu/osdep.h
@@ -157,6 +157,22 @@ extern "C" {
 
 #include "qemu/typedefs.h"
 
+/**
+ * Mark a function that executes in coroutine context
+ *
+ * Functions that execute in coroutine context cannot be called directly from
+ * normal functions.  In the future it would be nice to enable compiler or
+ * static checker support for catching such errors.  This annotation might make
+ * it possible and in the meantime it serves as documentation.
+ *
+ * For example:
+ *
+ *   static void coroutine_fn foo(void) {
+ *       ....
+ *   }
+ */
+#define coroutine_fn
+
 /*
  * For mingw, as of v6.0.0, the function implementing the assert macro is
  * not marked as noreturn, so the compiler cannot delete code following an
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PULL 03/12] coroutine: Clean up superfluous inclusion of qemu/lockable.h
  2023-01-20  7:01 [PULL 00/12] Header cleanup patches for 2023-01-20 Markus Armbruster
  2023-01-20  7:01 ` [PULL 01/12] coroutine: Clean up superfluous inclusion of qemu/coroutine.h Markus Armbruster
  2023-01-20  7:01 ` [PULL 02/12] coroutine: Move coroutine_fn to qemu/osdep.h, trim includes Markus Armbruster
@ 2023-01-20  7:01 ` Markus Armbruster
  2023-01-20  7:01 ` [PULL 04/12] coroutine: Split qemu/coroutine-core.h off qemu/coroutine.h Markus Armbruster
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 17+ messages in thread
From: Markus Armbruster @ 2023-01-20  7:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, Stefan Hajnoczi

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20221221131435.3851212-4-armbru@redhat.com>
---
 include/qemu/progress_meter.h | 2 +-
 block/progress_meter.c        | 2 ++
 tests/unit/test-coroutine.c   | 1 -
 3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/include/qemu/progress_meter.h b/include/qemu/progress_meter.h
index dadf822bbf..0f2c0a32d2 100644
--- a/include/qemu/progress_meter.h
+++ b/include/qemu/progress_meter.h
@@ -27,7 +27,7 @@
 #ifndef QEMU_PROGRESS_METER_H
 #define QEMU_PROGRESS_METER_H
 
-#include "qemu/lockable.h"
+#include "qemu/thread.h"
 
 typedef struct ProgressMeter {
     /**
diff --git a/block/progress_meter.c b/block/progress_meter.c
index aa2e60248c..31a170a2cd 100644
--- a/block/progress_meter.c
+++ b/block/progress_meter.c
@@ -23,7 +23,9 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
+
 #include "qemu/osdep.h"
+#include "qemu/coroutine.h"
 #include "qemu/progress_meter.h"
 
 void progress_init(ProgressMeter *pm)
diff --git a/tests/unit/test-coroutine.c b/tests/unit/test-coroutine.c
index 513800d3db..b0d21d673a 100644
--- a/tests/unit/test-coroutine.c
+++ b/tests/unit/test-coroutine.c
@@ -13,7 +13,6 @@
 
 #include "qemu/osdep.h"
 #include "qemu/coroutine_int.h"
-#include "qemu/lockable.h"
 
 /*
  * Check that qemu_in_coroutine() works
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PULL 04/12] coroutine: Split qemu/coroutine-core.h off qemu/coroutine.h
  2023-01-20  7:01 [PULL 00/12] Header cleanup patches for 2023-01-20 Markus Armbruster
                   ` (2 preceding siblings ...)
  2023-01-20  7:01 ` [PULL 03/12] coroutine: Clean up superfluous inclusion of qemu/lockable.h Markus Armbruster
@ 2023-01-20  7:01 ` Markus Armbruster
  2023-01-20  7:01 ` [PULL 05/12] coroutine: Use Coroutine typedef name instead of structure tag Markus Armbruster
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 17+ messages in thread
From: Markus Armbruster @ 2023-01-20  7:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell

qemu/coroutine.h and qemu/lockable.h include each other.

They need each other only in macro expansions, so we could simply drop
both inclusions to break the loop, and add suitable includes to files
that expand the macros.

Instead, move a part of qemu/coroutine.h to new qemu/coroutine-core.h
so that qemu/coroutine-core.h doesn't need qemu/lockable.h, and
qemu/lockable.h only needs qemu/coroutine-core.h.  Result:
qemu/coroutine.h includes qemu/lockable.h includes
qemu/coroutine-core.h.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20221221131435.3851212-5-armbru@redhat.com>
[Semantic rebase conflict with 7c10cb38cc "accel/tcg: Add debuginfo
support" resolved]
---
 accel/tcg/debuginfo.h         |   2 +
 hw/9pfs/coth.h                |   2 +-
 include/block/aio.h           |   2 +-
 include/io/channel.h          |   2 +-
 include/qemu/coroutine-core.h | 154 ++++++++++++++++++++++++++++++++++
 include/qemu/coroutine.h      |  97 +--------------------
 include/qemu/lockable.h       |   2 +-
 include/qemu/typedefs.h       |   1 -
 nbd/client-connection.c       |   1 +
 tests/unit/test-aio.c         |   2 +-
 ui/console.c                  |   1 +
 11 files changed, 164 insertions(+), 102 deletions(-)
 create mode 100644 include/qemu/coroutine-core.h

diff --git a/accel/tcg/debuginfo.h b/accel/tcg/debuginfo.h
index 7542cfe6e0..f064e1c144 100644
--- a/accel/tcg/debuginfo.h
+++ b/accel/tcg/debuginfo.h
@@ -7,6 +7,8 @@
 #ifndef ACCEL_TCG_DEBUGINFO_H
 #define ACCEL_TCG_DEBUGINFO_H
 
+#include "qemu/bitops.h"
+
 /*
  * Debuginfo describing a certain address.
  */
diff --git a/hw/9pfs/coth.h b/hw/9pfs/coth.h
index 1a1edbdc2a..2c54249b35 100644
--- a/hw/9pfs/coth.h
+++ b/hw/9pfs/coth.h
@@ -16,7 +16,7 @@
 #define QEMU_9P_COTH_H
 
 #include "qemu/thread.h"
-#include "qemu/coroutine.h"
+#include "qemu/coroutine-core.h"
 #include "9p.h"
 
 /*
diff --git a/include/block/aio.h b/include/block/aio.h
index 0f65a3cc9e..3a546e7515 100644
--- a/include/block/aio.h
+++ b/include/block/aio.h
@@ -17,7 +17,7 @@
 #ifdef CONFIG_LINUX_IO_URING
 #include <liburing.h>
 #endif
-#include "qemu/coroutine.h"
+#include "qemu/coroutine-core.h"
 #include "qemu/queue.h"
 #include "qemu/event_notifier.h"
 #include "qemu/thread.h"
diff --git a/include/io/channel.h b/include/io/channel.h
index f1b7e05f81..78b15f7870 100644
--- a/include/io/channel.h
+++ b/include/io/channel.h
@@ -22,7 +22,7 @@
 #define QIO_CHANNEL_H
 
 #include "qom/object.h"
-#include "qemu/coroutine.h"
+#include "qemu/coroutine-core.h"
 #include "block/aio.h"
 
 #define TYPE_QIO_CHANNEL "qio-channel"
diff --git a/include/qemu/coroutine-core.h b/include/qemu/coroutine-core.h
new file mode 100644
index 0000000000..230bb56517
--- /dev/null
+++ b/include/qemu/coroutine-core.h
@@ -0,0 +1,154 @@
+/*
+ * QEMU coroutine implementation
+ *
+ * Copyright IBM, Corp. 2011
+ *
+ * Authors:
+ *  Stefan Hajnoczi    <stefanha@linux.vnet.ibm.com>
+ *  Kevin Wolf         <kwolf@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2 or later.
+ * See the COPYING.LIB file in the top-level directory.
+ *
+ */
+
+#ifndef QEMU_COROUTINE_CORE_H
+#define QEMU_COROUTINE_CORE_H
+
+/**
+ * Coroutines are a mechanism for stack switching and can be used for
+ * cooperative userspace threading.  These functions provide a simple but
+ * useful flavor of coroutines that is suitable for writing sequential code,
+ * rather than callbacks, for operations that need to give up control while
+ * waiting for events to complete.
+ *
+ * These functions are re-entrant and may be used outside the global mutex.
+ *
+ * Functions that execute in coroutine context cannot be called
+ * directly from normal functions.  Use @coroutine_fn to mark such
+ * functions.  For example:
+ *
+ *   static void coroutine_fn foo(void) {
+ *       ....
+ *   }
+ *
+ * In the future it would be nice to have the compiler or a static
+ * checker catch misuse of such functions.  This annotation might make
+ * it possible and in the meantime it serves as documentation.
+ */
+
+/**
+ * Mark a function that executes in coroutine context
+ *
+ *
+ * Functions that execute in coroutine context cannot be called
+ * directly from normal functions.  Use @coroutine_fn to mark such
+ * functions.  For example:
+ *
+ *   static void coroutine_fn foo(void) {
+ *       ....
+ *   }
+ *
+ * In the future it would be nice to have the compiler or a static
+ * checker catch misuse of such functions.  This annotation might make
+ * it possible and in the meantime it serves as documentation.
+ */
+
+typedef struct Coroutine Coroutine;
+typedef struct CoMutex CoMutex;
+
+/**
+ * Coroutine entry point
+ *
+ * When the coroutine is entered for the first time, opaque is passed in as an
+ * argument.
+ *
+ * When this function returns, the coroutine is destroyed automatically and
+ * execution continues in the caller who last entered the coroutine.
+ */
+typedef void coroutine_fn CoroutineEntry(void *opaque);
+
+/**
+ * Create a new coroutine
+ *
+ * Use qemu_coroutine_enter() to actually transfer control to the coroutine.
+ * The opaque argument is passed as the argument to the entry point.
+ */
+Coroutine *qemu_coroutine_create(CoroutineEntry *entry, void *opaque);
+
+/**
+ * Transfer control to a coroutine
+ */
+void qemu_coroutine_enter(Coroutine *coroutine);
+
+/**
+ * Transfer control to a coroutine if it's not active (i.e. part of the call
+ * stack of the running coroutine). Otherwise, do nothing.
+ */
+void qemu_coroutine_enter_if_inactive(Coroutine *co);
+
+/**
+ * Transfer control to a coroutine and associate it with ctx
+ */
+void qemu_aio_coroutine_enter(AioContext *ctx, Coroutine *co);
+
+/**
+ * Transfer control back to a coroutine's caller
+ *
+ * This function does not return until the coroutine is re-entered using
+ * qemu_coroutine_enter().
+ */
+void coroutine_fn qemu_coroutine_yield(void);
+
+/**
+ * Get the AioContext of the given coroutine
+ */
+AioContext *qemu_coroutine_get_aio_context(Coroutine *co);
+
+/**
+ * Get the currently executing coroutine
+ */
+Coroutine *qemu_coroutine_self(void);
+
+/**
+ * Return whether or not currently inside a coroutine
+ *
+ * This can be used to write functions that work both when in coroutine context
+ * and when not in coroutine context.  Note that such functions cannot use the
+ * coroutine_fn annotation since they work outside coroutine context.
+ */
+bool qemu_in_coroutine(void);
+
+/**
+ * Return true if the coroutine is currently entered
+ *
+ * A coroutine is "entered" if it has not yielded from the current
+ * qemu_coroutine_enter() call used to run it.  This does not mean that the
+ * coroutine is currently executing code since it may have transferred control
+ * to another coroutine using qemu_coroutine_enter().
+ *
+ * When several coroutines enter each other there may be no way to know which
+ * ones have already been entered.  In such situations this function can be
+ * used to avoid recursively entering coroutines.
+ */
+bool qemu_coroutine_entered(Coroutine *co);
+
+/**
+ * Initialises a CoMutex. This must be called before any other operation is used
+ * on the CoMutex.
+ */
+void qemu_co_mutex_init(CoMutex *mutex);
+
+/**
+ * Locks the mutex. If the lock cannot be taken immediately, control is
+ * transferred to the caller of the current coroutine.
+ */
+void coroutine_fn qemu_co_mutex_lock(CoMutex *mutex);
+
+/**
+ * Unlocks the mutex and schedules the next coroutine that was waiting for this
+ * lock to be run.
+ */
+void coroutine_fn qemu_co_mutex_unlock(CoMutex *mutex);
+
+#endif
diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h
index 2496a4f4ef..a65be6697f 100644
--- a/include/qemu/coroutine.h
+++ b/include/qemu/coroutine.h
@@ -15,6 +15,7 @@
 #ifndef QEMU_COROUTINE_H
 #define QEMU_COROUTINE_H
 
+#include "qemu/coroutine-core.h"
 #include "qemu/queue.h"
 #include "qemu/timer.h"
 
@@ -40,84 +41,6 @@
  * it possible and in the meantime it serves as documentation.
  */
 
-typedef struct Coroutine Coroutine;
-
-/**
- * Coroutine entry point
- *
- * When the coroutine is entered for the first time, opaque is passed in as an
- * argument.
- *
- * When this function returns, the coroutine is destroyed automatically and
- * execution continues in the caller who last entered the coroutine.
- */
-typedef void coroutine_fn CoroutineEntry(void *opaque);
-
-/**
- * Create a new coroutine
- *
- * Use qemu_coroutine_enter() to actually transfer control to the coroutine.
- * The opaque argument is passed as the argument to the entry point.
- */
-Coroutine *qemu_coroutine_create(CoroutineEntry *entry, void *opaque);
-
-/**
- * Transfer control to a coroutine
- */
-void qemu_coroutine_enter(Coroutine *coroutine);
-
-/**
- * Transfer control to a coroutine if it's not active (i.e. part of the call
- * stack of the running coroutine). Otherwise, do nothing.
- */
-void qemu_coroutine_enter_if_inactive(Coroutine *co);
-
-/**
- * Transfer control to a coroutine and associate it with ctx
- */
-void qemu_aio_coroutine_enter(AioContext *ctx, Coroutine *co);
-
-/**
- * Transfer control back to a coroutine's caller
- *
- * This function does not return until the coroutine is re-entered using
- * qemu_coroutine_enter().
- */
-void coroutine_fn qemu_coroutine_yield(void);
-
-/**
- * Get the AioContext of the given coroutine
- */
-AioContext *qemu_coroutine_get_aio_context(Coroutine *co);
-
-/**
- * Get the currently executing coroutine
- */
-Coroutine *qemu_coroutine_self(void);
-
-/**
- * Return whether or not currently inside a coroutine
- *
- * This can be used to write functions that work both when in coroutine context
- * and when not in coroutine context.  Note that such functions cannot use the
- * coroutine_fn annotation since they work outside coroutine context.
- */
-bool qemu_in_coroutine(void);
-
-/**
- * Return true if the coroutine is currently entered
- *
- * A coroutine is "entered" if it has not yielded from the current
- * qemu_coroutine_enter() call used to run it.  This does not mean that the
- * coroutine is currently executing code since it may have transferred control
- * to another coroutine using qemu_coroutine_enter().
- *
- * When several coroutines enter each other there may be no way to know which
- * ones have already been entered.  In such situations this function can be
- * used to avoid recursively entering coroutines.
- */
-bool qemu_coroutine_entered(Coroutine *co);
-
 /**
  * Provides a mutex that can be used to synchronise coroutines
  */
@@ -145,24 +68,6 @@ struct CoMutex {
     Coroutine *holder;
 };
 
-/**
- * Initialises a CoMutex. This must be called before any other operation is used
- * on the CoMutex.
- */
-void qemu_co_mutex_init(CoMutex *mutex);
-
-/**
- * Locks the mutex. If the lock cannot be taken immediately, control is
- * transferred to the caller of the current coroutine.
- */
-void coroutine_fn qemu_co_mutex_lock(CoMutex *mutex);
-
-/**
- * Unlocks the mutex and schedules the next coroutine that was waiting for this
- * lock to be run.
- */
-void coroutine_fn qemu_co_mutex_unlock(CoMutex *mutex);
-
 /**
  * Assert that the current coroutine holds @mutex.
  */
diff --git a/include/qemu/lockable.h b/include/qemu/lockable.h
index 86db7cb04c..9823220446 100644
--- a/include/qemu/lockable.h
+++ b/include/qemu/lockable.h
@@ -13,7 +13,7 @@
 #ifndef QEMU_LOCKABLE_H
 #define QEMU_LOCKABLE_H
 
-#include "qemu/coroutine.h"
+#include "qemu/coroutine-core.h"
 #include "qemu/thread.h"
 
 typedef void QemuLockUnlockFunc(void *);
diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h
index fba04875c2..c7c8a85315 100644
--- a/include/qemu/typedefs.h
+++ b/include/qemu/typedefs.h
@@ -38,7 +38,6 @@ typedef struct BusState BusState;
 typedef struct Chardev Chardev;
 typedef struct Clock Clock;
 typedef struct CompatProperty CompatProperty;
-typedef struct CoMutex CoMutex;
 typedef struct ConfidentialGuestSupport ConfidentialGuestSupport;
 typedef struct CPUAddressSpace CPUAddressSpace;
 typedef struct CPUArchState CPUArchState;
diff --git a/nbd/client-connection.c b/nbd/client-connection.c
index 0c5f917efa..e5b1046a1c 100644
--- a/nbd/client-connection.c
+++ b/nbd/client-connection.c
@@ -29,6 +29,7 @@
 
 #include "qapi/qapi-visit-sockets.h"
 #include "qapi/clone-visitor.h"
+#include "qemu/coroutine.h"
 
 struct NBDClientConnection {
     /* Initialization constants, never change */
diff --git a/tests/unit/test-aio.c b/tests/unit/test-aio.c
index 178048d2f2..321d7ab01a 100644
--- a/tests/unit/test-aio.c
+++ b/tests/unit/test-aio.c
@@ -16,7 +16,7 @@
 #include "qemu/timer.h"
 #include "qemu/sockets.h"
 #include "qemu/error-report.h"
-#include "qemu/coroutine.h"
+#include "qemu/coroutine-core.h"
 #include "qemu/main-loop.h"
 
 static AioContext *ctx;
diff --git a/ui/console.c b/ui/console.c
index 9ff9217f9b..ab43561fe1 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -27,6 +27,7 @@
 #include "hw/qdev-core.h"
 #include "qapi/error.h"
 #include "qapi/qapi-commands-ui.h"
+#include "qemu/coroutine.h"
 #include "qemu/fifo8.h"
 #include "qemu/main-loop.h"
 #include "qemu/module.h"
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PULL 05/12] coroutine: Use Coroutine typedef name instead of structure tag
  2023-01-20  7:01 [PULL 00/12] Header cleanup patches for 2023-01-20 Markus Armbruster
                   ` (3 preceding siblings ...)
  2023-01-20  7:01 ` [PULL 04/12] coroutine: Split qemu/coroutine-core.h off qemu/coroutine.h Markus Armbruster
@ 2023-01-20  7:01 ` Markus Armbruster
  2023-01-20  7:01 ` [PULL 06/12] include/block: Untangle inclusion loops Markus Armbruster
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 17+ messages in thread
From: Markus Armbruster @ 2023-01-20  7:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, Philippe Mathieu-Daudé

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20221221131435.3851212-6-armbru@redhat.com>
---
 include/block/aio.h | 7 +++----
 util/async.c        | 4 ++--
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/include/block/aio.h b/include/block/aio.h
index 3a546e7515..8fba6a3584 100644
--- a/include/block/aio.h
+++ b/include/block/aio.h
@@ -52,7 +52,6 @@ typedef void QEMUBHFunc(void *opaque);
 typedef bool AioPollFn(void *opaque);
 typedef void IOHandler(void *opaque);
 
-struct Coroutine;
 struct ThreadPool;
 struct LinuxAioState;
 struct LuringState;
@@ -694,7 +693,7 @@ static inline bool aio_node_check(AioContext *ctx, bool is_external)
  * is the context in which the coroutine is running (i.e. the value of
  * qemu_get_current_aio_context() from the coroutine itself).
  */
-void aio_co_schedule(AioContext *ctx, struct Coroutine *co);
+void aio_co_schedule(AioContext *ctx, Coroutine *co);
 
 /**
  * aio_co_reschedule_self:
@@ -717,7 +716,7 @@ void coroutine_fn aio_co_reschedule_self(AioContext *new_ctx);
  * context.  The coroutine must not be entered by anyone else while
  * aio_co_wake() is active.
  */
-void aio_co_wake(struct Coroutine *co);
+void aio_co_wake(Coroutine *co);
 
 /**
  * aio_co_enter:
@@ -726,7 +725,7 @@ void aio_co_wake(struct Coroutine *co);
  *
  * Enter a coroutine in the specified AioContext.
  */
-void aio_co_enter(AioContext *ctx, struct Coroutine *co);
+void aio_co_enter(AioContext *ctx, Coroutine *co);
 
 /**
  * Return the AioContext whose event loop runs in the current thread.
diff --git a/util/async.c b/util/async.c
index 14d63b3091..0657b75397 100644
--- a/util/async.c
+++ b/util/async.c
@@ -640,7 +640,7 @@ void coroutine_fn aio_co_reschedule_self(AioContext *new_ctx)
     }
 }
 
-void aio_co_wake(struct Coroutine *co)
+void aio_co_wake(Coroutine *co)
 {
     AioContext *ctx;
 
@@ -653,7 +653,7 @@ void aio_co_wake(struct Coroutine *co)
     aio_co_enter(ctx, co);
 }
 
-void aio_co_enter(AioContext *ctx, struct Coroutine *co)
+void aio_co_enter(AioContext *ctx, Coroutine *co)
 {
     if (ctx != qemu_get_current_aio_context()) {
         aio_co_schedule(ctx, co);
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PULL 06/12] include/block: Untangle inclusion loops
  2023-01-20  7:01 [PULL 00/12] Header cleanup patches for 2023-01-20 Markus Armbruster
                   ` (4 preceding siblings ...)
  2023-01-20  7:01 ` [PULL 05/12] coroutine: Use Coroutine typedef name instead of structure tag Markus Armbruster
@ 2023-01-20  7:01 ` Markus Armbruster
  2023-01-20  7:01 ` [PULL 07/12] hw/sparc64/niagara: Use blk_name() instead of open-coding it Markus Armbruster
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 17+ messages in thread
From: Markus Armbruster @ 2023-01-20  7:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell

We have two inclusion loops:

       block/block.h
    -> block/block-global-state.h
    -> block/block-common.h
    -> block/blockjob.h
    -> block/block.h

       block/block.h
    -> block/block-io.h
    -> block/block-common.h
    -> block/blockjob.h
    -> block/block.h

I believe these go back to Emanuele's reorganization of the block API,
merged a few months ago in commit d7e2fe4aac8.

Fortunately, breaking them is merely a matter of deleting unnecessary
includes from headers, and adding them back in places where they are
now missing.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20221221133551.3967339-2-armbru@redhat.com>
---
 include/block/block-common.h           |  9 ++-------
 include/block/block-copy.h             |  4 ++--
 include/block/block-global-state.h     |  4 +++-
 include/block/block-hmp-cmds.h         |  2 ++
 include/block/block-io.h               |  5 ++++-
 include/block/block.h                  |  4 ++--
 include/block/block_backup.h           |  2 +-
 include/block/block_int-common.h       | 14 +++++---------
 include/block/block_int-global-state.h |  5 ++++-
 include/block/block_int-io.h           |  4 +++-
 include/block/block_int.h              |  4 ++--
 include/block/blockjob.h               |  2 +-
 include/block/blockjob_int.h           |  1 -
 include/block/dirty-bitmap.h           |  1 +
 include/block/qapi.h                   |  2 +-
 include/block/thread-pool.h            |  2 +-
 include/block/throttle-groups.h        |  2 +-
 include/sysemu/block-backend-io.h      |  1 +
 block.c                                |  1 +
 block/amend.c                          |  1 +
 block/backup.c                         |  1 +
 block/blkdebug.c                       |  1 +
 block/blklogwrites.c                   |  1 +
 block/blkreplay.c                      |  1 +
 block/blkverify.c                      |  1 +
 block/block-copy.c                     |  4 ++++
 block/bochs.c                          |  1 +
 block/cloop.c                          |  1 +
 block/copy-before-write.c              |  1 +
 block/copy-on-read.c                   |  1 +
 block/curl.c                           |  1 +
 block/dirty-bitmap.c                   |  2 ++
 block/dmg.c                            |  1 +
 block/export/fuse.c                    |  3 ++-
 block/file-posix.c                     |  1 +
 block/file-win32.c                     |  1 +
 block/filter-compress.c                |  1 +
 block/gluster.c                        |  1 +
 block/io.c                             |  1 +
 block/iscsi.c                          |  1 +
 block/mirror.c                         |  1 +
 block/monitor/bitmap-qmp-cmds.c        |  2 ++
 block/nfs.c                            |  1 +
 block/null.c                           |  1 +
 block/nvme.c                           |  1 +
 block/parallels-ext.c                  |  2 ++
 block/preallocate.c                    |  1 +
 block/qapi-sysemu.c                    |  1 +
 block/qapi.c                           |  1 +
 block/qcow2-bitmap.c                   |  2 ++
 block/qcow2-cache.c                    |  1 +
 block/qcow2-cluster.c                  |  1 +
 block/qcow2-refcount.c                 |  1 +
 block/qcow2-threads.c                  |  1 +
 block/qcow2.c                          |  1 +
 block/qed-check.c                      |  1 +
 block/qed-table.c                      |  1 +
 block/raw-format.c                     |  1 +
 block/rbd.c                            |  1 +
 block/ssh.c                            |  1 +
 block/throttle.c                       |  2 ++
 block/vhdx-log.c                       |  1 +
 block/vvfat.c                          |  1 +
 block/win32-aio.c                      |  1 +
 block/write-threshold.c                |  1 +
 blockdev.c                             |  1 +
 blockjob.c                             |  1 +
 hw/block/block.c                       |  1 +
 hw/sparc64/niagara.c                   |  1 +
 hw/virtio/virtio-pmem.c                |  1 +
 migration/block-dirty-bitmap.c         |  1 +
 migration/block.c                      |  1 +
 migration/savevm.c                     |  1 +
 monitor/qmp-cmds.c                     |  1 +
 nbd/server.c                           |  2 ++
 qemu-img.c                             |  1 +
 softmmu/cpus.c                         |  1 +
 softmmu/physmem.c                      |  1 +
 storage-daemon/qemu-storage-daemon.c   |  1 +
 target/i386/kvm/kvm.c                  |  1 +
 tests/unit/test-bdrv-drain.c           |  2 +-
 tests/unit/test-block-iothread.c       |  1 +
 scripts/block-coroutine-wrapper.py     |  3 ++-
 83 files changed, 112 insertions(+), 35 deletions(-)

diff --git a/include/block/block-common.h b/include/block/block-common.h
index 434ffc5d34..41686810de 100644
--- a/include/block/block-common.h
+++ b/include/block/block-common.h
@@ -24,12 +24,8 @@
 #ifndef BLOCK_COMMON_H
 #define BLOCK_COMMON_H
 
-#include "block/aio.h"
-#include "block/aio-wait.h"
-#include "qemu/iov.h"
-#include "block/accounting.h"
-#include "qemu/hbitmap.h"
-#include "qemu/transactions.h"
+#include "qapi/qapi-types-block-core.h"
+#include "qemu/queue.h"
 
 /*
  * co_wrapper{*}: Function specifiers used by block-coroutine-wrapper.py
@@ -55,7 +51,6 @@
 #define co_wrapper_bdrv_rdlock
 #define co_wrapper_mixed_bdrv_rdlock
 
-#include "block/dirty-bitmap.h"
 #include "block/blockjob.h"
 
 /* block.c */
diff --git a/include/block/block-copy.h b/include/block/block-copy.h
index 8cea4f9b90..d0f8386554 100644
--- a/include/block/block-copy.h
+++ b/include/block/block-copy.h
@@ -15,8 +15,8 @@
 #ifndef BLOCK_COPY_H
 #define BLOCK_COPY_H
 
-#include "block/block.h"
-#include "qemu/co-shared-resource.h"
+#include "block/block-common.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 b0a3cfe6b8..a38f86dc15 100644
--- a/include/block/block-global-state.h
+++ b/include/block/block-global-state.h
@@ -24,7 +24,9 @@
 #ifndef BLOCK_GLOBAL_STATE_H
 #define BLOCK_GLOBAL_STATE_H
 
-#include "block-common.h"
+#include "block/block-common.h"
+#include "qemu/coroutine.h"
+#include "qemu/transactions.h"
 
 /*
  * Global state (GS) API. These functions run under the BQL.
diff --git a/include/block/block-hmp-cmds.h b/include/block/block-hmp-cmds.h
index ba0593c440..71113cd7ef 100644
--- a/include/block/block-hmp-cmds.h
+++ b/include/block/block-hmp-cmds.h
@@ -15,6 +15,8 @@
 #ifndef BLOCK_BLOCK_HMP_CMDS_H
 #define BLOCK_BLOCK_HMP_CMDS_H
 
+#include "qemu/coroutine.h"
+
 void hmp_drive_add(Monitor *mon, const QDict *qdict);
 
 void hmp_commit(Monitor *mon, const QDict *qdict);
diff --git a/include/block/block-io.h b/include/block/block-io.h
index 2ed6214909..3398351596 100644
--- a/include/block/block-io.h
+++ b/include/block/block-io.h
@@ -24,7 +24,10 @@
 #ifndef BLOCK_IO_H
 #define BLOCK_IO_H
 
-#include "block-common.h"
+#include "block/aio-wait.h"
+#include "block/block-common.h"
+#include "qemu/coroutine.h"
+#include "qemu/iov.h"
 
 /*
  * I/O API functions. These functions are thread-safe, and therefore
diff --git a/include/block/block.h b/include/block/block.h
index 1e6b8fef1e..e2c647de27 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -24,8 +24,8 @@
 #ifndef BLOCK_H
 #define BLOCK_H
 
-#include "block-global-state.h"
-#include "block-io.h"
+#include "block/block-global-state.h"
+#include "block/block-io.h"
 
 /* DO NOT ADD ANYTHING IN HERE. USE ONE OF THE HEADERS INCLUDED ABOVE */
 
diff --git a/include/block/block_backup.h b/include/block/block_backup.h
index 157596c296..4d4d5ba153 100644
--- a/include/block/block_backup.h
+++ b/include/block/block_backup.h
@@ -18,7 +18,7 @@
 #ifndef BLOCK_BACKUP_H
 #define BLOCK_BACKUP_H
 
-#include "block/block_int.h"
+#include "block/blockjob.h"
 
 void backup_do_checkpoint(BlockJob *job, Error **errp);
 
diff --git a/include/block/block_int-common.h b/include/block/block_int-common.h
index c34c525fa6..887ace7dbd 100644
--- a/include/block/block_int-common.h
+++ b/include/block/block_int-common.h
@@ -24,17 +24,13 @@
 #ifndef BLOCK_INT_COMMON_H
 #define BLOCK_INT_COMMON_H
 
-#include "block/accounting.h"
-#include "block/block.h"
-#include "block/aio-wait.h"
-#include "qemu/queue.h"
-#include "qemu/coroutine.h"
-#include "qemu/stats64.h"
-#include "qemu/timer.h"
-#include "qemu/hbitmap.h"
+#include "block/aio.h"
+#include "block/block-common.h"
+#include "block/block-global-state.h"
 #include "block/snapshot.h"
-#include "qemu/throttle.h"
+#include "qemu/iov.h"
 #include "qemu/rcu.h"
+#include "qemu/stats64.h"
 
 #define BLOCK_FLAG_LAZY_REFCOUNTS   8
 
diff --git a/include/block/block_int-global-state.h b/include/block/block_int-global-state.h
index 2f0993f6e9..902406eb99 100644
--- a/include/block/block_int-global-state.h
+++ b/include/block/block_int-global-state.h
@@ -25,7 +25,10 @@
 #ifndef BLOCK_INT_GLOBAL_STATE_H
 #define BLOCK_INT_GLOBAL_STATE_H
 
-#include "block_int-common.h"
+#include "block/blockjob.h"
+#include "block/block_int-common.h"
+#include "qemu/hbitmap.h"
+#include "qemu/main-loop.h"
 
 /*
  * Global state (GS) API. These functions run under the BQL.
diff --git a/include/block/block_int-io.h b/include/block/block_int-io.h
index 8bc061ebb8..44367219f4 100644
--- a/include/block/block_int-io.h
+++ b/include/block/block_int-io.h
@@ -24,7 +24,9 @@
 #ifndef BLOCK_INT_IO_H
 #define BLOCK_INT_IO_H
 
-#include "block_int-common.h"
+#include "block/block_int-common.h"
+#include "qemu/hbitmap.h"
+#include "qemu/main-loop.h"
 
 /*
  * I/O API functions. These functions are thread-safe.
diff --git a/include/block/block_int.h b/include/block/block_int.h
index b35b0138ed..567a178e13 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -24,8 +24,8 @@
 #ifndef BLOCK_INT_H
 #define BLOCK_INT_H
 
-#include "block_int-global-state.h"
-#include "block_int-io.h"
+#include "block/block_int-global-state.h"
+#include "block/block_int-io.h"
 #include "block/graph-lock.h"
 
 /* DO NOT ADD ANYTHING IN HERE. USE ONE OF THE HEADERS INCLUDED ABOVE */
diff --git a/include/block/blockjob.h b/include/block/blockjob.h
index 03032b2eca..058b0c824c 100644
--- a/include/block/blockjob.h
+++ b/include/block/blockjob.h
@@ -26,8 +26,8 @@
 #ifndef BLOCKJOB_H
 #define BLOCKJOB_H
 
+#include "qapi/qapi-types-block-core.h"
 #include "qemu/job.h"
-#include "block/block.h"
 #include "qemu/ratelimit.h"
 
 #define BLOCK_JOB_SLICE_TIME 100000000ULL /* ns */
diff --git a/include/block/blockjob_int.h b/include/block/blockjob_int.h
index 6bd9ae2b20..f008446285 100644
--- a/include/block/blockjob_int.h
+++ b/include/block/blockjob_int.h
@@ -27,7 +27,6 @@
 #define BLOCKJOB_INT_H
 
 #include "block/blockjob.h"
-#include "block/block.h"
 
 /**
  * BlockJobDriver:
diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h
index c3700cec76..233535ef2d 100644
--- a/include/block/dirty-bitmap.h
+++ b/include/block/dirty-bitmap.h
@@ -1,6 +1,7 @@
 #ifndef BLOCK_DIRTY_BITMAP_H
 #define BLOCK_DIRTY_BITMAP_H
 
+#include "block/block-common.h"
 #include "qapi/qapi-types-block-core.h"
 #include "qemu/hbitmap.h"
 
diff --git a/include/block/qapi.h b/include/block/qapi.h
index 22c7807c89..865fb974d4 100644
--- a/include/block/qapi.h
+++ b/include/block/qapi.h
@@ -25,8 +25,8 @@
 #ifndef BLOCK_QAPI_H
 #define BLOCK_QAPI_H
 
-#include "block/block.h"
 #include "block/snapshot.h"
+#include "qapi/qapi-types-block-core.h"
 
 BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk,
                                         BlockDriverState *bs,
diff --git a/include/block/thread-pool.h b/include/block/thread-pool.h
index 2020bcc92d..95ff2b0bdb 100644
--- a/include/block/thread-pool.h
+++ b/include/block/thread-pool.h
@@ -18,7 +18,7 @@
 #ifndef QEMU_THREAD_POOL_H
 #define QEMU_THREAD_POOL_H
 
-#include "block/block.h"
+#include "block/aio.h"
 
 #define THREAD_POOL_MAX_THREADS_DEFAULT         64
 
diff --git a/include/block/throttle-groups.h b/include/block/throttle-groups.h
index 9541b32432..ff282fc0f8 100644
--- a/include/block/throttle-groups.h
+++ b/include/block/throttle-groups.h
@@ -25,8 +25,8 @@
 #ifndef THROTTLE_GROUPS_H
 #define THROTTLE_GROUPS_H
 
+#include "qemu/coroutine.h"
 #include "qemu/throttle.h"
-#include "block/block_int.h"
 #include "qom/object.h"
 
 /* The ThrottleGroupMember structure indicates membership in a ThrottleGroup
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
index 7ec6d978d4..031a27ba10 100644
--- a/include/sysemu/block-backend-io.h
+++ b/include/sysemu/block-backend-io.h
@@ -14,6 +14,7 @@
 #define BLOCK_BACKEND_IO_H
 
 #include "block-backend-common.h"
+#include "block/accounting.h"
 
 /*
  * I/O API functions. These functions are thread-safe.
diff --git a/block.c b/block.c
index 9c2ac757e4..b4a89207ad 100644
--- a/block.c
+++ b/block.c
@@ -27,6 +27,7 @@
 #include "block/trace.h"
 #include "block/block_int.h"
 #include "block/blockjob.h"
+#include "block/dirty-bitmap.h"
 #include "block/fuse.h"
 #include "block/nbd.h"
 #include "block/qdict.h"
diff --git a/block/amend.c b/block/amend.c
index f696a006e3..bc4bb7b416 100644
--- a/block/amend.c
+++ b/block/amend.c
@@ -26,6 +26,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "qemu/job.h"
 #include "qemu/main-loop.h"
diff --git a/block/backup.c b/block/backup.c
index 6a9ad97a53..824d39acaa 100644
--- a/block/backup.c
+++ b/block/backup.c
@@ -20,6 +20,7 @@
 #include "block/blockjob_int.h"
 #include "block/block_backup.h"
 #include "block/block-copy.h"
+#include "block/dirty-bitmap.h"
 #include "qapi/error.h"
 #include "qapi/qmp/qerror.h"
 #include "qemu/cutils.h"
diff --git a/block/blkdebug.c b/block/blkdebug.c
index ca65b043f0..fa38c1cf7d 100644
--- a/block/blkdebug.c
+++ b/block/blkdebug.c
@@ -27,6 +27,7 @@
 #include "qapi/error.h"
 #include "qemu/cutils.h"
 #include "qemu/config-file.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "block/qdict.h"
 #include "qemu/module.h"
diff --git a/block/blklogwrites.c b/block/blklogwrites.c
index cef9efe55d..a5bf767184 100644
--- a/block/blklogwrites.c
+++ b/block/blklogwrites.c
@@ -12,6 +12,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "qemu/sockets.h" /* for EINPROGRESS on Windows */
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "qapi/qmp/qdict.h"
 #include "qapi/qmp/qstring.h"
diff --git a/block/blkreplay.c b/block/blkreplay.c
index 76a0b8d12a..e3b6a3efb2 100644
--- a/block/blkreplay.c
+++ b/block/blkreplay.c
@@ -11,6 +11,7 @@
 
 #include "qemu/osdep.h"
 #include "qemu/module.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "sysemu/replay.h"
 #include "qapi/error.h"
diff --git a/block/blkverify.c b/block/blkverify.c
index c60a2dc624..0e78bc9dd6 100644
--- a/block/blkverify.c
+++ b/block/blkverify.c
@@ -10,6 +10,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "qemu/sockets.h" /* for EINPROGRESS on Windows */
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "qapi/qmp/qdict.h"
 #include "qapi/qmp/qstring.h"
diff --git a/block/block-copy.c b/block/block-copy.c
index 5e59d6262f..30a4da0f2e 100644
--- a/block/block-copy.c
+++ b/block/block-copy.c
@@ -17,10 +17,14 @@
 #include "trace.h"
 #include "qapi/error.h"
 #include "block/block-copy.h"
+#include "block/block_int-io.h"
+#include "block/dirty-bitmap.h"
 #include "block/reqlist.h"
 #include "sysemu/block-backend.h"
 #include "qemu/units.h"
+#include "qemu/co-shared-resource.h"
 #include "qemu/coroutine.h"
+#include "qemu/ratelimit.h"
 #include "block/aio_task.h"
 #include "qemu/error-report.h"
 #include "qemu/memalign.h"
diff --git a/block/bochs.c b/block/bochs.c
index e30e3908d9..46e7958316 100644
--- a/block/bochs.c
+++ b/block/bochs.c
@@ -24,6 +24,7 @@
  */
 #include "qemu/osdep.h"
 #include "qapi/error.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "qemu/module.h"
 #include "qemu/bswap.h"
diff --git a/block/cloop.c b/block/cloop.c
index 3ff975a94d..1e5a52d6b2 100644
--- a/block/cloop.c
+++ b/block/cloop.c
@@ -24,6 +24,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "qemu/error-report.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "qemu/module.h"
 #include "qemu/bswap.h"
diff --git a/block/copy-before-write.c b/block/copy-before-write.c
index 70c4ba7432..c9fb809ba0 100644
--- a/block/copy-before-write.c
+++ b/block/copy-before-write.c
@@ -32,6 +32,7 @@
 #include "block/block_int.h"
 #include "block/qdict.h"
 #include "block/block-copy.h"
+#include "block/dirty-bitmap.h"
 
 #include "block/copy-before-write.h"
 #include "block/reqlist.h"
diff --git a/block/copy-on-read.c b/block/copy-on-read.c
index 815ac1d835..13ed4150a6 100644
--- a/block/copy-on-read.c
+++ b/block/copy-on-read.c
@@ -21,6 +21,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "qemu/module.h"
 #include "qapi/error.h"
diff --git a/block/curl.c b/block/curl.c
index cba4c4cac7..bf45fa3244 100644
--- a/block/curl.c
+++ b/block/curl.c
@@ -27,6 +27,7 @@
 #include "qemu/error-report.h"
 #include "qemu/module.h"
 #include "qemu/option.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "qapi/qmp/qdict.h"
 #include "qapi/qmp/qstring.h"
diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
index 956feeb2ae..1e7aee4010 100644
--- a/block/dirty-bitmap.c
+++ b/block/dirty-bitmap.c
@@ -24,8 +24,10 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "trace.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "block/blockjob.h"
+#include "block/dirty-bitmap.h"
 #include "qemu/main-loop.h"
 
 struct BdrvDirtyBitmap {
diff --git a/block/dmg.c b/block/dmg.c
index 675e840ca5..e10b9a2ba5 100644
--- a/block/dmg.c
+++ b/block/dmg.c
@@ -23,6 +23,7 @@
  */
 #include "qemu/osdep.h"
 #include "qapi/error.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "qemu/bswap.h"
 #include "qemu/error-report.h"
diff --git a/block/export/fuse.c b/block/export/fuse.c
index 1b26ddfcf3..e5fc4af165 100644
--- a/block/export/fuse.c
+++ b/block/export/fuse.c
@@ -21,12 +21,13 @@
 #include "qemu/osdep.h"
 #include "qemu/memalign.h"
 #include "block/aio.h"
-#include "block/block.h"
+#include "block/block_int-common.h"
 #include "block/export.h"
 #include "block/fuse.h"
 #include "block/qapi.h"
 #include "qapi/error.h"
 #include "qapi/qapi-commands-block.h"
+#include "qemu/main-loop.h"
 #include "sysemu/block-backend.h"
 
 #include <fuse.h>
diff --git a/block/file-posix.c b/block/file-posix.c
index b9955db205..fa227d9d14 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -26,6 +26,7 @@
 #include "qapi/error.h"
 #include "qemu/cutils.h"
 #include "qemu/error-report.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "qemu/module.h"
 #include "qemu/option.h"
diff --git a/block/file-win32.c b/block/file-win32.c
index ec9d64d0e4..12be9c3d0f 100644
--- a/block/file-win32.c
+++ b/block/file-win32.c
@@ -25,6 +25,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "qemu/cutils.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "qemu/module.h"
 #include "qemu/option.h"
diff --git a/block/filter-compress.c b/block/filter-compress.c
index 305716c86c..0ff8d28661 100644
--- a/block/filter-compress.c
+++ b/block/filter-compress.c
@@ -22,6 +22,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "qemu/module.h"
 #include "qapi/error.h"
diff --git a/block/gluster.c b/block/gluster.c
index 7efc296399..1ad19ae915 100644
--- a/block/gluster.c
+++ b/block/gluster.c
@@ -11,6 +11,7 @@
 #include "qemu/osdep.h"
 #include "qemu/units.h"
 #include <glusterfs/api/glfs.h>
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "block/qdict.h"
 #include "qapi/error.h"
diff --git a/block/io.c b/block/io.c
index a09b1b34ab..a09a19f7a7 100644
--- a/block/io.c
+++ b/block/io.c
@@ -30,6 +30,7 @@
 #include "block/blockjob_int.h"
 #include "block/block_int.h"
 #include "block/coroutines.h"
+#include "block/dirty-bitmap.h"
 #include "block/write-threshold.h"
 #include "qemu/cutils.h"
 #include "qemu/memalign.h"
diff --git a/block/iscsi.c b/block/iscsi.c
index a316d46d96..c16c592042 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -33,6 +33,7 @@
 #include "qemu/error-report.h"
 #include "qemu/bitops.h"
 #include "qemu/bitmap.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "block/qdict.h"
 #include "scsi/constants.h"
diff --git a/block/mirror.c b/block/mirror.c
index 251adc5ae0..634815d78d 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -18,6 +18,7 @@
 #include "trace.h"
 #include "block/blockjob_int.h"
 #include "block/block_int.h"
+#include "block/dirty-bitmap.h"
 #include "sysemu/block-backend.h"
 #include "qapi/error.h"
 #include "qapi/qmp/qerror.h"
diff --git a/block/monitor/bitmap-qmp-cmds.c b/block/monitor/bitmap-qmp-cmds.c
index 282363606f..55f778f5af 100644
--- a/block/monitor/bitmap-qmp-cmds.c
+++ b/block/monitor/bitmap-qmp-cmds.c
@@ -32,7 +32,9 @@
 
 #include "qemu/osdep.h"
 
+#include "block/block-io.h"
 #include "block/block_int.h"
+#include "block/dirty-bitmap.h"
 #include "qapi/qapi-commands-block.h"
 #include "qapi/error.h"
 
diff --git a/block/nfs.c b/block/nfs.c
index ece22353ac..5e288dfc83 100644
--- a/block/nfs.c
+++ b/block/nfs.c
@@ -30,6 +30,7 @@
 #include "qemu/config-file.h"
 #include "qemu/error-report.h"
 #include "qapi/error.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "block/qdict.h"
 #include "trace.h"
diff --git a/block/null.c b/block/null.c
index 75f7d0db40..306e605fa1 100644
--- a/block/null.c
+++ b/block/null.c
@@ -16,6 +16,7 @@
 #include "qapi/qmp/qstring.h"
 #include "qemu/module.h"
 #include "qemu/option.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "sysemu/replay.h"
 
diff --git a/block/nvme.c b/block/nvme.c
index 656624c585..1f1367640a 100644
--- a/block/nvme.c
+++ b/block/nvme.c
@@ -23,6 +23,7 @@
 #include "qemu/option.h"
 #include "qemu/memalign.h"
 #include "qemu/vfio-helpers.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "sysemu/replay.h"
 #include "trace.h"
diff --git a/block/parallels-ext.c b/block/parallels-ext.c
index c9dbbf5089..8a109f005a 100644
--- a/block/parallels-ext.c
+++ b/block/parallels-ext.c
@@ -25,7 +25,9 @@
 
 #include "qemu/osdep.h"
 #include "qapi/error.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
+#include "block/dirty-bitmap.h"
 #include "parallels.h"
 #include "crypto/hash.h"
 #include "qemu/uuid.h"
diff --git a/block/preallocate.c b/block/preallocate.c
index d50ee7f49b..a51fc08515 100644
--- a/block/preallocate.c
+++ b/block/preallocate.c
@@ -30,6 +30,7 @@
 #include "qemu/module.h"
 #include "qemu/option.h"
 #include "qemu/units.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 
 
diff --git a/block/qapi-sysemu.c b/block/qapi-sysemu.c
index 0c7a1423de..7bd7554150 100644
--- a/block/qapi-sysemu.c
+++ b/block/qapi-sysemu.c
@@ -32,6 +32,7 @@
 
 #include "qemu/osdep.h"
 
+#include "block/block_int.h"
 #include "qapi/error.h"
 #include "qapi/qapi-commands-block.h"
 #include "qapi/qmp/qdict.h"
diff --git a/block/qapi.c b/block/qapi.c
index fea808425b..9b4da12966 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -26,6 +26,7 @@
 #include "qemu/cutils.h"
 #include "block/qapi.h"
 #include "block/block_int.h"
+#include "block/dirty-bitmap.h"
 #include "block/throttle-groups.h"
 #include "block/write-threshold.h"
 #include "qapi/error.h"
diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c
index bcad567c0c..385260a1b5 100644
--- a/block/qcow2-bitmap.c
+++ b/block/qcow2-bitmap.c
@@ -26,6 +26,8 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/block-io.h"
+#include "block/dirty-bitmap.h"
 #include "qapi/error.h"
 #include "qemu/cutils.h"
 
diff --git a/block/qcow2-cache.c b/block/qcow2-cache.c
index 54b2d5f4de..01c67bdddc 100644
--- a/block/qcow2-cache.c
+++ b/block/qcow2-cache.c
@@ -23,6 +23,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/block-io.h"
 #include "qemu/memalign.h"
 #include "qcow2.h"
 #include "trace.h"
diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
index 40ed847f97..870be106b6 100644
--- a/block/qcow2-cluster.c
+++ b/block/qcow2-cluster.c
@@ -25,6 +25,7 @@
 #include "qemu/osdep.h"
 #include <zlib.h>
 
+#include "block/block-io.h"
 #include "qapi/error.h"
 #include "qcow2.h"
 #include "qemu/bswap.h"
diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
index 81264740f0..5ffbefee2e 100644
--- a/block/qcow2-refcount.c
+++ b/block/qcow2-refcount.c
@@ -23,6 +23,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/block-io.h"
 #include "qapi/error.h"
 #include "qcow2.h"
 #include "qemu/range.h"
diff --git a/block/qcow2-threads.c b/block/qcow2-threads.c
index 1914baf456..953bbe6df8 100644
--- a/block/qcow2-threads.c
+++ b/block/qcow2-threads.c
@@ -34,6 +34,7 @@
 #endif
 
 #include "qcow2.h"
+#include "block/block-io.h"
 #include "block/thread-pool.h"
 #include "crypto.h"
 
diff --git a/block/qcow2.c b/block/qcow2.c
index bafbd077b9..2e9c57e269 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -43,6 +43,7 @@
 #include "qapi/qapi-visit-block-core.h"
 #include "crypto.h"
 #include "block/aio_task.h"
+#include "block/dirty-bitmap.h"
 
 /*
   Differences with QCOW:
diff --git a/block/qed-check.c b/block/qed-check.c
index 418033ee24..a6612be00f 100644
--- a/block/qed-check.c
+++ b/block/qed-check.c
@@ -12,6 +12,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/block-io.h"
 #include "qed.h"
 
 typedef struct {
diff --git a/block/qed-table.c b/block/qed-table.c
index aa203f2627..e41c87a157 100644
--- a/block/qed-table.c
+++ b/block/qed-table.c
@@ -13,6 +13,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/block-io.h"
 #include "trace.h"
 #include "qemu/sockets.h" /* for EINPROGRESS on Windows */
 #include "qed.h"
diff --git a/block/raw-format.c b/block/raw-format.c
index 28905b09ee..b6a0ce58f4 100644
--- a/block/raw-format.c
+++ b/block/raw-format.c
@@ -27,6 +27,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "qapi/error.h"
 #include "qemu/module.h"
diff --git a/block/rbd.c b/block/rbd.c
index 3aa6aae0e0..6167c5e424 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -18,6 +18,7 @@
 #include "qemu/error-report.h"
 #include "qemu/module.h"
 #include "qemu/option.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "block/qdict.h"
 #include "crypto/secret.h"
diff --git a/block/ssh.c b/block/ssh.c
index 8508710f2f..8bd2a134c1 100644
--- a/block/ssh.c
+++ b/block/ssh.c
@@ -27,6 +27,7 @@
 #include <libssh/libssh.h>
 #include <libssh/sftp.h>
 
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "block/qdict.h"
 #include "qapi/error.h"
diff --git a/block/throttle.c b/block/throttle.c
index 88851c84f4..00cb46d0e5 100644
--- a/block/throttle.c
+++ b/block/throttle.c
@@ -18,6 +18,8 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/block-io.h"
+#include "block/block_int.h"
 #include "block/throttle-groups.h"
 #include "qemu/module.h"
 #include "qemu/option.h"
diff --git a/block/vhdx-log.c b/block/vhdx-log.c
index 572582b87b..c48cf65d62 100644
--- a/block/vhdx-log.c
+++ b/block/vhdx-log.c
@@ -20,6 +20,7 @@
 
 #include "qemu/osdep.h"
 #include "qapi/error.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "qemu/error-report.h"
 #include "qemu/bswap.h"
diff --git a/block/vvfat.c b/block/vvfat.c
index 723c91216e..d7d775bd2c 100644
--- a/block/vvfat.c
+++ b/block/vvfat.c
@@ -27,6 +27,7 @@
 #include <dirent.h>
 #include <glib/gstdio.h>
 #include "qapi/error.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "block/qdict.h"
 #include "qemu/module.h"
diff --git a/block/win32-aio.c b/block/win32-aio.c
index aadc7b1bc3..ee87d6048f 100644
--- a/block/win32-aio.c
+++ b/block/win32-aio.c
@@ -24,6 +24,7 @@
 
 #include "qemu/osdep.h"
 #include "qemu/timer.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "block/aio.h"
 #include "block/raw-aio.h"
diff --git a/block/write-threshold.c b/block/write-threshold.c
index 35cafbc22d..76d8885677 100644
--- a/block/write-threshold.c
+++ b/block/write-threshold.c
@@ -11,6 +11,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/block-io.h"
 #include "block/block_int.h"
 #include "block/write-threshold.h"
 #include "qapi/error.h"
diff --git a/blockdev.c b/blockdev.c
index ebf952cd21..fe9d8d89c0 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -35,6 +35,7 @@
 #include "sysemu/blockdev.h"
 #include "hw/block/block.h"
 #include "block/blockjob.h"
+#include "block/dirty-bitmap.h"
 #include "block/qdict.h"
 #include "block/throttle-groups.h"
 #include "monitor/monitor.h"
diff --git a/blockjob.c b/blockjob.c
index 54b4091a36..659c3cb9de 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -24,6 +24,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/aio-wait.h"
 #include "block/block.h"
 #include "block/blockjob_int.h"
 #include "block/block_int.h"
diff --git a/hw/block/block.c b/hw/block/block.c
index f9c4fe6767..ddcef71f80 100644
--- a/hw/block/block.c
+++ b/hw/block/block.c
@@ -8,6 +8,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/block_int-common.h"
 #include "sysemu/blockdev.h"
 #include "sysemu/block-backend.h"
 #include "hw/block/block.h"
diff --git a/hw/sparc64/niagara.c b/hw/sparc64/niagara.c
index ccad2c43a3..ab3c4ec346 100644
--- a/hw/sparc64/niagara.c
+++ b/hw/sparc64/niagara.c
@@ -23,6 +23,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/block_int-common.h"
 #include "qemu/units.h"
 #include "cpu.h"
 #include "hw/boards.h"
diff --git a/hw/virtio/virtio-pmem.c b/hw/virtio/virtio-pmem.c
index a1abfe0e1b..dff402f08f 100644
--- a/hw/virtio/virtio-pmem.c
+++ b/hw/virtio/virtio-pmem.c
@@ -14,6 +14,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "qemu/error-report.h"
+#include "qemu/iov.h"
 #include "qemu/main-loop.h"
 #include "hw/virtio/virtio-pmem.h"
 #include "hw/qdev-properties.h"
diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
index 283017d7d3..15127d489a 100644
--- a/migration/block-dirty-bitmap.c
+++ b/migration/block-dirty-bitmap.c
@@ -61,6 +61,7 @@
 #include "qemu/osdep.h"
 #include "block/block.h"
 #include "block/block_int.h"
+#include "block/dirty-bitmap.h"
 #include "sysemu/block-backend.h"
 #include "sysemu/runstate.h"
 #include "qemu/main-loop.h"
diff --git a/migration/block.c b/migration/block.c
index 4347da1526..5da15a62de 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -20,6 +20,7 @@
 #include "qemu/cutils.h"
 #include "qemu/queue.h"
 #include "block.h"
+#include "block/dirty-bitmap.h"
 #include "migration/misc.h"
 #include "migration.h"
 #include "migration/register.h"
diff --git a/migration/savevm.c b/migration/savevm.c
index a0cdb714f7..a783789430 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -52,6 +52,7 @@
 #include "exec/target_page.h"
 #include "trace.h"
 #include "qemu/iov.h"
+#include "qemu/job.h"
 #include "qemu/main-loop.h"
 #include "block/snapshot.h"
 #include "qemu/cutils.h"
diff --git a/monitor/qmp-cmds.c b/monitor/qmp-cmds.c
index 2932b3f3a5..e0e1fdf507 100644
--- a/monitor/qmp-cmds.c
+++ b/monitor/qmp-cmds.c
@@ -14,6 +14,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "block/blockjob.h"
 #include "qemu/cutils.h"
 #include "qemu/option.h"
 #include "monitor/monitor.h"
diff --git a/nbd/server.c b/nbd/server.c
index 67ed333578..a4750e4188 100644
--- a/nbd/server.c
+++ b/nbd/server.c
@@ -19,7 +19,9 @@
 
 #include "qemu/osdep.h"
 
+#include "block/block_int.h"
 #include "block/export.h"
+#include "block/dirty-bitmap.h"
 #include "qapi/error.h"
 #include "qemu/queue.h"
 #include "trace.h"
diff --git a/qemu-img.c b/qemu-img.c
index 439d8de1e3..7e73c5c1da 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -48,6 +48,7 @@
 #include "sysemu/block-backend.h"
 #include "block/block_int.h"
 #include "block/blockjob.h"
+#include "block/dirty-bitmap.h"
 #include "block/qapi.h"
 #include "crypto/init.h"
 #include "trace/control.h"
diff --git a/softmmu/cpus.c b/softmmu/cpus.c
index 5a584a8d57..9cbc8172b5 100644
--- a/softmmu/cpus.c
+++ b/softmmu/cpus.c
@@ -34,6 +34,7 @@
 #include "sysemu/hw_accel.h"
 #include "exec/cpu-common.h"
 #include "qemu/thread.h"
+#include "qemu/main-loop.h"
 #include "qemu/plugin.h"
 #include "sysemu/cpus.h"
 #include "qemu/guest-random.h"
diff --git a/softmmu/physmem.c b/softmmu/physmem.c
index edec095c7a..cd5b6a1634 100644
--- a/softmmu/physmem.c
+++ b/softmmu/physmem.c
@@ -23,6 +23,7 @@
 
 #include "qemu/cutils.h"
 #include "qemu/cacheflush.h"
+#include "qemu/hbitmap.h"
 #include "qemu/madvise.h"
 
 #ifdef CONFIG_TCG
diff --git a/storage-daemon/qemu-storage-daemon.c b/storage-daemon/qemu-storage-daemon.c
index 7718f6dcda..da19498c66 100644
--- a/storage-daemon/qemu-storage-daemon.c
+++ b/storage-daemon/qemu-storage-daemon.c
@@ -48,6 +48,7 @@
 #include "qemu/config-file.h"
 #include "qemu/error-report.h"
 #include "qemu/help_option.h"
+#include "qemu/job.h"
 #include "qemu/log.h"
 #include "qemu/main-loop.h"
 #include "qemu/module.h"
diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
index 0ab4e0734a..5870301991 100644
--- a/target/i386/kvm/kvm.c
+++ b/target/i386/kvm/kvm.c
@@ -37,6 +37,7 @@
 #include "exec/gdbstub.h"
 #include "qemu/host-utils.h"
 #include "qemu/main-loop.h"
+#include "qemu/ratelimit.h"
 #include "qemu/config-file.h"
 #include "qemu/error-report.h"
 #include "qemu/memalign.h"
diff --git a/tests/unit/test-bdrv-drain.c b/tests/unit/test-bdrv-drain.c
index 8cedea4959..4fed8b751f 100644
--- a/tests/unit/test-bdrv-drain.c
+++ b/tests/unit/test-bdrv-drain.c
@@ -23,7 +23,7 @@
  */
 
 #include "qemu/osdep.h"
-#include "block/block.h"
+#include "block/block_int.h"
 #include "block/blockjob_int.h"
 #include "sysemu/block-backend.h"
 #include "qapi/error.h"
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
index 8ca5adec5e..ff5147f619 100644
--- a/tests/unit/test-block-iothread.c
+++ b/tests/unit/test-block-iothread.c
@@ -24,6 +24,7 @@
 
 #include "qemu/osdep.h"
 #include "block/block.h"
+#include "block/block_int-global-state.h"
 #include "block/blockjob_int.h"
 #include "sysemu/block-backend.h"
 #include "qapi/error.h"
diff --git a/scripts/block-coroutine-wrapper.py b/scripts/block-coroutine-wrapper.py
index 6e087fa0b7..dff3af49f5 100644
--- a/scripts/block-coroutine-wrapper.py
+++ b/scripts/block-coroutine-wrapper.py
@@ -42,7 +42,8 @@ def gen_header():
 #include "qemu/osdep.h"
 #include "block/coroutines.h"
 #include "block/block-gen.h"
-#include "block/block_int.h"\
+#include "block/block_int.h"
+#include "block/dirty-bitmap.h"
 """
 
 
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PULL 07/12] hw/sparc64/niagara: Use blk_name() instead of open-coding it
  2023-01-20  7:01 [PULL 00/12] Header cleanup patches for 2023-01-20 Markus Armbruster
                   ` (5 preceding siblings ...)
  2023-01-20  7:01 ` [PULL 06/12] include/block: Untangle inclusion loops Markus Armbruster
@ 2023-01-20  7:01 ` Markus Armbruster
  2023-01-20  7:01 ` [PULL 08/12] include/hw/block: Include hw/block/block.h where needed Markus Armbruster
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 17+ messages in thread
From: Markus Armbruster @ 2023-01-20  7:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, Philippe Mathieu-Daudé

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20221221133551.3967339-3-armbru@redhat.com>
---
 hw/sparc64/niagara.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/hw/sparc64/niagara.c b/hw/sparc64/niagara.c
index ab3c4ec346..6725cc61fd 100644
--- a/hw/sparc64/niagara.c
+++ b/hw/sparc64/niagara.c
@@ -23,7 +23,6 @@
  */
 
 #include "qemu/osdep.h"
-#include "block/block_int-common.h"
 #include "qemu/units.h"
 #include "cpu.h"
 #include "hw/boards.h"
@@ -144,10 +143,9 @@ static void niagara_init(MachineState *machine)
             memory_region_add_subregion(get_system_memory(),
                                         NIAGARA_VDISK_BASE, &s->vdisk_ram);
             dinfo->is_default = 1;
-            rom_add_file_fixed(blk_bs(blk)->filename, NIAGARA_VDISK_BASE, -1);
+            rom_add_file_fixed(blk_name(blk), NIAGARA_VDISK_BASE, -1);
         } else {
-            error_report("could not load ram disk '%s'",
-                         blk_bs(blk)->filename);
+            error_report("could not load ram disk '%s'", blk_name(blk));
             exit(1);
         }
     }
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PULL 08/12] include/hw/block: Include hw/block/block.h where needed
  2023-01-20  7:01 [PULL 00/12] Header cleanup patches for 2023-01-20 Markus Armbruster
                   ` (6 preceding siblings ...)
  2023-01-20  7:01 ` [PULL 07/12] hw/sparc64/niagara: Use blk_name() instead of open-coding it Markus Armbruster
@ 2023-01-20  7:01 ` Markus Armbruster
  2023-01-20  7:01 ` [PULL 09/12] include/hw/ppc: Split pnv_chip.h off pnv.h Markus Armbruster
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 17+ messages in thread
From: Markus Armbruster @ 2023-01-20  7:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, Philippe Mathieu-Daudé

hw/block/swim.h needs BlockConf.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20221221133551.3967339-4-armbru@redhat.com>
---
 include/hw/block/swim.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/hw/block/swim.h b/include/hw/block/swim.h
index c1bd5f6555..9b3dcb029d 100644
--- a/include/hw/block/swim.h
+++ b/include/hw/block/swim.h
@@ -11,6 +11,7 @@
 #ifndef SWIM_H
 #define SWIM_H
 
+#include "hw/block/block.h"
 #include "hw/sysbus.h"
 #include "qom/object.h"
 
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PULL 09/12] include/hw/ppc: Split pnv_chip.h off pnv.h
  2023-01-20  7:01 [PULL 00/12] Header cleanup patches for 2023-01-20 Markus Armbruster
                   ` (7 preceding siblings ...)
  2023-01-20  7:01 ` [PULL 08/12] include/hw/block: Include hw/block/block.h where needed Markus Armbruster
@ 2023-01-20  7:01 ` Markus Armbruster
  2023-01-23  9:44   ` Philippe Mathieu-Daudé
  2023-01-20  7:01 ` [PULL 10/12] include/hw/ppc: Supply a few missing includes Markus Armbruster
                   ` (3 subsequent siblings)
  12 siblings, 1 reply; 17+ messages in thread
From: Markus Armbruster @ 2023-01-20  7:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, Cédric Le Goater, Daniel Henrique Barboza

PnvChipClass, PnvChip, Pnv8Chip, Pnv9Chip, and Pnv10Chip are defined
in pnv.h.  Many users of the header don't actually need them.  One
instance is this inclusion loop: hw/ppc/pnv_homer.h includes
hw/ppc/pnv.h for typedef PnvChip, and vice versa for struct PnvHomer.

Similar structs live in their own headers: PnvHomerClass and PnvHomer
in pnv_homer.h, PnvLpcClass and PnvLpcController in pci_lpc.h,
PnvPsiClass, PnvPsi, Pnv8Psi, Pnv9Psi, Pnv10Psi in pnv_psi.h, ...

Move PnvChipClass, PnvChip, Pnv8Chip, Pnv9Chip, and Pnv10Chip to new
pnv_chip.h, and adjust include directives.  This breaks the inclusion
loop mentioned above.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Message-Id: <20221222104628.659681-2-armbru@redhat.com>
---
 include/hw/ppc/pnv.h       | 143 +-----------------------------------
 include/hw/ppc/pnv_chip.h  | 147 +++++++++++++++++++++++++++++++++++++
 hw/intc/pnv_xive.c         |   1 +
 hw/intc/pnv_xive2.c        |   1 +
 hw/pci-host/pnv_phb3.c     |   1 +
 hw/pci-host/pnv_phb4_pec.c |   1 +
 hw/ppc/pnv.c               |   3 +
 hw/ppc/pnv_core.c          |   1 +
 hw/ppc/pnv_homer.c         |   1 +
 hw/ppc/pnv_lpc.c           |   1 +
 hw/ppc/pnv_xscom.c         |   1 +
 11 files changed, 160 insertions(+), 141 deletions(-)
 create mode 100644 include/hw/ppc/pnv_chip.h

diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
index 9ef7e2d0dc..ca49e4281d 100644
--- a/include/hw/ppc/pnv.h
+++ b/include/hw/ppc/pnv.h
@@ -20,158 +20,19 @@
 #ifndef PPC_PNV_H
 #define PPC_PNV_H
 
+#include "cpu.h"
 #include "hw/boards.h"
 #include "hw/sysbus.h"
 #include "hw/ipmi/ipmi.h"
-#include "hw/ppc/pnv_lpc.h"
 #include "hw/ppc/pnv_pnor.h"
-#include "hw/ppc/pnv_psi.h"
-#include "hw/ppc/pnv_occ.h"
-#include "hw/ppc/pnv_sbe.h"
-#include "hw/ppc/pnv_homer.h"
-#include "hw/ppc/pnv_xive.h"
-#include "hw/ppc/pnv_core.h"
-#include "hw/pci-host/pnv_phb3.h"
-#include "hw/pci-host/pnv_phb4.h"
 #include "hw/pci-host/pnv_phb.h"
-#include "qom/object.h"
 
 #define TYPE_PNV_CHIP "pnv-chip"
-OBJECT_DECLARE_TYPE(PnvChip, PnvChipClass,
-                    PNV_CHIP)
 
-struct PnvChip {
-    /*< private >*/
-    SysBusDevice parent_obj;
-
-    /*< public >*/
-    uint32_t     chip_id;
-    uint64_t     ram_start;
-    uint64_t     ram_size;
-
-    uint32_t     nr_cores;
-    uint32_t     nr_threads;
-    uint64_t     cores_mask;
-    PnvCore      **cores;
-
-    uint32_t     num_pecs;
-
-    MemoryRegion xscom_mmio;
-    MemoryRegion xscom;
-    AddressSpace xscom_as;
-
-    MemoryRegion *fw_mr;
-    gchar        *dt_isa_nodename;
-};
-
-#define TYPE_PNV8_CHIP "pnv8-chip"
+typedef struct PnvChip PnvChip;
 typedef struct Pnv8Chip Pnv8Chip;
-DECLARE_INSTANCE_CHECKER(Pnv8Chip, PNV8_CHIP,
-                         TYPE_PNV8_CHIP)
-
-struct Pnv8Chip {
-    /*< private >*/
-    PnvChip      parent_obj;
-
-    /*< public >*/
-    MemoryRegion icp_mmio;
-
-    PnvLpcController lpc;
-    Pnv8Psi      psi;
-    PnvOCC       occ;
-    PnvHomer     homer;
-
-#define PNV8_CHIP_PHB3_MAX 4
-    /*
-     * The array is used to allow quick access to the phbs by
-     * pnv_ics_get_child() and pnv_ics_resend_child().
-     */
-    PnvPHB       *phbs[PNV8_CHIP_PHB3_MAX];
-    uint32_t     num_phbs;
-
-    XICSFabric    *xics;
-};
-
-#define TYPE_PNV9_CHIP "pnv9-chip"
 typedef struct Pnv9Chip Pnv9Chip;
-DECLARE_INSTANCE_CHECKER(Pnv9Chip, PNV9_CHIP,
-                         TYPE_PNV9_CHIP)
-
-struct Pnv9Chip {
-    /*< private >*/
-    PnvChip      parent_obj;
-
-    /*< public >*/
-    PnvXive      xive;
-    Pnv9Psi      psi;
-    PnvLpcController lpc;
-    PnvOCC       occ;
-    PnvSBE       sbe;
-    PnvHomer     homer;
-
-    uint32_t     nr_quads;
-    PnvQuad      *quads;
-
-#define PNV9_CHIP_MAX_PEC 3
-    PnvPhb4PecState pecs[PNV9_CHIP_MAX_PEC];
-};
-
-/*
- * A SMT8 fused core is a pair of SMT4 cores.
- */
-#define PNV9_PIR2FUSEDCORE(pir) (((pir) >> 3) & 0xf)
-#define PNV9_PIR2CHIP(pir)      (((pir) >> 8) & 0x7f)
-
-#define TYPE_PNV10_CHIP "pnv10-chip"
 typedef struct Pnv10Chip Pnv10Chip;
-DECLARE_INSTANCE_CHECKER(Pnv10Chip, PNV10_CHIP,
-                         TYPE_PNV10_CHIP)
-
-struct Pnv10Chip {
-    /*< private >*/
-    PnvChip      parent_obj;
-
-    /*< public >*/
-    PnvXive2     xive;
-    Pnv9Psi      psi;
-    PnvLpcController lpc;
-    PnvOCC       occ;
-    PnvSBE       sbe;
-    PnvHomer     homer;
-
-    uint32_t     nr_quads;
-    PnvQuad      *quads;
-
-#define PNV10_CHIP_MAX_PEC 2
-    PnvPhb4PecState pecs[PNV10_CHIP_MAX_PEC];
-};
-
-#define PNV10_PIR2FUSEDCORE(pir) (((pir) >> 3) & 0xf)
-#define PNV10_PIR2CHIP(pir)      (((pir) >> 8) & 0x7f)
-
-struct PnvChipClass {
-    /*< private >*/
-    SysBusDeviceClass parent_class;
-
-    /*< public >*/
-    uint64_t     chip_cfam_id;
-    uint64_t     cores_mask;
-    uint32_t     num_pecs;
-    uint32_t     num_phbs;
-
-    DeviceRealize parent_realize;
-
-    uint32_t (*core_pir)(PnvChip *chip, uint32_t core_id);
-    void (*intc_create)(PnvChip *chip, PowerPCCPU *cpu, Error **errp);
-    void (*intc_reset)(PnvChip *chip, PowerPCCPU *cpu);
-    void (*intc_destroy)(PnvChip *chip, PowerPCCPU *cpu);
-    void (*intc_print_info)(PnvChip *chip, PowerPCCPU *cpu, Monitor *mon);
-    ISABus *(*isa_create)(PnvChip *chip, Error **errp);
-    void (*dt_populate)(PnvChip *chip, void *fdt);
-    void (*pic_print_info)(PnvChip *chip, Monitor *mon);
-    uint64_t (*xscom_core_base)(PnvChip *chip, uint32_t core_id);
-    uint32_t (*xscom_pcba)(PnvChip *chip, uint64_t addr);
-};
 
 #define PNV_CHIP_TYPE_SUFFIX "-" TYPE_PNV_CHIP
 #define PNV_CHIP_TYPE_NAME(cpu_model) cpu_model PNV_CHIP_TYPE_SUFFIX
diff --git a/include/hw/ppc/pnv_chip.h b/include/hw/ppc/pnv_chip.h
new file mode 100644
index 0000000000..53e1d921d7
--- /dev/null
+++ b/include/hw/ppc/pnv_chip.h
@@ -0,0 +1,147 @@
+#ifndef PPC_PNV_CHIP_H
+#define PPC_PNV_CHIP_H
+
+#include "hw/pci-host/pnv_phb4.h"
+#include "hw/ppc/pnv_core.h"
+#include "hw/ppc/pnv_homer.h"
+#include "hw/ppc/pnv_lpc.h"
+#include "hw/ppc/pnv_occ.h"
+#include "hw/ppc/pnv_psi.h"
+#include "hw/ppc/pnv_sbe.h"
+#include "hw/ppc/pnv_xive.h"
+#include "hw/sysbus.h"
+
+OBJECT_DECLARE_TYPE(PnvChip, PnvChipClass,
+                    PNV_CHIP)
+
+struct PnvChip {
+    /*< private >*/
+    SysBusDevice parent_obj;
+
+    /*< public >*/
+    uint32_t     chip_id;
+    uint64_t     ram_start;
+    uint64_t     ram_size;
+
+    uint32_t     nr_cores;
+    uint32_t     nr_threads;
+    uint64_t     cores_mask;
+    PnvCore      **cores;
+
+    uint32_t     num_pecs;
+
+    MemoryRegion xscom_mmio;
+    MemoryRegion xscom;
+    AddressSpace xscom_as;
+
+    MemoryRegion *fw_mr;
+    gchar        *dt_isa_nodename;
+};
+
+#define TYPE_PNV8_CHIP "pnv8-chip"
+DECLARE_INSTANCE_CHECKER(Pnv8Chip, PNV8_CHIP,
+                         TYPE_PNV8_CHIP)
+
+struct Pnv8Chip {
+    /*< private >*/
+    PnvChip      parent_obj;
+
+    /*< public >*/
+    MemoryRegion icp_mmio;
+
+    PnvLpcController lpc;
+    Pnv8Psi      psi;
+    PnvOCC       occ;
+    PnvHomer     homer;
+
+#define PNV8_CHIP_PHB3_MAX 4
+    /*
+     * The array is used to allow quick access to the phbs by
+     * pnv_ics_get_child() and pnv_ics_resend_child().
+     */
+    PnvPHB       *phbs[PNV8_CHIP_PHB3_MAX];
+    uint32_t     num_phbs;
+
+    XICSFabric    *xics;
+};
+
+#define TYPE_PNV9_CHIP "pnv9-chip"
+DECLARE_INSTANCE_CHECKER(Pnv9Chip, PNV9_CHIP,
+                         TYPE_PNV9_CHIP)
+
+struct Pnv9Chip {
+    /*< private >*/
+    PnvChip      parent_obj;
+
+    /*< public >*/
+    PnvXive      xive;
+    Pnv9Psi      psi;
+    PnvLpcController lpc;
+    PnvOCC       occ;
+    PnvSBE       sbe;
+    PnvHomer     homer;
+
+    uint32_t     nr_quads;
+    PnvQuad      *quads;
+
+#define PNV9_CHIP_MAX_PEC 3
+    PnvPhb4PecState pecs[PNV9_CHIP_MAX_PEC];
+};
+
+/*
+ * A SMT8 fused core is a pair of SMT4 cores.
+ */
+#define PNV9_PIR2FUSEDCORE(pir) (((pir) >> 3) & 0xf)
+#define PNV9_PIR2CHIP(pir)      (((pir) >> 8) & 0x7f)
+
+#define TYPE_PNV10_CHIP "pnv10-chip"
+DECLARE_INSTANCE_CHECKER(Pnv10Chip, PNV10_CHIP,
+                         TYPE_PNV10_CHIP)
+
+struct Pnv10Chip {
+    /*< private >*/
+    PnvChip      parent_obj;
+
+    /*< public >*/
+    PnvXive2     xive;
+    Pnv9Psi      psi;
+    PnvLpcController lpc;
+    PnvOCC       occ;
+    PnvSBE       sbe;
+    PnvHomer     homer;
+
+    uint32_t     nr_quads;
+    PnvQuad      *quads;
+
+#define PNV10_CHIP_MAX_PEC 2
+    PnvPhb4PecState pecs[PNV10_CHIP_MAX_PEC];
+};
+
+#define PNV10_PIR2FUSEDCORE(pir) (((pir) >> 3) & 0xf)
+#define PNV10_PIR2CHIP(pir)      (((pir) >> 8) & 0x7f)
+
+struct PnvChipClass {
+    /*< private >*/
+    SysBusDeviceClass parent_class;
+
+    /*< public >*/
+    uint64_t     chip_cfam_id;
+    uint64_t     cores_mask;
+    uint32_t     num_pecs;
+    uint32_t     num_phbs;
+
+    DeviceRealize parent_realize;
+
+    uint32_t (*core_pir)(PnvChip *chip, uint32_t core_id);
+    void (*intc_create)(PnvChip *chip, PowerPCCPU *cpu, Error **errp);
+    void (*intc_reset)(PnvChip *chip, PowerPCCPU *cpu);
+    void (*intc_destroy)(PnvChip *chip, PowerPCCPU *cpu);
+    void (*intc_print_info)(PnvChip *chip, PowerPCCPU *cpu, Monitor *mon);
+    ISABus *(*isa_create)(PnvChip *chip, Error **errp);
+    void (*dt_populate)(PnvChip *chip, void *fdt);
+    void (*pic_print_info)(PnvChip *chip, Monitor *mon);
+    uint64_t (*xscom_core_base)(PnvChip *chip, uint32_t core_id);
+    uint32_t (*xscom_pcba)(PnvChip *chip, uint64_t addr);
+};
+
+#endif
diff --git a/hw/intc/pnv_xive.c b/hw/intc/pnv_xive.c
index c7b75ed12e..622f9d28b7 100644
--- a/hw/intc/pnv_xive.c
+++ b/hw/intc/pnv_xive.c
@@ -18,6 +18,7 @@
 #include "monitor/monitor.h"
 #include "hw/ppc/fdt.h"
 #include "hw/ppc/pnv.h"
+#include "hw/ppc/pnv_chip.h"
 #include "hw/ppc/pnv_core.h"
 #include "hw/ppc/pnv_xscom.h"
 #include "hw/ppc/pnv_xive.h"
diff --git a/hw/intc/pnv_xive2.c b/hw/intc/pnv_xive2.c
index f22ce5ca59..7176d70234 100644
--- a/hw/intc/pnv_xive2.c
+++ b/hw/intc/pnv_xive2.c
@@ -16,6 +16,7 @@
 #include "monitor/monitor.h"
 #include "hw/ppc/fdt.h"
 #include "hw/ppc/pnv.h"
+#include "hw/ppc/pnv_chip.h"
 #include "hw/ppc/pnv_core.h"
 #include "hw/ppc/pnv_xscom.h"
 #include "hw/ppc/xive2.h"
diff --git a/hw/pci-host/pnv_phb3.c b/hw/pci-host/pnv_phb3.c
index 9054c393a2..7a21497cf8 100644
--- a/hw/pci-host/pnv_phb3.c
+++ b/hw/pci-host/pnv_phb3.c
@@ -16,6 +16,7 @@
 #include "hw/pci/pcie_host.h"
 #include "hw/pci/pcie_port.h"
 #include "hw/ppc/pnv.h"
+#include "hw/ppc/pnv_chip.h"
 #include "hw/irq.h"
 #include "hw/qdev-properties.h"
 #include "qom/object.h"
diff --git a/hw/pci-host/pnv_phb4_pec.c b/hw/pci-host/pnv_phb4_pec.c
index 9871f462cd..43267a428f 100644
--- a/hw/pci-host/pnv_phb4_pec.c
+++ b/hw/pci-host/pnv_phb4_pec.c
@@ -17,6 +17,7 @@
 #include "hw/pci/pci_bridge.h"
 #include "hw/pci/pci_bus.h"
 #include "hw/ppc/pnv.h"
+#include "hw/ppc/pnv_chip.h"
 #include "hw/qdev-properties.h"
 #include "sysemu/sysemu.h"
 
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index 3d01e26f84..44b1fbbc93 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -44,9 +44,12 @@
 #include "target/ppc/mmu-hash64.h"
 #include "hw/pci/msi.h"
 #include "hw/pci-host/pnv_phb.h"
+#include "hw/pci-host/pnv_phb3.h"
+#include "hw/pci-host/pnv_phb4.h"
 
 #include "hw/ppc/xics.h"
 #include "hw/qdev-properties.h"
+#include "hw/ppc/pnv_chip.h"
 #include "hw/ppc/pnv_xscom.h"
 #include "hw/ppc/pnv_pnor.h"
 
diff --git a/hw/ppc/pnv_core.c b/hw/ppc/pnv_core.c
index 9ee79192dd..410f31bdf8 100644
--- a/hw/ppc/pnv_core.c
+++ b/hw/ppc/pnv_core.c
@@ -25,6 +25,7 @@
 #include "target/ppc/cpu.h"
 #include "hw/ppc/ppc.h"
 #include "hw/ppc/pnv.h"
+#include "hw/ppc/pnv_chip.h"
 #include "hw/ppc/pnv_core.h"
 #include "hw/ppc/pnv_xscom.h"
 #include "hw/ppc/xics.h"
diff --git a/hw/ppc/pnv_homer.c b/hw/ppc/pnv_homer.c
index ea73919e54..f9a203d11d 100644
--- a/hw/ppc/pnv_homer.c
+++ b/hw/ppc/pnv_homer.c
@@ -25,6 +25,7 @@
 #include "hw/qdev-core.h"
 #include "hw/qdev-properties.h"
 #include "hw/ppc/pnv.h"
+#include "hw/ppc/pnv_chip.h"
 #include "hw/ppc/pnv_homer.h"
 #include "hw/ppc/pnv_xscom.h"
 
diff --git a/hw/ppc/pnv_lpc.c b/hw/ppc/pnv_lpc.c
index ee890e7ab4..71143b7692 100644
--- a/hw/ppc/pnv_lpc.c
+++ b/hw/ppc/pnv_lpc.c
@@ -26,6 +26,7 @@
 #include "hw/isa/isa.h"
 #include "hw/qdev-properties.h"
 #include "hw/ppc/pnv.h"
+#include "hw/ppc/pnv_chip.h"
 #include "hw/ppc/pnv_lpc.h"
 #include "hw/ppc/pnv_xscom.h"
 #include "hw/ppc/fdt.h"
diff --git a/hw/ppc/pnv_xscom.c b/hw/ppc/pnv_xscom.c
index 79f10de57f..d820e05e40 100644
--- a/hw/ppc/pnv_xscom.c
+++ b/hw/ppc/pnv_xscom.c
@@ -26,6 +26,7 @@
 
 #include "hw/ppc/fdt.h"
 #include "hw/ppc/pnv.h"
+#include "hw/ppc/pnv_chip.h"
 #include "hw/ppc/pnv_xscom.h"
 
 #include <libfdt.h>
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PULL 10/12] include/hw/ppc: Supply a few missing includes
  2023-01-20  7:01 [PULL 00/12] Header cleanup patches for 2023-01-20 Markus Armbruster
                   ` (8 preceding siblings ...)
  2023-01-20  7:01 ` [PULL 09/12] include/hw/ppc: Split pnv_chip.h off pnv.h Markus Armbruster
@ 2023-01-20  7:01 ` Markus Armbruster
  2023-01-20  7:01 ` [PULL 11/12] include/hw/ppc: Don't include hw/pci-host/pnv_phb.h from pnv.h Markus Armbruster
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 17+ messages in thread
From: Markus Armbruster @ 2023-01-20  7:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, Cédric Le Goater, Daniel Henrique Barboza

A few headers neglect to include headers they need.  They compile only
if something else includes the required header(s) first.  Fix that.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Message-Id: <20221222104628.659681-3-armbru@redhat.com>
---
 include/hw/ppc/pnv_lpc.h    | 3 ++-
 include/hw/ppc/pnv_occ.h    | 3 ++-
 include/hw/ppc/pnv_pnor.h   | 2 +-
 include/hw/ppc/pnv_sbe.h    | 3 ++-
 include/hw/ppc/pnv_xscom.h  | 3 ++-
 include/hw/ppc/xive2.h      | 2 ++
 include/hw/ppc/xive2_regs.h | 2 ++
 7 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/include/hw/ppc/pnv_lpc.h b/include/hw/ppc/pnv_lpc.h
index 8a8d1a3d42..001eee27d7 100644
--- a/include/hw/ppc/pnv_lpc.h
+++ b/include/hw/ppc/pnv_lpc.h
@@ -20,7 +20,8 @@
 #ifndef PPC_PNV_LPC_H
 #define PPC_PNV_LPC_H
 
-#include "qom/object.h"
+#include "exec/memory.h"
+#include "hw/qdev-core.h"
 
 #define TYPE_PNV_LPC "pnv-lpc"
 typedef struct PnvLpcClass PnvLpcClass;
diff --git a/include/hw/ppc/pnv_occ.h b/include/hw/ppc/pnv_occ.h
index 90a81dae2b..df321244e3 100644
--- a/include/hw/ppc/pnv_occ.h
+++ b/include/hw/ppc/pnv_occ.h
@@ -20,7 +20,8 @@
 #ifndef PPC_PNV_OCC_H
 #define PPC_PNV_OCC_H
 
-#include "qom/object.h"
+#include "exec/memory.h"
+#include "hw/qdev-core.h"
 
 #define TYPE_PNV_OCC "pnv-occ"
 OBJECT_DECLARE_TYPE(PnvOCC, PnvOCCClass,
diff --git a/include/hw/ppc/pnv_pnor.h b/include/hw/ppc/pnv_pnor.h
index bab2f79844..2e37ac88bf 100644
--- a/include/hw/ppc/pnv_pnor.h
+++ b/include/hw/ppc/pnv_pnor.h
@@ -10,7 +10,7 @@
 #ifndef PPC_PNV_PNOR_H
 #define PPC_PNV_PNOR_H
 
-#include "qom/object.h"
+#include "hw/sysbus.h"
 
 /*
  * PNOR offset on the LPC FW address space
diff --git a/include/hw/ppc/pnv_sbe.h b/include/hw/ppc/pnv_sbe.h
index f54a3ae9ba..b6b378ad14 100644
--- a/include/hw/ppc/pnv_sbe.h
+++ b/include/hw/ppc/pnv_sbe.h
@@ -20,7 +20,8 @@
 #ifndef PPC_PNV_SBE_H
 #define PPC_PNV_SBE_H
 
-#include "qom/object.h"
+#include "exec/memory.h"
+#include "hw/qdev-core.h"
 
 #define TYPE_PNV_SBE "pnv-sbe"
 OBJECT_DECLARE_TYPE(PnvSBE, PnvSBEClass, PNV_SBE)
diff --git a/include/hw/ppc/pnv_xscom.h b/include/hw/ppc/pnv_xscom.h
index c6e9ef8dd2..cbe848d27b 100644
--- a/include/hw/ppc/pnv_xscom.h
+++ b/include/hw/ppc/pnv_xscom.h
@@ -20,7 +20,8 @@
 #ifndef PPC_PNV_XSCOM_H
 #define PPC_PNV_XSCOM_H
 
-#include "qom/object.h"
+#include "exec/memory.h"
+#include "hw/ppc/pnv.h"
 
 typedef struct PnvXScomInterface PnvXScomInterface;
 
diff --git a/include/hw/ppc/xive2.h b/include/hw/ppc/xive2.h
index e9e3ea135e..ab68f8d157 100644
--- a/include/hw/ppc/xive2.h
+++ b/include/hw/ppc/xive2.h
@@ -11,7 +11,9 @@
 #ifndef PPC_XIVE2_H
 #define PPC_XIVE2_H
 
+#include "hw/ppc/xive.h"
 #include "hw/ppc/xive2_regs.h"
+#include "hw/sysbus.h"
 
 /*
  * XIVE2 Router (POWER10)
diff --git a/include/hw/ppc/xive2_regs.h b/include/hw/ppc/xive2_regs.h
index 14605bd458..b7adbdb7b9 100644
--- a/include/hw/ppc/xive2_regs.h
+++ b/include/hw/ppc/xive2_regs.h
@@ -10,6 +10,8 @@
 #ifndef PPC_XIVE2_REGS_H
 #define PPC_XIVE2_REGS_H
 
+#include "cpu.h"
+
 /*
  * Thread Interrupt Management Area (TIMA)
  *
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PULL 11/12] include/hw/ppc: Don't include hw/pci-host/pnv_phb.h from pnv.h
  2023-01-20  7:01 [PULL 00/12] Header cleanup patches for 2023-01-20 Markus Armbruster
                   ` (9 preceding siblings ...)
  2023-01-20  7:01 ` [PULL 10/12] include/hw/ppc: Supply a few missing includes Markus Armbruster
@ 2023-01-20  7:01 ` Markus Armbruster
  2023-01-20  7:01 ` [PULL 12/12] include/hw/ppc include/hw/pci-host: Drop extra typedefs Markus Armbruster
  2023-01-20 16:17 ` [PULL 00/12] Header cleanup patches for 2023-01-20 Peter Maydell
  12 siblings, 0 replies; 17+ messages in thread
From: Markus Armbruster @ 2023-01-20  7:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, Cédric Le Goater, Daniel Henrique Barboza

The next commit needs to include hw/ppc/pnv.h from
hw/pci-host/pnv_phb.h.  Avoid an inclusion loop.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Message-Id: <20221222104628.659681-4-armbru@redhat.com>
---
 include/hw/pci-host/pnv_phb4.h | 3 ++-
 include/hw/ppc/pnv.h           | 3 ++-
 hw/ppc/pnv_psi.c               | 1 +
 3 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/include/hw/pci-host/pnv_phb4.h b/include/hw/pci-host/pnv_phb4.h
index d9cea3f952..b4f2b29fb5 100644
--- a/include/hw/pci-host/pnv_phb4.h
+++ b/include/hw/pci-host/pnv_phb4.h
@@ -10,14 +10,15 @@
 #ifndef PCI_HOST_PNV_PHB4_H
 #define PCI_HOST_PNV_PHB4_H
 
+#include "hw/pci-host/pnv_phb.h"
 #include "hw/pci/pci_bus.h"
+#include "hw/ppc/pnv.h"
 #include "hw/ppc/xive.h"
 #include "qom/object.h"
 
 typedef struct PnvPhb4PecState PnvPhb4PecState;
 typedef struct PnvPhb4PecStack PnvPhb4PecStack;
 typedef struct PnvPHB4 PnvPHB4;
-typedef struct PnvPHB PnvPHB;
 typedef struct PnvChip PnvChip;
 
 /*
diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
index ca49e4281d..96fb850419 100644
--- a/include/hw/ppc/pnv.h
+++ b/include/hw/ppc/pnv.h
@@ -25,7 +25,6 @@
 #include "hw/sysbus.h"
 #include "hw/ipmi/ipmi.h"
 #include "hw/ppc/pnv_pnor.h"
-#include "hw/pci-host/pnv_phb.h"
 
 #define TYPE_PNV_CHIP "pnv-chip"
 
@@ -59,6 +58,8 @@ DECLARE_INSTANCE_CHECKER(PnvChip, PNV_CHIP_POWER10,
 
 PowerPCCPU *pnv_chip_find_cpu(PnvChip *chip, uint32_t pir);
 
+typedef struct PnvPHB PnvPHB;
+
 #define TYPE_PNV_MACHINE       MACHINE_TYPE_NAME("powernv")
 typedef struct PnvMachineClass PnvMachineClass;
 typedef struct PnvMachineState PnvMachineState;
diff --git a/hw/ppc/pnv_psi.c b/hw/ppc/pnv_psi.c
index 98045ed3d2..8aa09ab26b 100644
--- a/hw/ppc/pnv_psi.c
+++ b/hw/ppc/pnv_psi.c
@@ -18,6 +18,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "exec/address-spaces.h"
 #include "hw/irq.h"
 #include "target/ppc/cpu.h"
 #include "qemu/log.h"
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PULL 12/12] include/hw/ppc include/hw/pci-host: Drop extra typedefs
  2023-01-20  7:01 [PULL 00/12] Header cleanup patches for 2023-01-20 Markus Armbruster
                   ` (10 preceding siblings ...)
  2023-01-20  7:01 ` [PULL 11/12] include/hw/ppc: Don't include hw/pci-host/pnv_phb.h from pnv.h Markus Armbruster
@ 2023-01-20  7:01 ` Markus Armbruster
  2023-01-20 16:17 ` [PULL 00/12] Header cleanup patches for 2023-01-20 Peter Maydell
  12 siblings, 0 replies; 17+ messages in thread
From: Markus Armbruster @ 2023-01-20  7:01 UTC (permalink / raw)
  To: qemu-devel
  Cc: peter.maydell, Philippe Mathieu-Daudé,
	Cédric Le Goater, Daniel Henrique Barboza

PnvChip is typedef'ed in five places, and PnvPhb4PecState in two.
Keep one, drop the others.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Message-Id: <20221222104628.659681-5-armbru@redhat.com>
---
 hw/pci-host/pnv_phb.h          | 2 +-
 include/hw/pci-host/pnv_phb3.h | 1 -
 include/hw/pci-host/pnv_phb4.h | 2 --
 include/hw/ppc/pnv_core.h      | 3 +--
 include/hw/ppc/pnv_homer.h     | 2 +-
 include/hw/ppc/pnv_lpc.h       | 8 ++------
 include/hw/ppc/pnv_xive.h      | 7 +++----
 7 files changed, 8 insertions(+), 17 deletions(-)

diff --git a/hw/pci-host/pnv_phb.h b/hw/pci-host/pnv_phb.h
index 58ebd6dd0f..eb429d529f 100644
--- a/hw/pci-host/pnv_phb.h
+++ b/hw/pci-host/pnv_phb.h
@@ -12,9 +12,9 @@
 
 #include "hw/pci/pcie_host.h"
 #include "hw/pci/pcie_port.h"
+#include "hw/ppc/pnv.h"
 #include "qom/object.h"
 
-typedef struct PnvChip PnvChip;
 typedef struct PnvPhb4PecState PnvPhb4PecState;
 
 struct PnvPHB {
diff --git a/include/hw/pci-host/pnv_phb3.h b/include/hw/pci-host/pnv_phb3.h
index f791ebda9b..d62b3091ac 100644
--- a/include/hw/pci-host/pnv_phb3.h
+++ b/include/hw/pci-host/pnv_phb3.h
@@ -15,7 +15,6 @@
 #include "hw/pci-host/pnv_phb.h"
 
 typedef struct PnvPHB3 PnvPHB3;
-typedef struct PnvChip PnvChip;
 
 /*
  * PHB3 XICS Source for MSIs
diff --git a/include/hw/pci-host/pnv_phb4.h b/include/hw/pci-host/pnv_phb4.h
index b4f2b29fb5..1f3237c9d5 100644
--- a/include/hw/pci-host/pnv_phb4.h
+++ b/include/hw/pci-host/pnv_phb4.h
@@ -16,10 +16,8 @@
 #include "hw/ppc/xive.h"
 #include "qom/object.h"
 
-typedef struct PnvPhb4PecState PnvPhb4PecState;
 typedef struct PnvPhb4PecStack PnvPhb4PecStack;
 typedef struct PnvPHB4 PnvPHB4;
-typedef struct PnvChip PnvChip;
 
 /*
  * We have one such address space wrapper per possible device under
diff --git a/include/hw/ppc/pnv_core.h b/include/hw/ppc/pnv_core.h
index c22eab2e1f..3d75706e95 100644
--- a/include/hw/ppc/pnv_core.h
+++ b/include/hw/ppc/pnv_core.h
@@ -22,14 +22,13 @@
 
 #include "hw/cpu/core.h"
 #include "target/ppc/cpu.h"
+#include "hw/ppc/pnv.h"
 #include "qom/object.h"
 
 #define TYPE_PNV_CORE "powernv-cpu-core"
 OBJECT_DECLARE_TYPE(PnvCore, PnvCoreClass,
                     PNV_CORE)
 
-typedef struct PnvChip PnvChip;
-
 struct PnvCore {
     /*< private >*/
     CPUCore parent_obj;
diff --git a/include/hw/ppc/pnv_homer.h b/include/hw/ppc/pnv_homer.h
index 07e8b19311..b1c5d498dc 100644
--- a/include/hw/ppc/pnv_homer.h
+++ b/include/hw/ppc/pnv_homer.h
@@ -39,7 +39,7 @@ DECLARE_INSTANCE_CHECKER(PnvHomer, PNV10_HOMER,
 struct PnvHomer {
     DeviceState parent;
 
-    struct PnvChip *chip;
+    PnvChip *chip;
     MemoryRegion pba_regs;
     MemoryRegion regs;
 };
diff --git a/include/hw/ppc/pnv_lpc.h b/include/hw/ppc/pnv_lpc.h
index 001eee27d7..5d22c45570 100644
--- a/include/hw/ppc/pnv_lpc.h
+++ b/include/hw/ppc/pnv_lpc.h
@@ -21,6 +21,7 @@
 #define PPC_PNV_LPC_H
 
 #include "exec/memory.h"
+#include "hw/ppc/pnv.h"
 #include "hw/qdev-core.h"
 
 #define TYPE_PNV_LPC "pnv-lpc"
@@ -93,13 +94,8 @@ struct PnvLpcClass {
     DeviceRealize parent_realize;
 };
 
-/*
- * Old compilers error on typdef forward declarations. Keep them happy.
- */
-struct PnvChip;
-
 ISABus *pnv_lpc_isa_create(PnvLpcController *lpc, bool use_cpld, Error **errp);
-int pnv_dt_lpc(struct PnvChip *chip, void *fdt, int root_offset,
+int pnv_dt_lpc(PnvChip *chip, void *fdt, int root_offset,
                uint64_t lpcm_addr, uint64_t lpcm_size);
 
 #endif /* PPC_PNV_LPC_H */
diff --git a/include/hw/ppc/pnv_xive.h b/include/hw/ppc/pnv_xive.h
index b5d91505e5..9c48430ee4 100644
--- a/include/hw/ppc/pnv_xive.h
+++ b/include/hw/ppc/pnv_xive.h
@@ -10,12 +10,11 @@
 #ifndef PPC_PNV_XIVE_H
 #define PPC_PNV_XIVE_H
 
+#include "hw/ppc/pnv.h"
 #include "hw/ppc/xive.h"
 #include "qom/object.h"
 #include "hw/ppc/xive2.h"
 
-struct PnvChip;
-
 #define TYPE_PNV_XIVE "pnv-xive"
 OBJECT_DECLARE_TYPE(PnvXive, PnvXiveClass,
                     PNV_XIVE)
@@ -31,7 +30,7 @@ struct PnvXive {
     XiveRouter    parent_obj;
 
     /* Owning chip */
-    struct PnvChip *chip;
+    PnvChip *chip;
 
     /* XSCOM addresses giving access to the controller registers */
     MemoryRegion  xscom_regs;
@@ -106,7 +105,7 @@ typedef struct PnvXive2 {
     Xive2Router   parent_obj;
 
     /* Owning chip */
-    struct PnvChip *chip;
+    PnvChip *chip;
 
     /* XSCOM addresses giving access to the controller registers */
     MemoryRegion  xscom_regs;
-- 
2.39.0



^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PULL 00/12] Header cleanup patches for 2023-01-20
  2023-01-20  7:01 [PULL 00/12] Header cleanup patches for 2023-01-20 Markus Armbruster
                   ` (11 preceding siblings ...)
  2023-01-20  7:01 ` [PULL 12/12] include/hw/ppc include/hw/pci-host: Drop extra typedefs Markus Armbruster
@ 2023-01-20 16:17 ` Peter Maydell
  12 siblings, 0 replies; 17+ messages in thread
From: Peter Maydell @ 2023-01-20 16:17 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu-devel

On Fri, 20 Jan 2023 at 07:01, Markus Armbruster <armbru@redhat.com> wrote:
>
> The following changes since commit 7ec8aeb6048018680c06fb9205c01ca6bda08846:
>
>   Merge tag 'pull-tpm-2023-01-17-1' of https://github.com/stefanberger/qemu-tpm into staging (2023-01-17 15:47:53 +0000)
>
> are available in the Git repository at:
>
>   https://repo.or.cz/qemu/armbru.git tags/pull-include-2023-01-20
>
> for you to fetch changes up to b6c80037ed3ba275eea2b33bc17e36af2b89813a:
>
>   include/hw/ppc include/hw/pci-host: Drop extra typedefs (2023-01-20 07:25:22 +0100)
>
> ----------------------------------------------------------------
> Header cleanup patches for 2023-01-20
>
> ----------------------------------------------------------------
> Markus Armbruster (12):
>       coroutine: Clean up superfluous inclusion of qemu/coroutine.h
>       coroutine: Move coroutine_fn to qemu/osdep.h, trim includes
>       coroutine: Clean up superfluous inclusion of qemu/lockable.h
>       coroutine: Split qemu/coroutine-core.h off qemu/coroutine.h
>       coroutine: Use Coroutine typedef name instead of structure tag
>       include/block: Untangle inclusion loops
>       hw/sparc64/niagara: Use blk_name() instead of open-coding it
>       include/hw/block: Include hw/block/block.h where needed
>       include/hw/ppc: Split pnv_chip.h off pnv.h
>       include/hw/ppc: Supply a few missing includes
>       include/hw/ppc: Don't include hw/pci-host/pnv_phb.h from pnv.h
>       include/hw/ppc include/hw/pci-host: Drop extra typedefs
>


Applied, thanks.

Please update the changelog at https://wiki.qemu.org/ChangeLog/8.0
for any user-visible changes.

-- PMM


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PULL 09/12] include/hw/ppc: Split pnv_chip.h off pnv.h
  2023-01-20  7:01 ` [PULL 09/12] include/hw/ppc: Split pnv_chip.h off pnv.h Markus Armbruster
@ 2023-01-23  9:44   ` Philippe Mathieu-Daudé
  2023-01-23 10:07     ` Markus Armbruster
  0 siblings, 1 reply; 17+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-01-23  9:44 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel
  Cc: peter.maydell, Cédric Le Goater, Daniel Henrique Barboza

Hi Markus,

On 20/1/23 08:01, Markus Armbruster wrote:
> PnvChipClass, PnvChip, Pnv8Chip, Pnv9Chip, and Pnv10Chip are defined
> in pnv.h.  Many users of the header don't actually need them.  One
> instance is this inclusion loop: hw/ppc/pnv_homer.h includes
> hw/ppc/pnv.h for typedef PnvChip, and vice versa for struct PnvHomer.
> 
> Similar structs live in their own headers: PnvHomerClass and PnvHomer
> in pnv_homer.h, PnvLpcClass and PnvLpcController in pci_lpc.h,
> PnvPsiClass, PnvPsi, Pnv8Psi, Pnv9Psi, Pnv10Psi in pnv_psi.h, ...
> 
> Move PnvChipClass, PnvChip, Pnv8Chip, Pnv9Chip, and Pnv10Chip to new
> pnv_chip.h, and adjust include directives.  This breaks the inclusion
> loop mentioned above.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> Reviewed-by: Cédric Le Goater <clg@kaod.org>
> Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
> Message-Id: <20221222104628.659681-2-armbru@redhat.com>
> ---
>   include/hw/ppc/pnv.h       | 143 +-----------------------------------
>   include/hw/ppc/pnv_chip.h  | 147 +++++++++++++++++++++++++++++++++++++
>   hw/intc/pnv_xive.c         |   1 +
>   hw/intc/pnv_xive2.c        |   1 +
>   hw/pci-host/pnv_phb3.c     |   1 +
>   hw/pci-host/pnv_phb4_pec.c |   1 +
>   hw/ppc/pnv.c               |   3 +
>   hw/ppc/pnv_core.c          |   1 +
>   hw/ppc/pnv_homer.c         |   1 +
>   hw/ppc/pnv_lpc.c           |   1 +
>   hw/ppc/pnv_xscom.c         |   1 +
>   11 files changed, 160 insertions(+), 141 deletions(-)
>   create mode 100644 include/hw/ppc/pnv_chip.h
> 
> diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
> index 9ef7e2d0dc..ca49e4281d 100644
> --- a/include/hw/ppc/pnv.h
> +++ b/include/hw/ppc/pnv.h
> @@ -20,158 +20,19 @@
>   #ifndef PPC_PNV_H
>   #define PPC_PNV_H
>   
> +#include "cpu.h"

Why is "cpu.h" required here? For pnv_chip_find_cpu()?

Isn't "target/ppc/cpu-qom.h" enough?

>   #include "hw/boards.h"
>   #include "hw/sysbus.h"
>   #include "hw/ipmi/ipmi.h"
> -#include "hw/ppc/pnv_lpc.h"
>   #include "hw/ppc/pnv_pnor.h"
> -#include "hw/ppc/pnv_psi.h"
> -#include "hw/ppc/pnv_occ.h"
> -#include "hw/ppc/pnv_sbe.h"
> -#include "hw/ppc/pnv_homer.h"
> -#include "hw/ppc/pnv_xive.h"
> -#include "hw/ppc/pnv_core.h"
> -#include "hw/pci-host/pnv_phb3.h"
> -#include "hw/pci-host/pnv_phb4.h"
>   #include "hw/pci-host/pnv_phb.h"
> -#include "qom/object.h"
>   
>   #define TYPE_PNV_CHIP "pnv-chip"
> -OBJECT_DECLARE_TYPE(PnvChip, PnvChipClass,
> -                    PNV_CHIP)
>   
> -struct PnvChip {
> -    /*< private >*/
> -    SysBusDevice parent_obj;
> -
> -    /*< public >*/
> -    uint32_t     chip_id;
> -    uint64_t     ram_start;
> -    uint64_t     ram_size;
> -
> -    uint32_t     nr_cores;
> -    uint32_t     nr_threads;
> -    uint64_t     cores_mask;
> -    PnvCore      **cores;
> -
> -    uint32_t     num_pecs;
> -
> -    MemoryRegion xscom_mmio;
> -    MemoryRegion xscom;
> -    AddressSpace xscom_as;
> -
> -    MemoryRegion *fw_mr;
> -    gchar        *dt_isa_nodename;
> -};
> -
> -#define TYPE_PNV8_CHIP "pnv8-chip"
> +typedef struct PnvChip PnvChip;
>   typedef struct Pnv8Chip Pnv8Chip;
> -DECLARE_INSTANCE_CHECKER(Pnv8Chip, PNV8_CHIP,
> -                         TYPE_PNV8_CHIP)
> -
> -struct Pnv8Chip {
> -    /*< private >*/
> -    PnvChip      parent_obj;
> -
> -    /*< public >*/
> -    MemoryRegion icp_mmio;
> -
> -    PnvLpcController lpc;
> -    Pnv8Psi      psi;
> -    PnvOCC       occ;
> -    PnvHomer     homer;
> -
> -#define PNV8_CHIP_PHB3_MAX 4
> -    /*
> -     * The array is used to allow quick access to the phbs by
> -     * pnv_ics_get_child() and pnv_ics_resend_child().
> -     */
> -    PnvPHB       *phbs[PNV8_CHIP_PHB3_MAX];
> -    uint32_t     num_phbs;
> -
> -    XICSFabric    *xics;
> -};
> -
> -#define TYPE_PNV9_CHIP "pnv9-chip"
>   typedef struct Pnv9Chip Pnv9Chip;
> -DECLARE_INSTANCE_CHECKER(Pnv9Chip, PNV9_CHIP,
> -                         TYPE_PNV9_CHIP)
> -
> -struct Pnv9Chip {
> -    /*< private >*/
> -    PnvChip      parent_obj;
> -
> -    /*< public >*/
> -    PnvXive      xive;
> -    Pnv9Psi      psi;
> -    PnvLpcController lpc;
> -    PnvOCC       occ;
> -    PnvSBE       sbe;
> -    PnvHomer     homer;
> -
> -    uint32_t     nr_quads;
> -    PnvQuad      *quads;
> -
> -#define PNV9_CHIP_MAX_PEC 3
> -    PnvPhb4PecState pecs[PNV9_CHIP_MAX_PEC];
> -};
> -
> -/*
> - * A SMT8 fused core is a pair of SMT4 cores.
> - */
> -#define PNV9_PIR2FUSEDCORE(pir) (((pir) >> 3) & 0xf)
> -#define PNV9_PIR2CHIP(pir)      (((pir) >> 8) & 0x7f)
> -
> -#define TYPE_PNV10_CHIP "pnv10-chip"
>   typedef struct Pnv10Chip Pnv10Chip;
> -DECLARE_INSTANCE_CHECKER(Pnv10Chip, PNV10_CHIP,
> -                         TYPE_PNV10_CHIP)
> -
> -struct Pnv10Chip {
> -    /*< private >*/
> -    PnvChip      parent_obj;
> -
> -    /*< public >*/
> -    PnvXive2     xive;
> -    Pnv9Psi      psi;
> -    PnvLpcController lpc;
> -    PnvOCC       occ;
> -    PnvSBE       sbe;
> -    PnvHomer     homer;
> -
> -    uint32_t     nr_quads;
> -    PnvQuad      *quads;
> -
> -#define PNV10_CHIP_MAX_PEC 2
> -    PnvPhb4PecState pecs[PNV10_CHIP_MAX_PEC];
> -};
> -
> -#define PNV10_PIR2FUSEDCORE(pir) (((pir) >> 3) & 0xf)
> -#define PNV10_PIR2CHIP(pir)      (((pir) >> 8) & 0x7f)
> -
> -struct PnvChipClass {
> -    /*< private >*/
> -    SysBusDeviceClass parent_class;
> -
> -    /*< public >*/
> -    uint64_t     chip_cfam_id;
> -    uint64_t     cores_mask;
> -    uint32_t     num_pecs;
> -    uint32_t     num_phbs;
> -
> -    DeviceRealize parent_realize;
> -
> -    uint32_t (*core_pir)(PnvChip *chip, uint32_t core_id);
> -    void (*intc_create)(PnvChip *chip, PowerPCCPU *cpu, Error **errp);
> -    void (*intc_reset)(PnvChip *chip, PowerPCCPU *cpu);
> -    void (*intc_destroy)(PnvChip *chip, PowerPCCPU *cpu);
> -    void (*intc_print_info)(PnvChip *chip, PowerPCCPU *cpu, Monitor *mon);
> -    ISABus *(*isa_create)(PnvChip *chip, Error **errp);
> -    void (*dt_populate)(PnvChip *chip, void *fdt);
> -    void (*pic_print_info)(PnvChip *chip, Monitor *mon);
> -    uint64_t (*xscom_core_base)(PnvChip *chip, uint32_t core_id);
> -    uint32_t (*xscom_pcba)(PnvChip *chip, uint64_t addr);
> -};
>   
>   #define PNV_CHIP_TYPE_SUFFIX "-" TYPE_PNV_CHIP
>   #define PNV_CHIP_TYPE_NAME(cpu_model) cpu_model PNV_CHIP_TYPE_SUFFIX
> diff --git a/include/hw/ppc/pnv_chip.h b/include/hw/ppc/pnv_chip.h
> new file mode 100644
> index 0000000000..53e1d921d7
> --- /dev/null
> +++ b/include/hw/ppc/pnv_chip.h
> @@ -0,0 +1,147 @@
> +#ifndef PPC_PNV_CHIP_H
> +#define PPC_PNV_CHIP_H
> +
> +#include "hw/pci-host/pnv_phb4.h"
> +#include "hw/ppc/pnv_core.h"
> +#include "hw/ppc/pnv_homer.h"
> +#include "hw/ppc/pnv_lpc.h"
> +#include "hw/ppc/pnv_occ.h"
> +#include "hw/ppc/pnv_psi.h"
> +#include "hw/ppc/pnv_sbe.h"
> +#include "hw/ppc/pnv_xive.h"
> +#include "hw/sysbus.h"
> +
> +OBJECT_DECLARE_TYPE(PnvChip, PnvChipClass,
> +                    PNV_CHIP)
> +
> +struct PnvChip {
> +    /*< private >*/
> +    SysBusDevice parent_obj;
> +
> +    /*< public >*/
> +    uint32_t     chip_id;
> +    uint64_t     ram_start;
> +    uint64_t     ram_size;
> +
> +    uint32_t     nr_cores;
> +    uint32_t     nr_threads;
> +    uint64_t     cores_mask;
> +    PnvCore      **cores;
> +
> +    uint32_t     num_pecs;
> +
> +    MemoryRegion xscom_mmio;
> +    MemoryRegion xscom;
> +    AddressSpace xscom_as;
> +
> +    MemoryRegion *fw_mr;
> +    gchar        *dt_isa_nodename;
> +};
> +
> +#define TYPE_PNV8_CHIP "pnv8-chip"
> +DECLARE_INSTANCE_CHECKER(Pnv8Chip, PNV8_CHIP,
> +                         TYPE_PNV8_CHIP)
> +
> +struct Pnv8Chip {
> +    /*< private >*/
> +    PnvChip      parent_obj;
> +
> +    /*< public >*/
> +    MemoryRegion icp_mmio;
> +
> +    PnvLpcController lpc;
> +    Pnv8Psi      psi;
> +    PnvOCC       occ;
> +    PnvHomer     homer;
> +
> +#define PNV8_CHIP_PHB3_MAX 4
> +    /*
> +     * The array is used to allow quick access to the phbs by
> +     * pnv_ics_get_child() and pnv_ics_resend_child().
> +     */
> +    PnvPHB       *phbs[PNV8_CHIP_PHB3_MAX];
> +    uint32_t     num_phbs;
> +
> +    XICSFabric    *xics;
> +};
> +
> +#define TYPE_PNV9_CHIP "pnv9-chip"
> +DECLARE_INSTANCE_CHECKER(Pnv9Chip, PNV9_CHIP,
> +                         TYPE_PNV9_CHIP)
> +
> +struct Pnv9Chip {
> +    /*< private >*/
> +    PnvChip      parent_obj;
> +
> +    /*< public >*/
> +    PnvXive      xive;
> +    Pnv9Psi      psi;
> +    PnvLpcController lpc;
> +    PnvOCC       occ;
> +    PnvSBE       sbe;
> +    PnvHomer     homer;
> +
> +    uint32_t     nr_quads;
> +    PnvQuad      *quads;
> +
> +#define PNV9_CHIP_MAX_PEC 3
> +    PnvPhb4PecState pecs[PNV9_CHIP_MAX_PEC];
> +};
> +
> +/*
> + * A SMT8 fused core is a pair of SMT4 cores.
> + */
> +#define PNV9_PIR2FUSEDCORE(pir) (((pir) >> 3) & 0xf)
> +#define PNV9_PIR2CHIP(pir)      (((pir) >> 8) & 0x7f)
> +
> +#define TYPE_PNV10_CHIP "pnv10-chip"
> +DECLARE_INSTANCE_CHECKER(Pnv10Chip, PNV10_CHIP,
> +                         TYPE_PNV10_CHIP)
> +
> +struct Pnv10Chip {
> +    /*< private >*/
> +    PnvChip      parent_obj;
> +
> +    /*< public >*/
> +    PnvXive2     xive;
> +    Pnv9Psi      psi;
> +    PnvLpcController lpc;
> +    PnvOCC       occ;
> +    PnvSBE       sbe;
> +    PnvHomer     homer;
> +
> +    uint32_t     nr_quads;
> +    PnvQuad      *quads;
> +
> +#define PNV10_CHIP_MAX_PEC 2
> +    PnvPhb4PecState pecs[PNV10_CHIP_MAX_PEC];
> +};
> +
> +#define PNV10_PIR2FUSEDCORE(pir) (((pir) >> 3) & 0xf)
> +#define PNV10_PIR2CHIP(pir)      (((pir) >> 8) & 0x7f)
> +
> +struct PnvChipClass {
> +    /*< private >*/
> +    SysBusDeviceClass parent_class;
> +
> +    /*< public >*/
> +    uint64_t     chip_cfam_id;
> +    uint64_t     cores_mask;
> +    uint32_t     num_pecs;
> +    uint32_t     num_phbs;
> +
> +    DeviceRealize parent_realize;
> +
> +    uint32_t (*core_pir)(PnvChip *chip, uint32_t core_id);
> +    void (*intc_create)(PnvChip *chip, PowerPCCPU *cpu, Error **errp);
> +    void (*intc_reset)(PnvChip *chip, PowerPCCPU *cpu);
> +    void (*intc_destroy)(PnvChip *chip, PowerPCCPU *cpu);
> +    void (*intc_print_info)(PnvChip *chip, PowerPCCPU *cpu, Monitor *mon);
> +    ISABus *(*isa_create)(PnvChip *chip, Error **errp);
> +    void (*dt_populate)(PnvChip *chip, void *fdt);
> +    void (*pic_print_info)(PnvChip *chip, Monitor *mon);
> +    uint64_t (*xscom_core_base)(PnvChip *chip, uint32_t core_id);
> +    uint32_t (*xscom_pcba)(PnvChip *chip, uint64_t addr);
> +};
> +
> +#endif


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PULL 09/12] include/hw/ppc: Split pnv_chip.h off pnv.h
  2023-01-23  9:44   ` Philippe Mathieu-Daudé
@ 2023-01-23 10:07     ` Markus Armbruster
  2023-01-23 12:10       ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 17+ messages in thread
From: Markus Armbruster @ 2023-01-23 10:07 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: qemu-devel, peter.maydell, Cédric Le Goater,
	Daniel Henrique Barboza

Philippe Mathieu-Daudé <philmd@linaro.org> writes:

> Hi Markus,
>
> On 20/1/23 08:01, Markus Armbruster wrote:
>> PnvChipClass, PnvChip, Pnv8Chip, Pnv9Chip, and Pnv10Chip are defined
>> in pnv.h.  Many users of the header don't actually need them.  One
>> instance is this inclusion loop: hw/ppc/pnv_homer.h includes
>> hw/ppc/pnv.h for typedef PnvChip, and vice versa for struct PnvHomer.
>> Similar structs live in their own headers: PnvHomerClass and PnvHomer
>> in pnv_homer.h, PnvLpcClass and PnvLpcController in pci_lpc.h,
>> PnvPsiClass, PnvPsi, Pnv8Psi, Pnv9Psi, Pnv10Psi in pnv_psi.h, ...
>> Move PnvChipClass, PnvChip, Pnv8Chip, Pnv9Chip, and Pnv10Chip to new
>> pnv_chip.h, and adjust include directives.  This breaks the inclusion
>> loop mentioned above.
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> Reviewed-by: Cédric Le Goater <clg@kaod.org>
>> Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
>> Message-Id: <20221222104628.659681-2-armbru@redhat.com>
>> ---
>>   include/hw/ppc/pnv.h       | 143 +-----------------------------------
>>   include/hw/ppc/pnv_chip.h  | 147 +++++++++++++++++++++++++++++++++++++
>>   hw/intc/pnv_xive.c         |   1 +
>>   hw/intc/pnv_xive2.c        |   1 +
>>   hw/pci-host/pnv_phb3.c     |   1 +
>>   hw/pci-host/pnv_phb4_pec.c |   1 +
>>   hw/ppc/pnv.c               |   3 +
>>   hw/ppc/pnv_core.c          |   1 +
>>   hw/ppc/pnv_homer.c         |   1 +
>>   hw/ppc/pnv_lpc.c           |   1 +
>>   hw/ppc/pnv_xscom.c         |   1 +
>>   11 files changed, 160 insertions(+), 141 deletions(-)
>>   create mode 100644 include/hw/ppc/pnv_chip.h
>> diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
>> index 9ef7e2d0dc..ca49e4281d 100644
>> --- a/include/hw/ppc/pnv.h
>> +++ b/include/hw/ppc/pnv.h
>> @@ -20,158 +20,19 @@
>>   #ifndef PPC_PNV_H
>>   #define PPC_PNV_H
>>   +#include "cpu.h"
>
> Why is "cpu.h" required here? For pnv_chip_find_cpu()?

Yes:

    ../include/hw/ppc/pnv.h:58:1: error: unknown type name ‘PowerPCCPU’
       58 | PowerPCCPU *pnv_chip_find_cpu(PnvChip *chip, uint32_t pir);
          | ^~~~~~~~~~

> Isn't "target/ppc/cpu-qom.h" enough?

Seems to suffice.  Would you like to post a followup?



^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PULL 09/12] include/hw/ppc: Split pnv_chip.h off pnv.h
  2023-01-23 10:07     ` Markus Armbruster
@ 2023-01-23 12:10       ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 17+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-01-23 12:10 UTC (permalink / raw)
  To: Markus Armbruster
  Cc: qemu-devel, peter.maydell, Cédric Le Goater,
	Daniel Henrique Barboza

On 23/1/23 11:07, Markus Armbruster wrote:
> Philippe Mathieu-Daudé <philmd@linaro.org> writes:
> 
>> Hi Markus,
>>
>> On 20/1/23 08:01, Markus Armbruster wrote:
>>> PnvChipClass, PnvChip, Pnv8Chip, Pnv9Chip, and Pnv10Chip are defined
>>> in pnv.h.  Many users of the header don't actually need them.  One
>>> instance is this inclusion loop: hw/ppc/pnv_homer.h includes
>>> hw/ppc/pnv.h for typedef PnvChip, and vice versa for struct PnvHomer.
>>> Similar structs live in their own headers: PnvHomerClass and PnvHomer
>>> in pnv_homer.h, PnvLpcClass and PnvLpcController in pci_lpc.h,
>>> PnvPsiClass, PnvPsi, Pnv8Psi, Pnv9Psi, Pnv10Psi in pnv_psi.h, ...
>>> Move PnvChipClass, PnvChip, Pnv8Chip, Pnv9Chip, and Pnv10Chip to new
>>> pnv_chip.h, and adjust include directives.  This breaks the inclusion
>>> loop mentioned above.
>>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>>> Reviewed-by: Cédric Le Goater <clg@kaod.org>
>>> Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
>>> Message-Id: <20221222104628.659681-2-armbru@redhat.com>
>>> ---
>>>    include/hw/ppc/pnv.h       | 143 +-----------------------------------
>>>    include/hw/ppc/pnv_chip.h  | 147 +++++++++++++++++++++++++++++++++++++
>>>    hw/intc/pnv_xive.c         |   1 +
>>>    hw/intc/pnv_xive2.c        |   1 +
>>>    hw/pci-host/pnv_phb3.c     |   1 +
>>>    hw/pci-host/pnv_phb4_pec.c |   1 +
>>>    hw/ppc/pnv.c               |   3 +
>>>    hw/ppc/pnv_core.c          |   1 +
>>>    hw/ppc/pnv_homer.c         |   1 +
>>>    hw/ppc/pnv_lpc.c           |   1 +
>>>    hw/ppc/pnv_xscom.c         |   1 +
>>>    11 files changed, 160 insertions(+), 141 deletions(-)
>>>    create mode 100644 include/hw/ppc/pnv_chip.h
>>> diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
>>> index 9ef7e2d0dc..ca49e4281d 100644
>>> --- a/include/hw/ppc/pnv.h
>>> +++ b/include/hw/ppc/pnv.h
>>> @@ -20,158 +20,19 @@
>>>    #ifndef PPC_PNV_H
>>>    #define PPC_PNV_H
>>>    +#include "cpu.h"
>>
>> Why is "cpu.h" required here? For pnv_chip_find_cpu()?
> 
> Yes:
> 
>      ../include/hw/ppc/pnv.h:58:1: error: unknown type name ‘PowerPCCPU’
>         58 | PowerPCCPU *pnv_chip_find_cpu(PnvChip *chip, uint32_t pir);
>            | ^~~~~~~~~~
> 
>> Isn't "target/ppc/cpu-qom.h" enough?
> 
> Seems to suffice.  Would you like to post a followup?

Good.

First I need to finish the ARM part and deal with this comment:
https://lore.kernel.org/qemu-devel/325310d0-aad6-fc39-748a-80762d644dd8@linaro.org/
Then this change will be included in the PPC equivalent series.

Thanks,

Phil.


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2023-01-23 12:10 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-20  7:01 [PULL 00/12] Header cleanup patches for 2023-01-20 Markus Armbruster
2023-01-20  7:01 ` [PULL 01/12] coroutine: Clean up superfluous inclusion of qemu/coroutine.h Markus Armbruster
2023-01-20  7:01 ` [PULL 02/12] coroutine: Move coroutine_fn to qemu/osdep.h, trim includes Markus Armbruster
2023-01-20  7:01 ` [PULL 03/12] coroutine: Clean up superfluous inclusion of qemu/lockable.h Markus Armbruster
2023-01-20  7:01 ` [PULL 04/12] coroutine: Split qemu/coroutine-core.h off qemu/coroutine.h Markus Armbruster
2023-01-20  7:01 ` [PULL 05/12] coroutine: Use Coroutine typedef name instead of structure tag Markus Armbruster
2023-01-20  7:01 ` [PULL 06/12] include/block: Untangle inclusion loops Markus Armbruster
2023-01-20  7:01 ` [PULL 07/12] hw/sparc64/niagara: Use blk_name() instead of open-coding it Markus Armbruster
2023-01-20  7:01 ` [PULL 08/12] include/hw/block: Include hw/block/block.h where needed Markus Armbruster
2023-01-20  7:01 ` [PULL 09/12] include/hw/ppc: Split pnv_chip.h off pnv.h Markus Armbruster
2023-01-23  9:44   ` Philippe Mathieu-Daudé
2023-01-23 10:07     ` Markus Armbruster
2023-01-23 12:10       ` Philippe Mathieu-Daudé
2023-01-20  7:01 ` [PULL 10/12] include/hw/ppc: Supply a few missing includes Markus Armbruster
2023-01-20  7:01 ` [PULL 11/12] include/hw/ppc: Don't include hw/pci-host/pnv_phb.h from pnv.h Markus Armbruster
2023-01-20  7:01 ` [PULL 12/12] include/hw/ppc include/hw/pci-host: Drop extra typedefs Markus Armbruster
2023-01-20 16:17 ` [PULL 00/12] Header cleanup patches for 2023-01-20 Peter Maydell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.