hw/core: Add ResetContainer which holds objects implementing Resettable
commit4c046ce37af0c4dcca2b440809ebd07f9953dcfb
authorPeter Maydell <peter.maydell@linaro.org>
Tue, 20 Feb 2024 16:06:18 +0000 (20 16:06 +0000)
committerPeter Maydell <peter.maydell@linaro.org>
Tue, 27 Feb 2024 13:01:42 +0000 (27 13:01 +0000)
tree8e3ac5f5eb0402148bdcea09d61b70ea2735781e
parent9f1c70a254341fd7ee23c96e806436ecb83684d8
hw/core: Add ResetContainer which holds objects implementing Resettable

Implement a ResetContainer.  This is a subclass of Object, and it
implements the Resettable interface.  The container holds a list of
arbitrary other objects which implement Resettable, and when the
container is reset, all the objects it contains are also reset.

This will allow us to have a 3-phase-reset equivalent of the old
qemu_register_reset() API: we will have a single "simulation reset"
top level ResetContainer, and objects in it are the equivalent of the
old QEMUResetHandler functions.

The qemu_register_reset() API manages its list of callbacks using a
QTAILQ, but here we use a GPtrArray for our list of Resettable
children: we expect the "remove" operation (which will need to do an
iteration through the list) to be fairly uncommon, and we get simpler
code with fewer memory allocations.

Since there is currently no listed owner in MAINTAINERS for the
existing reset-related source files, create a new section for
them, and add these new files there also.

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-7-peter.maydell@linaro.org
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
MAINTAINERS
hw/core/meson.build
hw/core/resetcontainer.c [new file with mode: 0644]
include/hw/core/resetcontainer.h [new file with mode: 0644]