Commit dda9b29f61b198681346191a52be417bc195b0df

Authored by Jan Kiszka
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
... ... @@ -261,6 +261,7 @@ void unregister_savevm(const char *idstr, void *opaque);
261 261 typedef void QEMUResetHandler(void *opaque);
262 262  
263 263 void qemu_register_reset(QEMUResetHandler *func, void *opaque);
  264 +void qemu_unregister_reset(QEMUResetHandler *func, void *opaque);
264 265  
265 266 /* handler to set the boot_device order for a specific type of QEMUMachine */
266 267 /* return 0 if success */
... ...
... ... @@ -3509,12 +3509,25 @@ void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3509 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 3514 QEMUResetEntry *re;
3515 3515  
3516   - /* reset all devices */
3517 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 3531 re->func(re->opaque);
3519 3532 }
3520 3533 }
... ...