Module Name:    src
Committed By:   riastradh
Date:           Thu Mar  3 05:50:22 UTC 2022

Modified Files:
        src/sys/dev/usb: if_aue.c if_axe.c if_axen.c if_cdce.c if_cue.c
            if_kue.c if_mos.c if_mue.c if_smsc.c if_udav.c if_upl.c if_ure.c
            if_url.c if_urndis.c usbnet.c

Log Message:
usbnet: Enter uno_init with the core lock held.

This reduces code in all drivers except urndis(4) and aue(4).

However, it's still safe for urndis to drop the core lock because the
ifnet is locked, and the ifnet lock covers the DOWN->UP (uno_init)
and UP->DOWN (uno_stop) transitions.


To generate a diff of this commit:
cvs rdiff -u -r1.171 -r1.172 src/sys/dev/usb/if_aue.c
cvs rdiff -u -r1.132 -r1.133 src/sys/dev/usb/if_axe.c
cvs rdiff -u -r1.74 -r1.75 src/sys/dev/usb/if_axen.c
cvs rdiff -u -r1.72 -r1.73 src/sys/dev/usb/if_cdce.c
cvs rdiff -u -r1.92 -r1.93 src/sys/dev/usb/if_cue.c
cvs rdiff -u -r1.105 -r1.106 src/sys/dev/usb/if_kue.c
cvs rdiff -u -r1.7 -r1.8 src/sys/dev/usb/if_mos.c
cvs rdiff -u -r1.63 -r1.64 src/sys/dev/usb/if_mue.c
cvs rdiff -u -r1.71 -r1.72 src/sys/dev/usb/if_smsc.c src/sys/dev/usb/if_upl.c
cvs rdiff -u -r1.78 -r1.79 src/sys/dev/usb/if_udav.c src/sys/dev/usb/if_url.c
cvs rdiff -u -r1.40 -r1.41 src/sys/dev/usb/if_ure.c
cvs rdiff -u -r1.39 -r1.40 src/sys/dev/usb/if_urndis.c
cvs rdiff -u -r1.70 -r1.71 src/sys/dev/usb/usbnet.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/dev/usb/if_aue.c
diff -u src/sys/dev/usb/if_aue.c:1.171 src/sys/dev/usb/if_aue.c:1.172
--- src/sys/dev/usb/if_aue.c:1.171	Wed Mar 18 11:33:32 2020
+++ src/sys/dev/usb/if_aue.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_aue.c,v 1.171 2020/03/18 11:33:32 kre Exp $	*/
+/*	$NetBSD: if_aue.c,v 1.172 2022/03/03 05:50:22 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1997, 1998, 1999, 2000
@@ -76,7 +76,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_aue.c,v 1.171 2020/03/18 11:33:32 kre Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_aue.c,v 1.172 2022/03/03 05:50:22 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -1000,11 +1000,9 @@ aue_uno_init(struct ifnet *ifp)
 	struct usbnet * const	un = ifp->if_softc;
 	int rv;
 
-	usbnet_lock_core(un);
 	usbnet_busy(un);
 	rv = aue_init_locked(ifp);
 	usbnet_unbusy(un);
-	usbnet_unlock_core(un);
 
 	return rv;
 }
@@ -1012,6 +1010,7 @@ aue_uno_init(struct ifnet *ifp)
 static int
 aue_uno_ioctl(struct ifnet *ifp, u_long cmd, void *data)
 {
+	struct usbnet * const un = ifp->if_softc;
 
 	AUEHIST_FUNC();
 	AUEHIST_CALLARGSN(5, "aue%jd: enter cmd %#jx data %#jx",
@@ -1021,7 +1020,9 @@ aue_uno_ioctl(struct ifnet *ifp, u_long 
 	switch (cmd) {
 	case SIOCADDMULTI:
 	case SIOCDELMULTI:
+		usbnet_lock_core(un);
 		aue_uno_init(ifp);
+		usbnet_unlock_core(un);
 		break;
 	default:
 		break;

Index: src/sys/dev/usb/if_axe.c
diff -u src/sys/dev/usb/if_axe.c:1.132 src/sys/dev/usb/if_axe.c:1.133
--- src/sys/dev/usb/if_axe.c:1.132	Mon Mar  1 17:41:00 2021
+++ src/sys/dev/usb/if_axe.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_axe.c,v 1.132 2021/03/01 17:41:00 jakllsch Exp $	*/
+/*	$NetBSD: if_axe.c,v 1.133 2022/03/03 05:50:22 riastradh Exp $	*/
 /*	$OpenBSD: if_axe.c,v 1.137 2016/04/13 11:03:37 mpi Exp $ */
 
 /*
@@ -87,7 +87,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.132 2021/03/01 17:41:00 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.133 2022/03/03 05:50:22 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -1317,11 +1317,9 @@ axe_uno_init(struct ifnet *ifp)
 {
 	struct usbnet * const un = ifp->if_softc;
 
-	usbnet_lock_core(un);
 	usbnet_busy(un);
 	int ret = axe_init_locked(ifp);
 	usbnet_unbusy(un);
-	usbnet_unlock_core(un);
 
 	return ret;
 }

Index: src/sys/dev/usb/if_axen.c
diff -u src/sys/dev/usb/if_axen.c:1.74 src/sys/dev/usb/if_axen.c:1.75
--- src/sys/dev/usb/if_axen.c:1.74	Thu Mar  3 05:48:06 2022
+++ src/sys/dev/usb/if_axen.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_axen.c,v 1.74 2022/03/03 05:48:06 riastradh Exp $	*/
+/*	$NetBSD: if_axen.c,v 1.75 2022/03/03 05:50:22 riastradh Exp $	*/
 /*	$OpenBSD: if_axen.c,v 1.3 2013/10/21 10:10:22 yuo Exp $	*/
 
 /*
@@ -23,7 +23,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_axen.c,v 1.74 2022/03/03 05:48:06 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_axen.c,v 1.75 2022/03/03 05:50:22 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -935,11 +935,9 @@ axen_uno_init(struct ifnet *ifp)
 {
 	struct usbnet * const un = ifp->if_softc;
 
-	usbnet_lock_core(un);
 	usbnet_busy(un);
 	int ret = axen_init_locked(ifp);
 	usbnet_unbusy(un);
-	usbnet_unlock_core(un);
 
 	return ret;
 }

Index: src/sys/dev/usb/if_cdce.c
diff -u src/sys/dev/usb/if_cdce.c:1.72 src/sys/dev/usb/if_cdce.c:1.73
--- src/sys/dev/usb/if_cdce.c:1.72	Fri May 15 19:28:10 2020
+++ src/sys/dev/usb/if_cdce.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_cdce.c,v 1.72 2020/05/15 19:28:10 maxv Exp $ */
+/*	$NetBSD: if_cdce.c,v 1.73 2022/03/03 05:50:22 riastradh Exp $ */
 
 /*
  * Copyright (c) 1997, 1998, 1999, 2000-2003 Bill Paul <wp...@windriver.com>
@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_cdce.c,v 1.72 2020/05/15 19:28:10 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_cdce.c,v 1.73 2022/03/03 05:50:22 riastradh Exp $");
 
 #include <sys/param.h>
 
@@ -261,7 +261,6 @@ cdce_uno_init(struct ifnet *ifp)
 	struct usbnet		*un = ifp->if_softc;
 	int rv;
 
-	usbnet_lock_core(un);
 	if (usbnet_isdying(un))
 		rv = EIO;
 	else {
@@ -269,7 +268,6 @@ cdce_uno_init(struct ifnet *ifp)
 		rv = usbnet_init_rx_tx(un);
 		usbnet_set_link(un, rv == 0);
 	}
-	usbnet_unlock_core(un);
 
 	return rv;
 }

Index: src/sys/dev/usb/if_cue.c
diff -u src/sys/dev/usb/if_cue.c:1.92 src/sys/dev/usb/if_cue.c:1.93
--- src/sys/dev/usb/if_cue.c:1.92	Thu Mar  3 05:49:51 2022
+++ src/sys/dev/usb/if_cue.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_cue.c,v 1.92 2022/03/03 05:49:51 riastradh Exp $	*/
+/*	$NetBSD: if_cue.c,v 1.93 2022/03/03 05:50:22 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1997, 1998, 1999, 2000
@@ -57,7 +57,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_cue.c,v 1.92 2022/03/03 05:49:51 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_cue.c,v 1.93 2022/03/03 05:50:22 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -673,11 +673,9 @@ cue_uno_init(struct ifnet *ifp)
 	struct usbnet * const	un = ifp->if_softc;
 	int rv;
 
-	usbnet_lock_core(un);
 	usbnet_busy(un);
 	rv = cue_init_locked(ifp);
 	usbnet_unbusy(un);
-	usbnet_unlock_core(un);
 
 	return rv;
 }

Index: src/sys/dev/usb/if_kue.c
diff -u src/sys/dev/usb/if_kue.c:1.105 src/sys/dev/usb/if_kue.c:1.106
--- src/sys/dev/usb/if_kue.c:1.105	Sun Jun 13 09:26:24 2021
+++ src/sys/dev/usb/if_kue.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_kue.c,v 1.105 2021/06/13 09:26:24 mlelstv Exp $	*/
+/*	$NetBSD: if_kue.c,v 1.106 2022/03/03 05:50:22 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1997, 1998, 1999, 2000
@@ -71,7 +71,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_kue.c,v 1.105 2021/06/13 09:26:24 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_kue.c,v 1.106 2022/03/03 05:50:22 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -633,11 +633,9 @@ kue_uno_init(struct ifnet *ifp)
 	struct usbnet * const	un = ifp->if_softc;
 	int rv;
 
-	usbnet_lock_core(un);
 	usbnet_busy(un);
 	rv = kue_init_locked(ifp);
 	usbnet_unbusy(un);
-	usbnet_unlock_core(un);
 
 	return rv;
 }

Index: src/sys/dev/usb/if_mos.c
diff -u src/sys/dev/usb/if_mos.c:1.7 src/sys/dev/usb/if_mos.c:1.8
--- src/sys/dev/usb/if_mos.c:1.7	Thu Apr  2 04:09:36 2020
+++ src/sys/dev/usb/if_mos.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_mos.c,v 1.7 2020/04/02 04:09:36 nisimura Exp $	*/
+/*	$NetBSD: if_mos.c,v 1.8 2022/03/03 05:50:22 riastradh Exp $	*/
 /*	$OpenBSD: if_mos.c,v 1.40 2019/07/07 06:40:10 kevlo Exp $	*/
 
 /*
@@ -72,7 +72,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_mos.c,v 1.7 2020/04/02 04:09:36 nisimura Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_mos.c,v 1.8 2022/03/03 05:50:22 riastradh Exp $");
 
 #include <sys/param.h>
 
@@ -760,11 +760,9 @@ mos_uno_init(struct ifnet *ifp)
 {
 	struct usbnet * const un = ifp->if_softc;
 
-	usbnet_lock_core(un);
 	usbnet_busy(un);
 	int ret = mos_init_locked(ifp);
 	usbnet_unbusy(un);
-	usbnet_unlock_core(un);
 
 	return ret;
 }

Index: src/sys/dev/usb/if_mue.c
diff -u src/sys/dev/usb/if_mue.c:1.63 src/sys/dev/usb/if_mue.c:1.64
--- src/sys/dev/usb/if_mue.c:1.63	Thu Mar  3 05:48:06 2022
+++ src/sys/dev/usb/if_mue.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_mue.c,v 1.63 2022/03/03 05:48:06 riastradh Exp $	*/
+/*	$NetBSD: if_mue.c,v 1.64 2022/03/03 05:50:22 riastradh Exp $	*/
 /*	$OpenBSD: if_mue.c,v 1.3 2018/08/04 16:42:46 jsg Exp $	*/
 
 /*
@@ -20,7 +20,7 @@
 /* Driver for Microchip LAN7500/LAN7800 chipsets. */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_mue.c,v 1.63 2022/03/03 05:48:06 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_mue.c,v 1.64 2022/03/03 05:50:22 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -1255,11 +1255,9 @@ mue_uno_init(struct ifnet *ifp)
 	struct usbnet * const	un = ifp->if_softc;
 	int rv;
 
-	usbnet_lock_core(un);
 	usbnet_busy(un);
 	rv = mue_init_locked(ifp);
 	usbnet_unbusy(un);
-	usbnet_unlock_core(un);
 
 	return rv;
 }

Index: src/sys/dev/usb/if_smsc.c
diff -u src/sys/dev/usb/if_smsc.c:1.71 src/sys/dev/usb/if_smsc.c:1.72
--- src/sys/dev/usb/if_smsc.c:1.71	Thu Mar  3 05:48:06 2022
+++ src/sys/dev/usb/if_smsc.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_smsc.c,v 1.71 2022/03/03 05:48:06 riastradh Exp $	*/
+/*	$NetBSD: if_smsc.c,v 1.72 2022/03/03 05:50:22 riastradh Exp $	*/
 
 /*	$OpenBSD: if_smsc.c,v 1.4 2012/09/27 12:38:11 jsg Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/net/if_smsc.c,v 1.1 2012/08/15 04:03:55 gonzo Exp $ */
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_smsc.c,v 1.71 2022/03/03 05:48:06 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_smsc.c,v 1.72 2022/03/03 05:50:22 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -552,11 +552,9 @@ smsc_uno_init(struct ifnet *ifp)
 {
 	struct usbnet * const un = ifp->if_softc;
 
-	usbnet_lock_core(un);
 	usbnet_busy(un);
 	int ret = smsc_init_locked(ifp);
 	usbnet_unbusy(un);
-	usbnet_unlock_core(un);
 
 	return ret;
 }
Index: src/sys/dev/usb/if_upl.c
diff -u src/sys/dev/usb/if_upl.c:1.71 src/sys/dev/usb/if_upl.c:1.72
--- src/sys/dev/usb/if_upl.c:1.71	Sun Mar 15 23:04:51 2020
+++ src/sys/dev/usb/if_upl.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_upl.c,v 1.71 2020/03/15 23:04:51 thorpej Exp $	*/
+/*	$NetBSD: if_upl.c,v 1.72 2022/03/03 05:50:22 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_upl.c,v 1.71 2020/03/15 23:04:51 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_upl.c,v 1.72 2022/03/03 05:50:22 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -257,12 +257,10 @@ upl_uno_init(struct ifnet *ifp)
 	struct usbnet * const un = ifp->if_softc;
 	int rv;
 
-	usbnet_lock_core(un);
 	if (usbnet_isdying(un))
 		rv = EIO;
 	else
 		rv = usbnet_init_rx_tx(un);
-	usbnet_unlock_core(un);
 
 	return rv;
 }

Index: src/sys/dev/usb/if_udav.c
diff -u src/sys/dev/usb/if_udav.c:1.78 src/sys/dev/usb/if_udav.c:1.79
--- src/sys/dev/usb/if_udav.c:1.78	Fri Apr  2 09:27:44 2021
+++ src/sys/dev/usb/if_udav.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_udav.c,v 1.78 2021/04/02 09:27:44 skrll Exp $	*/
+/*	$NetBSD: if_udav.c,v 1.79 2022/03/03 05:50:22 riastradh Exp $	*/
 /*	$nabe: if_udav.c,v 1.3 2003/08/21 16:57:19 nabe Exp $	*/
 
 /*
@@ -45,7 +45,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_udav.c,v 1.78 2021/04/02 09:27:44 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_udav.c,v 1.79 2022/03/03 05:50:22 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -478,10 +478,7 @@ udav_uno_init(struct ifnet *ifp)
 
 	DPRINTF(("%s: %s: enter\n", device_xname(un->un_dev), __func__));
 
-	usbnet_lock_core(un);
-
 	if (usbnet_isdying(un)) {
-		usbnet_unlock_core(un);
 		return EIO;
 	}
 
@@ -522,7 +519,6 @@ udav_uno_init(struct ifnet *ifp)
 
 	if (rc != 0) {
 		usbnet_unbusy(un);
-		usbnet_unlock_core(un);
 		return rc;
 	}
 
@@ -532,7 +528,6 @@ udav_uno_init(struct ifnet *ifp)
 		rc = usbnet_init_rx_tx(un);
 
 	usbnet_unbusy(un);
-	usbnet_unlock_core(un);
 
 	return rc;
 }
Index: src/sys/dev/usb/if_url.c
diff -u src/sys/dev/usb/if_url.c:1.78 src/sys/dev/usb/if_url.c:1.79
--- src/sys/dev/usb/if_url.c:1.78	Thu Mar  3 05:48:14 2022
+++ src/sys/dev/usb/if_url.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_url.c,v 1.78 2022/03/03 05:48:14 riastradh Exp $	*/
+/*	$NetBSD: if_url.c,v 1.79 2022/03/03 05:50:22 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2001, 2002
@@ -44,7 +44,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_url.c,v 1.78 2022/03/03 05:48:14 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_url.c,v 1.79 2022/03/03 05:50:22 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -408,11 +408,9 @@ url_uno_init(struct ifnet *ifp)
 {
 	struct usbnet * const un = ifp->if_softc;
 
-	usbnet_lock_core(un);
 	usbnet_busy(un);
 	int ret = url_init_locked(ifp);
 	usbnet_unbusy(un);
-	usbnet_unlock_core(un);
 
 	return ret;
 }

Index: src/sys/dev/usb/if_ure.c
diff -u src/sys/dev/usb/if_ure.c:1.40 src/sys/dev/usb/if_ure.c:1.41
--- src/sys/dev/usb/if_ure.c:1.40	Fri Mar 27 18:04:45 2020
+++ src/sys/dev/usb/if_ure.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ure.c,v 1.40 2020/03/27 18:04:45 nisimura Exp $	*/
+/*	$NetBSD: if_ure.c,v 1.41 2022/03/03 05:50:22 riastradh Exp $	*/
 /*	$OpenBSD: if_ure.c,v 1.10 2018/11/02 21:32:30 jcs Exp $	*/
 
 /*-
@@ -30,7 +30,7 @@
 /* RealTek RTL8152/RTL8153 10/100/Gigabit USB Ethernet device */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ure.c,v 1.40 2020/03/27 18:04:45 nisimura Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ure.c,v 1.41 2022/03/03 05:50:22 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -456,11 +456,9 @@ ure_uno_init(struct ifnet *ifp)
 {
 	struct usbnet * const un = ifp->if_softc;
 
-	usbnet_lock_core(un);
 	usbnet_busy(un);
 	int ret = ure_init_locked(ifp);
 	usbnet_unbusy(un);
-	usbnet_unlock_core(un);
 
 	return ret;
 }

Index: src/sys/dev/usb/if_urndis.c
diff -u src/sys/dev/usb/if_urndis.c:1.39 src/sys/dev/usb/if_urndis.c:1.40
--- src/sys/dev/usb/if_urndis.c:1.39	Sun Mar 15 23:04:51 2020
+++ src/sys/dev/usb/if_urndis.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_urndis.c,v 1.39 2020/03/15 23:04:51 thorpej Exp $ */
+/*	$NetBSD: if_urndis.c,v 1.40 2022/03/03 05:50:22 riastradh Exp $ */
 /*	$OpenBSD: if_urndis.c,v 1.31 2011/07/03 15:47:17 matthew Exp $ */
 
 /*
@@ -21,7 +21,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_urndis.c,v 1.39 2020/03/15 23:04:51 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_urndis.c,v 1.40 2022/03/03 05:50:22 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -883,8 +883,15 @@ static int
 urndis_uno_init(struct ifnet *ifp)
 {
 	struct usbnet *un = ifp->if_softc;
+	int error;
 
-	return urndis_init_un(ifp, un);
+	KASSERT(IFNET_LOCKED(ifp));
+
+	usbnet_unlock_core(un);
+	error = urndis_init_un(ifp, un);
+	usbnet_lock_core(un);
+
+	return error;
 }
 
 static int

Index: src/sys/dev/usb/usbnet.c
diff -u src/sys/dev/usb/usbnet.c:1.70 src/sys/dev/usb/usbnet.c:1.71
--- src/sys/dev/usb/usbnet.c:1.70	Thu Mar  3 05:50:12 2022
+++ src/sys/dev/usb/usbnet.c	Thu Mar  3 05:50:22 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbnet.c,v 1.70 2022/03/03 05:50:12 riastradh Exp $	*/
+/*	$NetBSD: usbnet.c,v 1.71 2022/03/03 05:50:22 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2019 Matthew R. Green
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usbnet.c,v 1.70 2022/03/03 05:50:12 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usbnet.c,v 1.71 2022/03/03 05:50:22 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -1291,6 +1291,7 @@ usbnet_if_init(struct ifnet *ifp)
 	USBNETHIST_FUNC(); USBNETHIST_CALLED();
 	struct usbnet * const un = ifp->if_softc;
 	bool dying;
+	int error;
 
 	KASSERTMSG(IFNET_LOCKED(ifp), "%s", ifp->if_xname);
 
@@ -1304,7 +1305,11 @@ usbnet_if_init(struct ifnet *ifp)
 	if (dying)
 		return EIO;
 
-	return uno_init(un, ifp);
+	mutex_enter(&un->un_pri->unp_core_lock);
+	error = uno_init(un, ifp);
+	mutex_exit(&un->un_pri->unp_core_lock);
+
+	return error;
 }
 
 

Reply via email to