aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2024-02-20 16:06:20 +0000
committerPeter Maydell <peter.maydell@linaro.org>2024-02-27 13:01:42 +0000
commit71b3ea373bc3b8e3e656d1e8c390896e21c31c0b (patch)
treec5104cf42b27bdcbc023d87d3891e196196c04e8 /include
parent86fae16ed298518ea851d6accc48643e6bdf8ed1 (diff)
downloadqemu-71b3ea373bc3b8e3e656d1e8c390896e21c31c0b.zip
qemu-71b3ea373bc3b8e3e656d1e8c390896e21c31c0b.tar.gz
qemu-71b3ea373bc3b8e3e656d1e8c390896e21c31c0b.tar.bz2
hw/core/reset: Implement qemu_register_reset via qemu_register_resettable
Reimplement qemu_register_reset() via qemu_register_resettable(). We define a new LegacyReset object which implements Resettable and defines its reset hold phase method to call a QEMUResetHandler function. When qemu_register_reset() is called, we create a new LegacyReset object and add it to the simulation_reset ResettableContainer. When qemu_unregister_reset() is called, we find the LegacyReset object in the container and remove it. This implementation of qemu_unregister_reset() means we'll end up scanning the ResetContainer's list of child objects twice, once to find the LegacyReset object, and once in g_ptr_array_remove(). In theory we could avoid this by having the ResettableContainer interface include a resettable_container_remove_with_equal_func() that took a callback method so that we could use g_ptr_array_find_with_equal_func() and g_ptr_array_remove_index(). But we don't expect qemu_unregister_reset() to be called frequently or in hot paths, and we expect the simulation_reset container to usually not have many children. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Message-id: 20240220160622.114437-9-peter.maydell@linaro.org Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Diffstat (limited to 'include')
-rw-r--r--include/sysemu/reset.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/include/sysemu/reset.h b/include/sysemu/reset.h
index ef2c595..ae43604 100644
--- a/include/sysemu/reset.h
+++ b/include/sysemu/reset.h
@@ -67,8 +67,11 @@ void qemu_unregister_resettable(Object *obj);
* @opaque: opaque data to pass to @func
*
* Register @func on the list of functions which are called when the
- * entire system is reset. The functions are called in the order in
- * which they are registered.
+ * entire system is reset. Functions registered with this API and
+ * Resettable objects registered with qemu_register_resettable() are
+ * handled together, in the order in which they were registered.
+ * Functions registered with this API are called in the 'hold' phase
+ * of the 3-phase reset.
*
* In general this function should not be used in new code where possible;
* for instance, device model reset is better accomplished using the