Module Name: src Committed By: jdolecek Date: Tue May 5 09:52:13 UTC 2020
Modified Files: src/sys/arch/xen/xen: if_xennet_xenbus.c Log Message: due to the locking wild west for if_ioctl can't assert IFNET_LOCKED() in xennet_ioctl(), so just do splnet() like other drivers do, and hope for best fixes failed KASSERT() e.g. when starting rpcbind(), which ends up calling this via sys_setsockopt()->sosetopt()->...->in6_addmulti()-> if_mcast_op(), this path doesn't currently take IFNET_LOCK() To generate a diff of this commit: cvs rdiff -u -r1.123 -r1.124 src/sys/arch/xen/xen/if_xennet_xenbus.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/xen/xen/if_xennet_xenbus.c diff -u src/sys/arch/xen/xen/if_xennet_xenbus.c:1.123 src/sys/arch/xen/xen/if_xennet_xenbus.c:1.124 --- src/sys/arch/xen/xen/if_xennet_xenbus.c:1.123 Mon May 4 10:03:45 2020 +++ src/sys/arch/xen/xen/if_xennet_xenbus.c Tue May 5 09:52:13 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: if_xennet_xenbus.c,v 1.123 2020/05/04 10:03:45 jdolecek Exp $ */ +/* $NetBSD: if_xennet_xenbus.c,v 1.124 2020/05/05 09:52:13 jdolecek Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -81,10 +81,11 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_xennet_xenbus.c,v 1.123 2020/05/04 10:03:45 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_xennet_xenbus.c,v 1.124 2020/05/05 09:52:13 jdolecek Exp $"); #include "opt_xen.h" #include "opt_nfs_boot.h" +#include "opt_net_mpsafe.h" #include <sys/param.h> #include <sys/device.h> @@ -1267,7 +1268,13 @@ xennet_ioctl(struct ifnet *ifp, u_long c #endif int error = 0; +#ifdef NET_MPSAFE +#ifdef notyet + /* XXX IFNET_LOCK() is not taken in some cases e.g. multicast ioctls */ KASSERT(IFNET_LOCKED(ifp)); +#endif +#endif + int s = splnet(); DPRINTFN(XEDB_FOLLOW, ("%s: xennet_ioctl()\n", device_xname(sc->sc_dev))); @@ -1278,6 +1285,8 @@ xennet_ioctl(struct ifnet *ifp, u_long c DPRINTFN(XEDB_FOLLOW, ("%s: xennet_ioctl() returning %d\n", device_xname(sc->sc_dev), error)); + splx(s); + return error; }