On Fri, Jun 18, 2021 at 11:32:59PM +0300, Vitaliy Makkoveev wrote:
> > I would give the diff below a try. Perhaps in snaps?
>
> Yes please. splx(9) logic should go away at least from this layer.
So what to do with this diff?
- OK to commit?
- Test it in snaps?
- Call for testers?
I it would be interesting if the kernel is stable when trunk or
aggr interfaces are created or destroyed while the machine is under
network load. Changing the MAC address of a physical interface
should also run through this code path.
bluhm
Index: net/if.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/if.c,v
retrieving revision 1.641
diff -u -p -r1.641 if.c
--- net/if.c 25 May 2021 22:45:09 -0000 1.641
+++ net/if.c 16 Jun 2021 23:46:42 -0000
@@ -3107,9 +3107,10 @@ ifnewlladdr(struct ifnet *ifp)
#endif
struct ifreq ifrq;
short up;
- int s;
- s = splnet();
+ NET_ASSERT_LOCKED(); /* for ioctl and in6 */
+ KERNEL_ASSERT_LOCKED(); /* for if_flags */
+
up = ifp->if_flags & IFF_UP;
if (up) {
@@ -3143,7 +3144,6 @@ ifnewlladdr(struct ifnet *ifp)
ifrq.ifr_flags = ifp->if_flags;
(*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifrq);
}
- splx(s);
}
void