From b98917b874777a99be8dd086e220e782f9786f17 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Sun, 21 Aug 2022 21:00:39 +0000 Subject: [PATCH 7/7] eventhandler: retire EVENTHANDLER_DIRECT_INVOKE Reviewed by: Differential Revision: --- share/man/man9/EVENTHANDLER.9 | 12 ------------ sys/kern/subr_eventhandler.c | 19 ------------------- sys/sys/_eventhandler.h | 15 --------------- sys/sys/eventhandler.h | 32 -------------------------------- 4 files changed, 78 deletions(-) diff --git a/share/man/man9/EVENTHANDLER.9 b/share/man/man9/EVENTHANDLER.9 index b369e2f03258..336076103d66 100644 --- a/share/man/man9/EVENTHANDLER.9 +++ b/share/man/man9/EVENTHANDLER.9 @@ -38,9 +38,6 @@ .Fn EVENTHANDLER_REGISTER name func arg priority .Fn EVENTHANDLER_DEREGISTER name tag .Fn EVENTHANDLER_DEREGISTER_NOWAIT name tag -.Fn EVENTHANDLER_LIST_DECLARE name -.Fn EVENTHANDLER_LIST_DEFINE name -.Fn EVENTHANDLER_DIRECT_INVOKE name .Ft eventhandler_tag .Fo eventhandler_register .Fa "struct eventhandler_list *list" @@ -83,15 +80,6 @@ The symbol .Dv EVENTHANDLER_PRI_ANY may be used if the handler does not have a specific priority associated with it. -.Pp -The normal way to use this subsystem is via the macro interface. -For events that are high frequency it is suggested that you additionally use -.Fn EVENTHANDLER_LIST_DEFINE -so that the event handlers can be invoked directly using -.Fn EVENTHANDLER_DIRECT_INVOKE -(see below). -This saves the invoker from having to do a locked traversal of a global -list of event handler lists. .Bl -tag -width indent .It Fn EVENTHANDLER_DECLARE This macro declares an event handler named by argument diff --git a/sys/kern/subr_eventhandler.c b/sys/kern/subr_eventhandler.c index 6134c55729d4..6f52e874fc78 100644 --- a/sys/kern/subr_eventhandler.c +++ b/sys/kern/subr_eventhandler.c @@ -300,25 +300,6 @@ eventhandler_prune_list(struct eventhandler_list *list) wakeup(list); } -/* - * Create (or get the existing) list so the pointer can be stored by - * EVENTHANDLER_LIST_DEFINE. - */ -struct eventhandler_list * -eventhandler_create_list(const char *name) -{ - struct eventhandler_list *list; - - KASSERT(eventhandler_lists_initted, - ("eventhandler list created too early")); - - mtx_lock(&eventhandler_mutex); - list = eventhandler_find_or_create_list(name); - mtx_unlock(&eventhandler_mutex); - - return (list); -} - /* * Preemptible and sleepable event handler points. */ diff --git a/sys/sys/_eventhandler.h b/sys/sys/_eventhandler.h index 7901a1a264ac..f77cb6ecea5a 100644 --- a/sys/sys/_eventhandler.h +++ b/sys/sys/_eventhandler.h @@ -42,21 +42,6 @@ struct eventhandler_entry { typedef struct eventhandler_entry *eventhandler_tag; -/* - * You can optionally use the EVENTHANDLER_LIST and EVENTHANDLER_DIRECT macros - * to pre-define a symbol for the eventhandler list. This symbol can be used by - * EVENTHANDLER_DIRECT_INVOKE, which has the advantage of not needing to do a - * locked search of the global list of eventhandler lists. At least - * EVENTHANDLER_LIST_DEFINE must be used for EVENTHANDLER_DIRECT_INVOKE to - * work. EVENTHANDLER_LIST_DECLARE is only needed if the call to - * EVENTHANDLER_DIRECT_INVOKE is in a different compilation unit from - * EVENTHANDLER_LIST_DEFINE. If the events are even relatively high frequency - * it is suggested that you directly define a list for them. - */ -struct eventhandler_list; -#define EVENTHANDLER_LIST_DECLARE(name) \ -extern struct eventhandler_list *_eventhandler_list_ ## name \ - /* * Event handlers need to be declared, but do not need to be defined. The * declaration must be in scope wherever the handler is to be invoked. diff --git a/sys/sys/eventhandler.h b/sys/sys/eventhandler.h index e78b300bd7f4..3108f0b00f78 100644 --- a/sys/sys/eventhandler.h +++ b/sys/sys/eventhandler.h @@ -88,37 +88,6 @@ struct eventhandler_list { EHL_UNLOCK((list)); \ } while (0) -/* - * You can optionally use the EVENTHANDLER_LIST and EVENTHANDLER_DIRECT macros - * to pre-define a symbol for the eventhandler list. This symbol can be used by - * EVENTHANDLER_DIRECT_INVOKE, which has the advantage of not needing to do a - * locked search of the global list of eventhandler lists. At least - * EVENTHANDLER_LIST_DEFINE must be used for EVENTHANDLER_DIRECT_INVOKE to - * work. EVENTHANDLER_LIST_DECLARE is only needed if the call to - * EVENTHANDLER_DIRECT_INVOKE is in a different compilation unit from - * EVENTHANDLER_LIST_DEFINE. If the events are even relatively high frequency - * it is suggested that you directly define a list for them. - */ -#define EVENTHANDLER_LIST_DEFINE(name) \ -struct eventhandler_list *_eventhandler_list_ ## name ; \ -static void _ehl_init_ ## name (void * ctx __unused) \ -{ \ - _eventhandler_list_ ## name = eventhandler_create_list(#name); \ -} \ -SYSINIT(name ## _ehl_init, SI_SUB_EVENTHANDLER, SI_ORDER_ANY, \ - _ehl_init_ ## name, NULL); \ - struct __hack - -#define EVENTHANDLER_DIRECT_INVOKE(name, ...) do { \ - struct eventhandler_list *_el; \ - \ - _el = _eventhandler_list_ ## name ; \ - if (!TAILQ_EMPTY(&_el->el_entries)) { \ - EHL_LOCK(_el); \ - _EVENTHANDLER_INVOKE(name, _el , ## __VA_ARGS__); \ - } \ -} while (0) - #define EVENTHANDLER_DEFINE(name, func, arg, priority) \ static eventhandler_tag name ## _tag; \ static void name ## _evh_init(void *ctx) \ @@ -172,7 +141,6 @@ void eventhandler_deregister_nowait(struct eventhandler_list *list, eventhandler_tag tag); struct eventhandler_list *eventhandler_find_list(const char *name); void eventhandler_prune_list(struct eventhandler_list *list); -struct eventhandler_list *eventhandler_create_list(const char *name); #ifdef VIMAGE typedef void (*vimage_iterator_func_t)(void *, ...); -- 2.34.1