mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
reset: allow registering handlers that aren't called by snapshot loading
Snapshot loading only expects to call deterministic handlers, not non-deterministic ones. So introduce a way of registering handlers that won't be called when reseting for snapshots. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Message-id: 20221025004327.568476-2-Jason@zx2c4.com [PMM: updated json doc comment with Markus' text; fixed checkpatch style nit] Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
c8d6c286ab
commit
7966d70f6f
15 changed files with 54 additions and 27 deletions
|
@ -33,6 +33,7 @@ typedef struct QEMUResetEntry {
|
|||
QTAILQ_ENTRY(QEMUResetEntry) entry;
|
||||
QEMUResetHandler *func;
|
||||
void *opaque;
|
||||
bool skip_on_snapshot_load;
|
||||
} QEMUResetEntry;
|
||||
|
||||
static QTAILQ_HEAD(, QEMUResetEntry) reset_handlers =
|
||||
|
@ -47,6 +48,16 @@ void qemu_register_reset(QEMUResetHandler *func, void *opaque)
|
|||
QTAILQ_INSERT_TAIL(&reset_handlers, re, entry);
|
||||
}
|
||||
|
||||
void qemu_register_reset_nosnapshotload(QEMUResetHandler *func, void *opaque)
|
||||
{
|
||||
QEMUResetEntry *re = g_new0(QEMUResetEntry, 1);
|
||||
|
||||
re->func = func;
|
||||
re->opaque = opaque;
|
||||
re->skip_on_snapshot_load = true;
|
||||
QTAILQ_INSERT_TAIL(&reset_handlers, re, entry);
|
||||
}
|
||||
|
||||
void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
|
||||
{
|
||||
QEMUResetEntry *re;
|
||||
|
@ -60,12 +71,16 @@ void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
|
|||
}
|
||||
}
|
||||
|
||||
void qemu_devices_reset(void)
|
||||
void qemu_devices_reset(ShutdownCause reason)
|
||||
{
|
||||
QEMUResetEntry *re, *nre;
|
||||
|
||||
/* reset all devices */
|
||||
QTAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) {
|
||||
if (reason == SHUTDOWN_CAUSE_SNAPSHOT_LOAD &&
|
||||
re->skip_on_snapshot_load) {
|
||||
continue;
|
||||
}
|
||||
re->func(re->opaque);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue