Commit 55ddfe8ef53f0eb01be4c9450a7f2241e745cb11
Committed by
Anthony Liguori
1 parent
76e30d0f
Rework reset handler management
Convert the reset handler maintenance code to TAILQ services. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
1 changed file
with
6 additions
and
10 deletions
vl.c
... | ... | @@ -3442,12 +3442,13 @@ void vm_start(void) |
3442 | 3442 | /* reset/shutdown handler */ |
3443 | 3443 | |
3444 | 3444 | typedef struct QEMUResetEntry { |
3445 | + TAILQ_ENTRY(QEMUResetEntry) entry; | |
3445 | 3446 | QEMUResetHandler *func; |
3446 | 3447 | void *opaque; |
3447 | - struct QEMUResetEntry *next; | |
3448 | 3448 | } QEMUResetEntry; |
3449 | 3449 | |
3450 | -static QEMUResetEntry *first_reset_entry; | |
3450 | +static TAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers = | |
3451 | + TAILQ_HEAD_INITIALIZER(reset_handlers); | |
3451 | 3452 | static int reset_requested; |
3452 | 3453 | static int shutdown_requested; |
3453 | 3454 | static int powerdown_requested; |
... | ... | @@ -3501,16 +3502,11 @@ static void do_vm_stop(int reason) |
3501 | 3502 | |
3502 | 3503 | void qemu_register_reset(QEMUResetHandler *func, void *opaque) |
3503 | 3504 | { |
3504 | - QEMUResetEntry **pre, *re; | |
3505 | + QEMUResetEntry *re = qemu_mallocz(sizeof(QEMUResetEntry)); | |
3505 | 3506 | |
3506 | - pre = &first_reset_entry; | |
3507 | - while (*pre != NULL) | |
3508 | - pre = &(*pre)->next; | |
3509 | - re = qemu_mallocz(sizeof(QEMUResetEntry)); | |
3510 | 3507 | re->func = func; |
3511 | 3508 | re->opaque = opaque; |
3512 | - re->next = NULL; | |
3513 | - *pre = re; | |
3509 | + TAILQ_INSERT_TAIL(&reset_handlers, re, entry); | |
3514 | 3510 | } |
3515 | 3511 | |
3516 | 3512 | void qemu_system_reset(void) |
... | ... | @@ -3518,7 +3514,7 @@ void qemu_system_reset(void) |
3518 | 3514 | QEMUResetEntry *re; |
3519 | 3515 | |
3520 | 3516 | /* reset all devices */ |
3521 | - for(re = first_reset_entry; re != NULL; re = re->next) { | |
3517 | + TAILQ_FOREACH(re, &reset_handlers, entry) { | |
3522 | 3518 | re->func(re->opaque); |
3523 | 3519 | } |
3524 | 3520 | } | ... | ... |