Module Name: src Committed By: riastradh Date: Thu Mar 3 05:50:57 UTC 2022
Modified Files: src/sys/dev/usb: if_aue.c if_mos.c if_mue.c if_smsc.c if_udav.c if_ure.c if_url.c Log Message: usbnet drivers: Stop timeout loops early if device is detaching. To generate a diff of this commit: cvs rdiff -u -r1.172 -r1.173 src/sys/dev/usb/if_aue.c cvs rdiff -u -r1.8 -r1.9 src/sys/dev/usb/if_mos.c cvs rdiff -u -r1.64 -r1.65 src/sys/dev/usb/if_mue.c cvs rdiff -u -r1.72 -r1.73 src/sys/dev/usb/if_smsc.c cvs rdiff -u -r1.79 -r1.80 src/sys/dev/usb/if_udav.c src/sys/dev/usb/if_url.c cvs rdiff -u -r1.41 -r1.42 src/sys/dev/usb/if_ure.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.172 src/sys/dev/usb/if_aue.c:1.173 --- src/sys/dev/usb/if_aue.c:1.172 Thu Mar 3 05:50:22 2022 +++ src/sys/dev/usb/if_aue.c Thu Mar 3 05:50:57 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: if_aue.c,v 1.172 2022/03/03 05:50:22 riastradh Exp $ */ +/* $NetBSD: if_aue.c,v 1.173 2022/03/03 05:50:57 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.172 2022/03/03 05:50:22 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_aue.c,v 1.173 2022/03/03 05:50:57 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -483,6 +483,8 @@ aue_uno_mii_read_reg(struct usbnet *un, aue_csr_write_1(sc, AUE_PHY_CTL, reg | AUE_PHYCTL_READ); for (i = 0; i < AUE_TIMEOUT; i++) { + if (usbnet_isdying(un)) + return ENXIO; if (aue_csr_read_1(sc, AUE_PHY_CTL) & AUE_PHYCTL_DONE) break; } @@ -524,6 +526,8 @@ aue_uno_mii_write_reg(struct usbnet *un, aue_csr_write_1(sc, AUE_PHY_CTL, reg | AUE_PHYCTL_WRITE); for (i = 0; i < AUE_TIMEOUT; i++) { + if (usbnet_isdying(un)) + return ENXIO; if (aue_csr_read_1(sc, AUE_PHY_CTL) & AUE_PHYCTL_DONE) break; } @@ -680,6 +684,8 @@ aue_reset(struct aue_softc *sc) AUE_SETBIT(sc, AUE_CTL1, AUE_CTL1_RESETMAC); for (i = 0; i < AUE_TIMEOUT; i++) { + if (usbnet_isdying(un)) + return; if (!(aue_csr_read_1(sc, AUE_CTL1) & AUE_CTL1_RESETMAC)) break; } Index: src/sys/dev/usb/if_mos.c diff -u src/sys/dev/usb/if_mos.c:1.8 src/sys/dev/usb/if_mos.c:1.9 --- src/sys/dev/usb/if_mos.c:1.8 Thu Mar 3 05:50:22 2022 +++ src/sys/dev/usb/if_mos.c Thu Mar 3 05:50:57 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: if_mos.c,v 1.8 2022/03/03 05:50:22 riastradh Exp $ */ +/* $NetBSD: if_mos.c,v 1.9 2022/03/03 05:50:57 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.8 2022/03/03 05:50:22 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_mos.c,v 1.9 2022/03/03 05:50:57 riastradh Exp $"); #include <sys/param.h> @@ -364,6 +364,8 @@ mos_uno_mii_read_reg(struct usbnet *un, MOS_PHYSTS_PENDING); for (i = 0; i < MOS_TIMEOUT; i++) { + if (usbnet_isdying(un)) + return ENXIO; if (mos_reg_read_1(un, MOS_PHY_STS) & MOS_PHYSTS_READY) break; } @@ -396,6 +398,8 @@ mos_uno_mii_write_reg(struct usbnet *un, MOS_PHYSTS_PENDING); for (i = 0; i < MOS_TIMEOUT; i++) { + if (usbnet_isdying(un)) + return ENXIO; if (mos_reg_read_1(un, MOS_PHY_STS) & MOS_PHYSTS_READY) break; } Index: src/sys/dev/usb/if_mue.c diff -u src/sys/dev/usb/if_mue.c:1.64 src/sys/dev/usb/if_mue.c:1.65 --- src/sys/dev/usb/if_mue.c:1.64 Thu Mar 3 05:50:22 2022 +++ src/sys/dev/usb/if_mue.c Thu Mar 3 05:50:57 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: if_mue.c,v 1.64 2022/03/03 05:50:22 riastradh Exp $ */ +/* $NetBSD: if_mue.c,v 1.65 2022/03/03 05:50:57 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.64 2022/03/03 05:50:22 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_mue.c,v 1.65 2022/03/03 05:50:57 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -200,6 +200,8 @@ mue_wait_for_bits(struct usbnet *un, uin int ntries; for (ntries = 0; ntries < 1000; ntries++) { + if (usbnet_isdying(un)) + return 1; val = mue_csr_read(un, reg); if ((val & set) || !(val & clear)) return 0; Index: src/sys/dev/usb/if_smsc.c diff -u src/sys/dev/usb/if_smsc.c:1.72 src/sys/dev/usb/if_smsc.c:1.73 --- src/sys/dev/usb/if_smsc.c:1.72 Thu Mar 3 05:50:22 2022 +++ src/sys/dev/usb/if_smsc.c Thu Mar 3 05:50:57 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: if_smsc.c,v 1.72 2022/03/03 05:50:22 riastradh Exp $ */ +/* $NetBSD: if_smsc.c,v 1.73 2022/03/03 05:50:57 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.72 2022/03/03 05:50:22 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_smsc.c,v 1.73 2022/03/03 05:50:57 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -264,6 +264,8 @@ smsc_wait_for_bits(struct usbnet *un, ui int err, i; for (i = 0; i < 100; i++) { + if (usbnet_isdying(un)) + return ENXIO; if ((err = smsc_readreg(un, reg, &val)) != 0) return err; if (!(val & bits)) Index: src/sys/dev/usb/if_udav.c diff -u src/sys/dev/usb/if_udav.c:1.79 src/sys/dev/usb/if_udav.c:1.80 --- src/sys/dev/usb/if_udav.c:1.79 Thu Mar 3 05:50:22 2022 +++ src/sys/dev/usb/if_udav.c Thu Mar 3 05:50:57 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: if_udav.c,v 1.79 2022/03/03 05:50:22 riastradh Exp $ */ +/* $NetBSD: if_udav.c,v 1.80 2022/03/03 05:50:57 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.79 2022/03/03 05:50:22 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_udav.c,v 1.80 2022/03/03 05:50:57 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -568,6 +568,8 @@ udav_chip_init(struct usbnet *un) UDAV_SETBIT(un, UDAV_NCR, UDAV_NCR_RST); for (int i = 0; i < UDAV_TX_TIMEOUT; i++) { + if (usbnet_isdying(un)) + return; if (!(udav_csr_read1(un, UDAV_NCR) & UDAV_NCR_RST)) break; delay(10); /* XXX */ Index: src/sys/dev/usb/if_url.c diff -u src/sys/dev/usb/if_url.c:1.79 src/sys/dev/usb/if_url.c:1.80 --- src/sys/dev/usb/if_url.c:1.79 Thu Mar 3 05:50:22 2022 +++ src/sys/dev/usb/if_url.c Thu Mar 3 05:50:57 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: if_url.c,v 1.79 2022/03/03 05:50:22 riastradh Exp $ */ +/* $NetBSD: if_url.c,v 1.80 2022/03/03 05:50:57 riastradh Exp $ */ /* * Copyright (c) 2001, 2002 @@ -44,7 +44,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_url.c,v 1.79 2022/03/03 05:50:22 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_url.c,v 1.80 2022/03/03 05:50:57 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -428,6 +428,8 @@ url_reset(struct usbnet *un) URL_SETBIT(un, URL_CR, URL_CR_SOFT_RST); for (i = 0; i < URL_TX_TIMEOUT; i++) { + if (usbnet_isdying(un)) + return; if (!(url_csr_read_1(un, URL_CR) & URL_CR_SOFT_RST)) break; delay(10); /* XXX */ Index: src/sys/dev/usb/if_ure.c diff -u src/sys/dev/usb/if_ure.c:1.41 src/sys/dev/usb/if_ure.c:1.42 --- src/sys/dev/usb/if_ure.c:1.41 Thu Mar 3 05:50:22 2022 +++ src/sys/dev/usb/if_ure.c Thu Mar 3 05:50:57 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: if_ure.c,v 1.41 2022/03/03 05:50:22 riastradh Exp $ */ +/* $NetBSD: if_ure.c,v 1.42 2022/03/03 05:50:57 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.41 2022/03/03 05:50:22 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_ure.c,v 1.42 2022/03/03 05:50:57 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -396,6 +396,8 @@ ure_reset(struct usbnet *un) ure_write_1(un, URE_PLA_CR, URE_MCU_TYPE_PLA, URE_CR_RST); for (i = 0; i < URE_TIMEOUT; i++) { + if (usbnet_isdying(un)) + return; if (!(ure_read_1(un, URE_PLA_CR, URE_MCU_TYPE_PLA) & URE_CR_RST)) break; @@ -541,6 +543,8 @@ ure_rtl8153_init(struct usbnet *un) URE_MCU_TYPE_USB | URE_BYTE_EN_SIX_BYTES, u1u2, sizeof(u1u2)); for (i = 0; i < URE_TIMEOUT; i++) { + if (usbnet_isdying(un)) + return; if (ure_read_2(un, URE_PLA_BOOT_CTRL, URE_MCU_TYPE_PLA) & URE_AUTOLOAD_DONE) break; @@ -550,6 +554,8 @@ ure_rtl8153_init(struct usbnet *un) URE_PRINTF(un, "timeout waiting for chip autoload\n"); for (i = 0; i < URE_TIMEOUT; i++) { + if (usbnet_isdying(un)) + return; val = ure_ocp_reg_read(un, URE_OCP_PHY_STATUS) & URE_PHY_STAT_MASK; if (val == URE_PHY_STAT_LAN_ON || val == URE_PHY_STAT_PWRDN) @@ -748,6 +754,8 @@ ure_init_fifo(struct usbnet *un) ure_read_2(un, URE_PLA_SFF_STS_7, URE_MCU_TYPE_PLA) & ~URE_MCU_BORW_EN); for (i = 0; i < URE_TIMEOUT; i++) { + if (usbnet_isdying(un)) + return; if (ure_read_1(un, URE_PLA_OOB_CTRL, URE_MCU_TYPE_PLA) & URE_LINK_LIST_READY) break; @@ -759,6 +767,8 @@ ure_init_fifo(struct usbnet *un) ure_read_2(un, URE_PLA_SFF_STS_7, URE_MCU_TYPE_PLA) | URE_RE_INIT_LL); for (i = 0; i < URE_TIMEOUT; i++) { + if (usbnet_isdying(un)) + return; if (ure_read_1(un, URE_PLA_OOB_CTRL, URE_MCU_TYPE_PLA) & URE_LINK_LIST_READY) break;