Index | Thread | Search

From:
"Ted Unangst" <tedu@tedunangst.com>
Subject:
disestablish dohooks
To:
tech@openbsd.org
Date:
Tue, 10 Jun 2025 04:48:04 -0400

Download raw body.

Thread
Unless I've missed something, the only in use remnant of the hooks 
code is for startup hooks. And never disestablished.

So we can burn through one layer of abstraction, and also eliminate 
one unused function entirely.

There's also a collection of man.9 pages.

Index: kern/kern_subr.c
===================================================================
RCS file: /home/cvs/src/sys/kern/kern_subr.c,v
diff -u -p -r1.52 kern_subr.c
--- kern/kern_subr.c	31 Jan 2023 15:18:56 -0000	1.52
+++ kern/kern_subr.c	10 Jun 2025 08:44:28 -0000
@@ -262,8 +262,7 @@ struct hook_desc_head startuphook_list =
     TAILQ_HEAD_INITIALIZER(startuphook_list);
 
 void *
-hook_establish(struct hook_desc_head *head, int tail, void (*fn)(void *),
-    void *arg)
+startuphook_establish(void (*fn)(void *), void *arg)
 {
 	struct hook_desc *hdp;
 
@@ -273,53 +272,23 @@ hook_establish(struct hook_desc_head *he
 
 	hdp->hd_fn = fn;
 	hdp->hd_arg = arg;
-	if (tail)
-		TAILQ_INSERT_TAIL(head, hdp, hd_list);
-	else
-		TAILQ_INSERT_HEAD(head, hdp, hd_list);
+	TAILQ_INSERT_TAIL(&startuphook_list, hdp, hd_list);
 
 	return (hdp);
 }
 
-void
-hook_disestablish(struct hook_desc_head *head, void *vhook)
-{
-	struct hook_desc *hdp;
-
-#ifdef DIAGNOSTIC
-	for (hdp = TAILQ_FIRST(head); hdp != NULL;
-	    hdp = TAILQ_NEXT(hdp, hd_list))
-                if (hdp == vhook)
-			break;
-	if (hdp == NULL)
-		return;
-#endif
-	hdp = vhook;
-	TAILQ_REMOVE(head, hdp, hd_list);
-	free(hdp, M_DEVBUF, sizeof(*hdp));
-}
-
 /*
  * Run hooks.  Startup hooks are invoked right after scheduler_start but
- * before root is mounted.  Shutdown hooks are invoked immediately before the
- * system is halted or rebooted, i.e. after file systems unmounted,
- * after crash dump done, etc.
+ * before root is mounted.
  */
 void
-dohooks(struct hook_desc_head *head, int flags)
+dostartuphooks(void)
 {
-	struct hook_desc *hdp, *hdp_temp;
+	struct hook_desc *hdp;
 
-	if ((flags & HOOK_REMOVE) == 0) {
-		TAILQ_FOREACH_SAFE(hdp, head, hd_list, hdp_temp) {
-			(*hdp->hd_fn)(hdp->hd_arg);
-		}
-	} else {
-		while ((hdp = TAILQ_FIRST(head)) != NULL) {
-			TAILQ_REMOVE(head, hdp, hd_list);
-			(*hdp->hd_fn)(hdp->hd_arg);
-			if ((flags & HOOK_FREE) != 0)
-				free(hdp, M_DEVBUF, sizeof(*hdp));
-		}
+	while ((hdp = TAILQ_FIRST(&startuphook_list)) != NULL) {
+		TAILQ_REMOVE(&startuphook_list, hdp, hd_list);
+		(*hdp->hd_fn)(hdp->hd_arg);
+		free(hdp, M_DEVBUF, sizeof(*hdp));
 	}
 }
Index: sys/systm.h
===================================================================
RCS file: /home/cvs/src/sys/sys/systm.h,v
diff -u -p -r1.173 systm.h
--- sys/systm.h	3 Jun 2025 00:20:31 -0000	1.173
+++ sys/systm.h	10 Jun 2025 08:42:55 -0000
@@ -302,18 +302,8 @@ TAILQ_HEAD(hook_desc_head, hook_desc);
 
 extern struct hook_desc_head startuphook_list;
 
-void	*hook_establish(struct hook_desc_head *, int, void (*)(void *), void *);
-void	hook_disestablish(struct hook_desc_head *, void *);
-void	dohooks(struct hook_desc_head *, int);
-
-#define HOOK_REMOVE	0x01
-#define HOOK_FREE	0x02
-
-#define startuphook_establish(fn, arg) \
-	hook_establish(&startuphook_list, 1, (fn), (arg))
-#define startuphook_disestablish(vhook) \
-	hook_disestablish(&startuphook_list, (vhook))
-#define dostartuphooks() dohooks(&startuphook_list, HOOK_REMOVE|HOOK_FREE)
+void	*startuphook_establish(void (*)(void *), void *);
+void	dostartuphooks(void);
 
 struct uio;
 int	uiomove(void *, size_t, struct uio *);