Commit 9e8dd451 authored by Jan Kiszka's avatar Jan Kiszka Committed by Anthony Liguori

notifier: Pass data argument to callback

This allows to pass additional information to the notifier callback
which is useful if sender and receiver do not share any other distinct
data structure.

Will be used first for the clock reset notifier.
Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
parent e0e8384d
......@@ -313,7 +313,7 @@ static void piix4_powerdown(void *opaque, int irq, int power_failing)
acpi_pm1_evt_power_down(pm1a, tmr);
}
static void piix4_pm_machine_ready(struct Notifier* n)
static void piix4_pm_machine_ready(Notifier *n, void *opaque)
{
PIIX4PMState *s = container_of(n, PIIX4PMState, machine_ready);
uint8_t *pci_conf;
......
......@@ -316,7 +316,7 @@ int fw_cfg_add_file(FWCfgState *s, const char *filename, uint8_t *data,
return 1;
}
static void fw_cfg_machine_ready(struct Notifier* n)
static void fw_cfg_machine_ready(struct Notifier *n, void *data)
{
uint32_t len;
FWCfgState *s = container_of(n, FWCfgState, machine_ready);
......
......@@ -59,7 +59,7 @@ static void check_mode_change(void)
if (is_absolute != current_is_absolute ||
has_absolute != current_has_absolute) {
notifier_list_notify(&mouse_mode_notifiers);
notifier_list_notify(&mouse_mode_notifiers, NULL);
}
current_is_absolute = is_absolute;
......
......@@ -124,7 +124,7 @@ int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data)
}
current_migration = s;
notifier_list_notify(&migration_state_notifiers);
notifier_list_notify(&migration_state_notifiers, NULL);
return 0;
}
......@@ -276,7 +276,7 @@ void migrate_fd_error(FdMigrationState *s)
{
DPRINTF("setting error state\n");
s->state = MIG_STATE_ERROR;
notifier_list_notify(&migration_state_notifiers);
notifier_list_notify(&migration_state_notifiers, NULL);
migrate_fd_cleanup(s);
}
......@@ -334,7 +334,7 @@ ssize_t migrate_fd_put_buffer(void *opaque, const void *data, size_t size)
monitor_resume(s->mon);
}
s->state = MIG_STATE_ERROR;
notifier_list_notify(&migration_state_notifiers);
notifier_list_notify(&migration_state_notifiers, NULL);
}
return ret;
......@@ -395,7 +395,7 @@ void migrate_fd_put_ready(void *opaque)
state = MIG_STATE_ERROR;
}
s->state = state;
notifier_list_notify(&migration_state_notifiers);
notifier_list_notify(&migration_state_notifiers, NULL);
}
}
......@@ -415,7 +415,7 @@ void migrate_fd_cancel(MigrationState *mig_state)
DPRINTF("cancelling migration\n");
s->state = MIG_STATE_CANCELLED;
notifier_list_notify(&migration_state_notifiers);
notifier_list_notify(&migration_state_notifiers, NULL);
qemu_savevm_state_cancel(s->mon, s->file);
migrate_fd_cleanup(s);
......@@ -429,7 +429,7 @@ void migrate_fd_release(MigrationState *mig_state)
if (s->state == MIG_STATE_ACTIVE) {
s->state = MIG_STATE_CANCELLED;
notifier_list_notify(&migration_state_notifiers);
notifier_list_notify(&migration_state_notifiers, NULL);
migrate_fd_cleanup(s);
}
qemu_free(s);
......
......@@ -29,11 +29,11 @@ void notifier_list_remove(NotifierList *list, Notifier *notifier)
QTAILQ_REMOVE(&list->notifiers, notifier, node);
}
void notifier_list_notify(NotifierList *list)
void notifier_list_notify(NotifierList *list, void *data)
{
Notifier *notifier, *next;
QTAILQ_FOREACH_SAFE(notifier, &list->notifiers, node, next) {
notifier->notify(notifier);
notifier->notify(notifier, data);
}
}
......@@ -20,7 +20,7 @@ typedef struct Notifier Notifier;
struct Notifier
{
void (*notify)(Notifier *notifier);
void (*notify)(Notifier *notifier, void *data);
QTAILQ_ENTRY(Notifier) node;
};
......@@ -38,6 +38,6 @@ void notifier_list_add(NotifierList *list, Notifier *notifier);
void notifier_list_remove(NotifierList *list, Notifier *notifier);
void notifier_list_notify(NotifierList *list);
void notifier_list_notify(NotifierList *list, void *data);
#endif
......@@ -481,7 +481,7 @@ static void sdl_grab_end(void)
sdl_update_caption();
}
static void sdl_mouse_mode_change(Notifier *notify)
static void sdl_mouse_mode_change(Notifier *notify, void *data)
{
if (kbd_mouse_is_absolute()) {
if (!absolute_enabled) {
......
......@@ -416,7 +416,7 @@ void do_info_spice(Monitor *mon, QObject **ret_data)
*ret_data = QOBJECT(server);
}
static void migration_state_notifier(Notifier *notifier)
static void migration_state_notifier(Notifier *notifier, void *data)
{
int state = get_migration_state();
......
......@@ -178,7 +178,7 @@ static const SpiceTabletInterface tablet_interface = {
.buttons = tablet_buttons,
};
static void mouse_mode_notifier(Notifier *notifier)
static void mouse_mode_notifier(Notifier *notifier, void *data)
{
QemuSpicePointer *pointer = container_of(notifier, QemuSpicePointer, mouse_mode);
bool is_absolute = kbd_mouse_is_absolute();
......@@ -213,5 +213,5 @@ void qemu_spice_input_init(void)
pointer->absolute = false;
pointer->mouse_mode.notify = mouse_mode_notifier;
qemu_add_mouse_mode_change_notifier(&pointer->mouse_mode);
mouse_mode_notifier(&pointer->mouse_mode);
mouse_mode_notifier(&pointer->mouse_mode, NULL);
}
......@@ -1346,7 +1346,7 @@ static void client_cut_text(VncState *vs, size_t len, uint8_t *text)
{
}
static void check_pointer_type_change(Notifier *notifier)
static void check_pointer_type_change(Notifier *notifier, void *data)
{
VncState *vs = container_of(notifier, VncState, mouse_mode_notifier);
int absolute = kbd_mouse_is_absolute();
......@@ -1769,7 +1769,7 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings)
}
}
vnc_desktop_resize(vs);
check_pointer_type_change(&vs->mouse_mode_notifier);
check_pointer_type_change(&vs->mouse_mode_notifier, NULL);
}
static void set_pixel_conversion(VncState *vs)
......
......@@ -1260,7 +1260,7 @@ static int usb_host_close(USBHostDevice *dev)
return 0;
}
static void usb_host_exit_notifier(struct Notifier* n)
static void usb_host_exit_notifier(struct Notifier *n, void *data)
{
USBHostDevice *s = container_of(n, USBHostDevice, exit);
......
......@@ -2009,7 +2009,7 @@ void qemu_remove_exit_notifier(Notifier *notify)
static void qemu_run_exit_notifiers(void)
{
notifier_list_notify(&exit_notifiers);
notifier_list_notify(&exit_notifiers, NULL);
}
void qemu_add_machine_init_done_notifier(Notifier *notify)
......@@ -2019,7 +2019,7 @@ void qemu_add_machine_init_done_notifier(Notifier *notify)
static void qemu_run_machine_init_done_notifiers(void)
{
notifier_list_notify(&machine_init_done_notifiers);
notifier_list_notify(&machine_init_done_notifiers, NULL);
}
static const QEMUOption *lookup_opt(int argc, char **argv,
......
......@@ -839,7 +839,7 @@ static void xen_vm_change_state_handler(void *opaque, int running, int reason)
}
}
static void xen_exit_notifier(Notifier *n)
static void xen_exit_notifier(Notifier *n, void *data)
{
XenIOState *state = container_of(n, XenIOState, exit);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment