Hi,
Instead of using a MP unsafe global variable, just call rt_timer_init()
from route_init().
ok?
bluhm
Index: net/route.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/route.c,v
retrieving revision 1.402
diff -u -p -r1.402 route.c
--- net/route.c 22 Feb 2022 01:15:02 -0000 1.402
+++ net/route.c 18 Apr 2022 22:00:37 -0000
@@ -190,6 +190,8 @@ route_init(void)
while (rt_hashjitter == 0)
rt_hashjitter = arc4random();
+ rt_timer_init();
+
#ifdef BFD
bfdinit();
#endif
@@ -1362,7 +1364,6 @@ rt_ifa_purge_walker(struct rtentry *rt,
*/
LIST_HEAD(, rttimer_queue) rttimer_queue_head;
-static int rt_init_done = 0;
#define RTTIMER_CALLOUT(r) { \
if (r->rtt_func != NULL) { \
@@ -1389,25 +1390,18 @@ rt_timer_init(void)
{
static struct timeout rt_timer_timeout;
- if (rt_init_done)
- panic("rt_timer_init: already initialized");
-
pool_init(&rttimer_pool, sizeof(struct rttimer), 0, IPL_SOFTNET, 0,
"rttmr", NULL);
LIST_INIT(&rttimer_queue_head);
timeout_set_proc(&rt_timer_timeout, rt_timer_timer, &rt_timer_timeout);
timeout_add_sec(&rt_timer_timeout, 1);
- rt_init_done = 1;
}
struct rttimer_queue *
rt_timer_queue_create(u_int timeout)
{
struct rttimer_queue *rtq;
-
- if (rt_init_done == 0)
- rt_timer_init();
if ((rtq = malloc(sizeof(*rtq), M_RTABLE, M_NOWAIT|M_ZERO)) == NULL)
return (NULL);