Hi,

MP safe process timeouts were landed to the tree, so time to test them
with network stack :) Diff below makes tdb and ids garbage collector
timeout handlers running without kernel lock.

Not for commit, just share this for tests if someone interesting.

Index: sys/netinet/ip_ipsp.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_ipsp.c,v
retrieving revision 1.277
diff -u -p -r1.277 ip_ipsp.c
--- sys/netinet/ip_ipsp.c       11 Oct 2023 22:13:16 -0000      1.277
+++ sys/netinet/ip_ipsp.c       12 Oct 2023 18:07:18 -0000
@@ -124,7 +124,8 @@ void ipsp_ids_gc(void *);
 LIST_HEAD(, ipsec_ids) ipsp_ids_gc_list =
     LIST_HEAD_INITIALIZER(ipsp_ids_gc_list);   /* [F] */
 struct timeout ipsp_ids_gc_timeout =
-    TIMEOUT_INITIALIZER_FLAGS(ipsp_ids_gc, NULL, KCLOCK_NONE, TIMEOUT_PROC);
+    TIMEOUT_INITIALIZER_FLAGS(ipsp_ids_gc, NULL, KCLOCK_NONE,
+    TIMEOUT_PROC | TIMEOUT_MPSAFE);
 
 static inline int ipsp_ids_cmp(const struct ipsec_ids *,
     const struct ipsec_ids *);
@@ -1100,10 +1101,14 @@ tdb_alloc(u_int rdomain)
        tdbp->tdb_counters = counters_alloc(tdb_ncounters);
 
        /* Initialize timeouts. */
-       timeout_set_proc(&tdbp->tdb_timer_tmo, tdb_timeout, tdbp);
-       timeout_set_proc(&tdbp->tdb_first_tmo, tdb_firstuse, tdbp);
-       timeout_set_proc(&tdbp->tdb_stimer_tmo, tdb_soft_timeout, tdbp);
-       timeout_set_proc(&tdbp->tdb_sfirst_tmo, tdb_soft_firstuse, tdbp);
+       timeout_set_flags(&tdbp->tdb_timer_tmo, tdb_timeout, tdbp,
+           KCLOCK_NONE, TIMEOUT_PROC | TIMEOUT_MPSAFE);
+       timeout_set_flags(&tdbp->tdb_first_tmo, tdb_firstuse, tdbp,
+           KCLOCK_NONE, TIMEOUT_PROC | TIMEOUT_MPSAFE);
+       timeout_set_flags(&tdbp->tdb_stimer_tmo, tdb_soft_timeout, tdbp,
+           KCLOCK_NONE, TIMEOUT_PROC | TIMEOUT_MPSAFE);
+       timeout_set_flags(&tdbp->tdb_sfirst_tmo, tdb_soft_firstuse, tdbp,
+           KCLOCK_NONE, TIMEOUT_PROC | TIMEOUT_MPSAFE);
 
        return tdbp;
 }

Reply via email to