On Tue, Feb 20, 2024 at 04:06:20PM +0000, Peter Maydell wrote: > Date: Tue, 20 Feb 2024 16:06:20 +0000 > From: Peter Maydell <peter.mayd...@linaro.org> > Subject: [PATCH 08/10] hw/core/reset: Implement qemu_register_reset via > qemu_register_resettable > X-Mailer: git-send-email 2.34.1 > > 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.mayd...@linaro.org> > --- > The way that a legacy reset function needs to check the ShutdownCause > and this doesn't line up with the ResetType is a bit awkward; this > is an area we should come back and clean up, but I didn't want to > tackle that in this patchset. > --- > include/sysemu/reset.h | 7 ++- > hw/core/reset.c | 137 +++++++++++++++++++++++++++++++---------- > 2 files changed, 110 insertions(+), 34 deletions(-) >
Reviewed-by: Zhao Liu <zhao1....@intel.com>