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>
This commit is contained in:
Jan Kiszka 2009-07-02 00:19:02 +02:00 committed by Anthony Liguori
parent 55ddfe8ef5
commit dda9b29f61
2 changed files with 16 additions and 2 deletions

View file

@ -261,6 +261,7 @@ void unregister_savevm(const char *idstr, void *opaque);
typedef void QEMUResetHandler(void *opaque);
void qemu_register_reset(QEMUResetHandler *func, void *opaque);
void qemu_unregister_reset(QEMUResetHandler *func, void *opaque);
/* handler to set the boot_device order for a specific type of QEMUMachine */
/* return 0 if success */

17
vl.c
View file

@ -3509,12 +3509,25 @@ void qemu_register_reset(QEMUResetHandler *func, void *opaque)
TAILQ_INSERT_TAIL(&reset_handlers, re, entry);
}
void qemu_system_reset(void)
void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
{
QEMUResetEntry *re;
/* reset all devices */
TAILQ_FOREACH(re, &reset_handlers, entry) {
if (re->func == func && re->opaque == opaque) {
TAILQ_REMOVE(&reset_handlers, re, entry);
qemu_free(re);
return;
}
}
}
void qemu_system_reset(void)
{
QEMUResetEntry *re, *nre;
/* reset all devices */
TAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) {
re->func(re->opaque);
}
}