On Sun, Mar 29, 2020 at 01:15:37PM +0100, Raf Czlonka wrote:
> >Synopsis: "splassert: ieee80211_free_node: want 7 have 4" followed by
> >"zyd0: device timeout"
> >Category: kernel
> >Environment:
> System : OpenBSD 6.6
> Details : OpenBSD 6.6-current (GENERIC.MP) #86: Sat Mar 28 14:42:23
> MDT 2020
>
> [email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
>
> Architecture: OpenBSD.amd64
> Machine : amd64
> >Description:
> After booting with a zyd(4) USB NIC, I see these lines
> in dmesg(8):
>
> splassert: ieee80211_free_node: want 7 have 4
>
> Under a heavy-ish load (a web browser with multiple tabs
> open + streaming video), the device times out:
>
> zyd0: device timeout
> zyd0: could not transmit buffer: TIMEOUT
>
> and I can't reset it even with:
>
> # sh /etc/netstart zyd0
>
> A reboot is necessary.
Can you show 'ifconfig zyd0' when it is in this state?
The interface is marked as OACTIVE, correct?
What happens here if you run: ifconfig zyd0 down
Instead of running netstart which does one hundred and one things?
> When I unplugged the NIC at that point, I got a panic:
>
> panic: Data modified on freelist: word 10 of object
> 0xffff80000099a000 size 0x2000 previous type devbuf (0xdead410f != 0xdead4110)
>
This might prevent the panic (compile-tested only).
diff 9d8a60ff1dae84d5c890bdc5040be018a3bdd3dc /usr/src
blob - 61dc357bf69a56d1ce282d505eecd343b0eb2465
file + sys/dev/usb/if_zyd.c
--- sys/dev/usb/if_zyd.c
+++ sys/dev/usb/if_zyd.c
@@ -2216,6 +2216,7 @@ zyd_tx(struct zyd_softc *sc, struct mbuf *m, struct ie
ZYD_TX_TIMEOUT, zyd_txeof);
error = usbd_transfer(data->xfer);
if (error != USBD_IN_PROGRESS && error != 0) {
+ data->ni = NULL;
ifp->if_oerrors++;
return EIO;
}