Commit dda9b29f61b198681346191a52be417bc195b0df
Committed by
Anthony Liguori
1 parent
55ddfe8e
Add qemu_unregister_reset
Will be used by '-boot once=...', and should also help in other use cases. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
2 changed files
with
16 additions
and
2 deletions
hw/hw.h
@@ -261,6 +261,7 @@ void unregister_savevm(const char *idstr, void *opaque); | @@ -261,6 +261,7 @@ void unregister_savevm(const char *idstr, void *opaque); | ||
261 | typedef void QEMUResetHandler(void *opaque); | 261 | typedef void QEMUResetHandler(void *opaque); |
262 | 262 | ||
263 | void qemu_register_reset(QEMUResetHandler *func, void *opaque); | 263 | void qemu_register_reset(QEMUResetHandler *func, void *opaque); |
264 | +void qemu_unregister_reset(QEMUResetHandler *func, void *opaque); | ||
264 | 265 | ||
265 | /* handler to set the boot_device order for a specific type of QEMUMachine */ | 266 | /* handler to set the boot_device order for a specific type of QEMUMachine */ |
266 | /* return 0 if success */ | 267 | /* return 0 if success */ |
vl.c
@@ -3509,12 +3509,25 @@ void qemu_register_reset(QEMUResetHandler *func, void *opaque) | @@ -3509,12 +3509,25 @@ void qemu_register_reset(QEMUResetHandler *func, void *opaque) | ||
3509 | TAILQ_INSERT_TAIL(&reset_handlers, re, entry); | 3509 | TAILQ_INSERT_TAIL(&reset_handlers, re, entry); |
3510 | } | 3510 | } |
3511 | 3511 | ||
3512 | -void qemu_system_reset(void) | 3512 | +void qemu_unregister_reset(QEMUResetHandler *func, void *opaque) |
3513 | { | 3513 | { |
3514 | QEMUResetEntry *re; | 3514 | QEMUResetEntry *re; |
3515 | 3515 | ||
3516 | - /* reset all devices */ | ||
3517 | TAILQ_FOREACH(re, &reset_handlers, entry) { | 3516 | TAILQ_FOREACH(re, &reset_handlers, entry) { |
3517 | + if (re->func == func && re->opaque == opaque) { | ||
3518 | + TAILQ_REMOVE(&reset_handlers, re, entry); | ||
3519 | + qemu_free(re); | ||
3520 | + return; | ||
3521 | + } | ||
3522 | + } | ||
3523 | +} | ||
3524 | + | ||
3525 | +void qemu_system_reset(void) | ||
3526 | +{ | ||
3527 | + QEMUResetEntry *re, *nre; | ||
3528 | + | ||
3529 | + /* reset all devices */ | ||
3530 | + TAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) { | ||
3518 | re->func(re->opaque); | 3531 | re->func(re->opaque); |
3519 | } | 3532 | } |
3520 | } | 3533 | } |