Here's an attempt to fix a potential MCLGETI issue with vr(4) similar
to what I recently fixed fro re(4).  Unfortunately I don't have any
vr(4) hardware myself, so I need some hep testing this.

Things to look for are:

1. Does this diff have any effect on throughput (packets/s, bits/s).

2. Does this fix any problems with the interface if you blast it with
   packets?

3. Does livelock mitigation actualy work?

Thanks,

Mark

Index: if_vr.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_vr.c,v
retrieving revision 1.106
diff -u -p -r1.106 if_vr.c
--- if_vr.c     3 Sep 2010 18:14:54 -0000       1.106
+++ if_vr.c     5 Dec 2010 15:36:37 -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) ||

Reply via email to