Hi,
ip_output() and ip6_output() should be MP safe when called with
NULL options.
ok?
bluhm
Index: netinet/ip_input.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/ip_input.c,v
retrieving revision 1.385
diff -u -p -r1.385 ip_input.c
--- netinet/ip_input.c 18 May 2023 09:59:43 -0000 1.385
+++ netinet/ip_input.c 5 Sep 2023 11:48:25 -0000
@@ -1851,7 +1851,7 @@ ip_send_do_dispatch(void *xmq, int flags
if (ml_empty(&ml))
return;
- NET_LOCK();
+ NET_LOCK_SHARED();
while ((m = ml_dequeue(&ml)) != NULL) {
u_int32_t ipsecflowinfo = 0;
@@ -1862,7 +1862,7 @@ ip_send_do_dispatch(void *xmq, int flags
}
ip_output(m, NULL, NULL, flags, NULL, NULL, ipsecflowinfo);
}
- NET_UNLOCK();
+ NET_UNLOCK_SHARED();
}
void
Index: netinet6/ip6_input.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/ip6_input.c,v
retrieving revision 1.254
diff -u -p -r1.254 ip6_input.c
--- netinet6/ip6_input.c 21 Aug 2022 14:15:55 -0000 1.254
+++ netinet6/ip6_input.c 5 Sep 2023 11:48:44 -0000
@@ -1572,11 +1572,11 @@ ip6_send_dispatch(void *xmq)
if (ml_empty(&ml))
return;
- NET_LOCK();
+ NET_LOCK_SHARED();
while ((m = ml_dequeue(&ml)) != NULL) {
ip6_output(m, NULL, NULL, 0, NULL, NULL);
}
- NET_UNLOCK();
+ NET_UNLOCK_SHARED();
}
void