Fix a bug in the "spurious rx interupt" detection: don't copy the spurious
buffer out of the hardware (it is invalid!). This fixes hangups due to spurious rx interupts. XXX Maybe I should completely reset the hardware in this case?
This commit is contained in:
parent
59b7590636
commit
b39e54485e
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: if_bah.c,v 1.22 1996/10/13 03:07:14 christos Exp $ */
|
||||
/* $NetBSD: if_bah.c,v 1.23 1996/11/18 08:49:30 is Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Ignatios Souvatzis
|
||||
|
@ -1094,14 +1094,15 @@ bahintr(arg)
|
|||
sc->sc_dev.dv_xname);
|
||||
/*
|
||||
* restart receiver on same buffer.
|
||||
* XXX maybe better reset interface?
|
||||
*/
|
||||
sc->sc_base->command = ARC_RXBC(buffer);
|
||||
|
||||
} else if (++sc->sc_rx_fillcount > 1) {
|
||||
} else {
|
||||
if (++sc->sc_rx_fillcount > 1) {
|
||||
sc->sc_intmask &= ~ARC_RI;
|
||||
sc->sc_base->status = sc->sc_intmask;
|
||||
} else {
|
||||
|
||||
buffer ^= 1;
|
||||
sc->sc_rx_act = buffer;
|
||||
|
||||
|
@ -1110,10 +1111,10 @@ bahintr(arg)
|
|||
* This also clears the RI interupt flag.
|
||||
*/
|
||||
sc->sc_base->command = ARC_RXBC(buffer);
|
||||
/* we are in the RX intr, so mask is ok for RX */
|
||||
/* in the RX intr, so mask is ok for RX */
|
||||
|
||||
#ifdef BAH_DEBUG
|
||||
printf("%s: started rx for buffer %ld, status 0x%02x\n",
|
||||
printf("%s: strtd rx buf %ld, stat 0x%02x\n",
|
||||
sc->sc_dev.dv_xname, sc->sc_rx_act,
|
||||
sc->sc_base->status);
|
||||
#endif
|
||||
|
@ -1127,6 +1128,7 @@ bahintr(arg)
|
|||
bah_srint(sc,NULL);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
if (maskedisr & ARC_TA)
|
||||
bah_tint(sc, isr);
|
||||
|
|
Loading…
Reference in New Issue