On 2011/01/21 11:16, Markus Hennecke wrote:
> Am 21.01.2011 10:42, schrieb Stuart Henderson:
> >On 2011-01-21, Markus Hennecke<[email protected]> wrote:
> >>
> >>There was a well known bug that would cause vr devices to stop receiving
> >>and sending traffic if a short cable was used to connect to the switch
> >
> >you're thinking of sis(4) for the short cable problem.
> >
> >there was a problem with VT6105M with vr(4) fixed 2009/04/28
> >where some link-state changes caused the nic to wedge.
>
> Ah, thanks for that information. I meant the latter but did not have
> all the facts available (I think the first time this got meantioned
> on the list was in 2007 in the thread "vr driver trouble on Soekris
> 5501").
>
> >there was also a problem with the MCLGETI code (added on 2009/06/18)
> >where high packet rates (or possibly a busy machine) caused the
> >nic to wedge. a fix for this was committed recently (2011/01/13).
>
> Looks like I am seeing this on my box here from time to time. Thanks
> for the information.
This diff should apply to -stable.
Index: if_vr.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_vr.c,v
retrieving revision 1.105.2.1
diff -u -p -r1.105.2.1 if_vr.c
--- if_vr.c 2 Oct 2010 03:00:52 -0000 1.105.2.1
+++ if_vr.c 21 Jan 2011 10:28:49 -0000
@@ -1048,15 +1048,11 @@ vr_intr(void *arg)
/* Disable interrupts. */
CSR_WRITE_2(sc, VR_IMR, 0x0000);
- for (;;) {
-
- status = CSR_READ_2(sc, VR_ISR);
- if (status)
- CSR_WRITE_2(sc, VR_ISR, status);
-
- if ((status & VR_INTRS) == 0)
- break;
+ status = CSR_READ_2(sc, VR_ISR);
+ if (status)
+ CSR_WRITE_2(sc, VR_ISR, status);
+ if (status & VR_INTRS) {
claimed = 1;
if (status & VR_ISR_RX_OK)
@@ -1092,7 +1088,7 @@ vr_intr(void *arg)
sc->sc_dev.dv_xname);
vr_reset(sc);
vr_init(sc);
- break;
+ status = 0;
}
if ((status & VR_ISR_TX_OK) || (status & VR_ISR_TX_ABRT) ||