mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
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>
This commit is contained in:
parent
86fae16ed2
commit
71b3ea373b
2 changed files with 110 additions and 34 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue