summary refs log tree commit diff stats
path: root/include/hw/qdev-core.h
diff options
context:
space:
mode:
authorPhilippe Mathieu-Daudé <philmd@linaro.org>2025-01-02 14:50:19 +0100
committerPhilippe Mathieu-Daudé <philmd@linaro.org>2025-01-09 18:16:24 +0100
commit558ee1ede6cc95d3dde806f0ac323911c5dbb4b4 (patch)
treef476b8d90a1382579c0ebb159d5719b55a4c0d44 /include/hw/qdev-core.h
parentad1ea5ffa10d4cf365c142caf627f2c43b3592c2 (diff)
downloadfocaccia-qemu-558ee1ede6cc95d3dde806f0ac323911c5dbb4b4.tar.gz
focaccia-qemu-558ee1ede6cc95d3dde806f0ac323911c5dbb4b4.zip
qdev: Implement qdev_create_fake_machine() for user emulation
When a QDev instance is realized, qdev_get_machine() ends up called.
In the next commit, qdev_get_machine() will require a "machine"
container to be always present. To satisfy this QOM containers design,
Implement qdev_create_fake_machine() which creates a fake "machine"
container for user emulation.

On system emulation, qemu_create_machine() is called from qemu_init().
For user emulation, since the TCG accelerator always calls
tcg_init_machine(), we use it to hook our fake machine creation.

Suggested-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Acked-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250102211800.79235-2-philmd@linaro.org>
Diffstat (limited to 'include/hw/qdev-core.h')
-rw-r--r--include/hw/qdev-core.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index c4d3dc3906..50cbbf8121 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -1024,6 +1024,16 @@ void qdev_assert_realized_properly(void);
 Object *qdev_get_machine(void);
 
 /**
+ * qdev_create_fake_machine(): Create a fake machine container.
+ *
+ * .. note::
+ *    This function is a kludge for user emulation (USER_ONLY)
+ *    because when thread (TYPE_CPU) are realized, qdev_realize()
+ *    access a machine container.
+ */
+void qdev_create_fake_machine(void);
+
+/**
  * qdev_get_human_name() - Return a human-readable name for a device
  * @dev: The device. Must be a valid and non-NULL pointer.
  *