[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [qemu-xen-traditional master] Add support for generic notifier lists
commit 211ed7d2da5abe7bb17cedc2debbe248c1d1f5d6 Author: Anthony Liguori <aliguori@xxxxxxxxxx> AuthorDate: Fri Mar 13 12:35:26 2020 +0000 Commit: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> CommitDate: Fri Apr 24 15:42:07 2020 +0100 Add support for generic notifier lists Notifiers are data-less callbacks and a notifier list is a list of registered notifiers that all are interested in a particular event. We'll use this in a few patches to implement mouse change notification. Signed-off-by: Anthony Liguori <aliguori@xxxxxxxxxx> [cherry-picked from d1e70c5e6d1472856c52969301247fe8c3c8389d conflicts: used the sys-qeue interface and added required LIST_REMOVE_SAFE function to that] Signed-off-by: Maximilian Heyne <mheyne@xxxxxxxxx> Reviewed-by: Paul Durrant <paul@xxxxxxx> Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- Makefile | 1 + notify.c | 39 +++++++++++++++++++++++++++++++++++++++ notify.h | 43 +++++++++++++++++++++++++++++++++++++++++++ sys-queue.h | 5 +++++ 4 files changed, 88 insertions(+) diff --git a/Makefile b/Makefile index 0fbec990..d921bcdf 100644 --- a/Makefile +++ b/Makefile @@ -93,6 +93,7 @@ OBJS+=sd.o ssi-sd.o OBJS+=bt.o bt-host.o bt-vhci.o bt-l2cap.o bt-sdp.o bt-hci.o bt-hid.o usb-bt.o OBJS+=buffered_file.o migration.o migration-tcp.o net.o qemu-sockets.o OBJS+=qemu-char.o aio.o net-checksum.o savevm.o cache-utils.o +OBJS+=notify.o ifdef CONFIG_BRLAPI OBJS+= baum.o diff --git a/notify.c b/notify.c new file mode 100644 index 00000000..59e1e7c7 --- /dev/null +++ b/notify.c @@ -0,0 +1,39 @@ +/* + * Notifier lists + * + * Copyright IBM, Corp. 2010 + * + * Authors: + * Anthony Liguori <aliguori@xxxxxxxxxx> + * + * This work is licensed under the terms of the GNU GPL, version 2. See + * the COPYING file in the top-level directory. + * + */ + +#include "qemu-common.h" +#include "notify.h" + +void notifier_list_init(NotifierList *list) +{ + LIST_INIT(&list->notifiers); +} + +void notifier_list_add(NotifierList *list, Notifier *notifier) +{ + LIST_INSERT_HEAD(&list->notifiers, notifier, node); +} + +void notifier_list_remove(Notifier *notifier) +{ + LIST_REMOVE(notifier, node); +} + +void notifier_list_notify(NotifierList *list) +{ + Notifier *notifier, *next; + + LIST_FOREACH_SAFE(notifier, &list->notifiers, node, next) { + notifier->notify(notifier); + } +} diff --git a/notify.h b/notify.h new file mode 100644 index 00000000..093c63f1 --- /dev/null +++ b/notify.h @@ -0,0 +1,43 @@ +/* + * Notifier lists + * + * Copyright IBM, Corp. 2010 + * + * Authors: + * Anthony Liguori <aliguori@xxxxxxxxxx> + * + * This work is licensed under the terms of the GNU GPL, version 2. See + * the COPYING file in the top-level directory. + * + */ + +#ifndef QEMU_NOTIFY_H +#define QEMU_NOTIFY_H + +#include "sys-queue.h" + +typedef struct Notifier Notifier; + +struct Notifier +{ + void (*notify)(Notifier *notifier); + LIST_ENTRY(Notifier) node; +}; + +typedef struct NotifierList +{ + LIST_HEAD(, Notifier) notifiers; +} NotifierList; + +#define NOTIFIER_LIST_INITIALIZER(head) \ + { LIST_HEAD_INITIALIZER((head).notifiers) } + +void notifier_list_init(NotifierList *list); + +void notifier_list_add(NotifierList *list, Notifier *notifier); + +void notifier_list_remove(Notifier *notifier); + +void notifier_list_notify(NotifierList *list); + +#endif diff --git a/sys-queue.h b/sys-queue.h index 55c26fe7..81ab044a 100644 --- a/sys-queue.h +++ b/sys-queue.h @@ -132,6 +132,11 @@ struct { \ (var); \ (var) = ((var)->field.le_next)) +#define LIST_FOREACH_SAFE(var, head, field, next_var) \ + for ((var) = ((head)->lh_first); \ + (var) && ((next_var) = ((var)->field.le_next), 1); \ + (var) = (next_var)) + /* * List access methods. */ -- generated by git-patchbot for /home/xen/git/qemu-xen-traditional.git#master
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |