running with this seems to help.

Index: if_vr.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_vr.c,v
retrieving revision 1.105
diff -u -p -r1.105 if_vr.c
--- if_vr.c     19 May 2010 15:27:35 -0000      1.105
+++ if_vr.c     31 Aug 2010 21:30:22 -0000
@@ -731,7 +731,7 @@ vr_list_rx_init(struct vr_softc *sc)
 {
        struct vr_chain_data    *cd;
        struct vr_list_data     *ld;
-       struct vr_desc          *d;
+       volatile struct vr_desc *d;
        int                      i, nexti;
 
        cd = &sc->vr_cdata;
@@ -744,7 +744,7 @@ vr_list_rx_init(struct vr_softc *sc)
                        return (ENOBUFS);
 
                d = (struct vr_desc *)&ld->vr_rx_list[i];
-               cd->vr_rx_chain[i].vr_ptr = d;
+               cd->vr_rx_chain[i].vr_ptr = (struct vr_desc *)d;
                cd->vr_rx_chain[i].vr_paddr =
                    sc->sc_listmap->dm_segs[0].ds_addr +
                    offsetof(struct vr_list_data, vr_rx_list[i]);
@@ -1136,7 +1136,7 @@ vr_intr(void *arg)
 int
 vr_encap(struct vr_softc *sc, struct vr_chain *c, struct mbuf *m_head)
 {
-       struct vr_desc          *f = NULL;
+       volatile struct vr_desc *f = NULL;
        struct mbuf             *m_new = NULL;
        u_int32_t               vr_flags = 0, vr_status = 0;
 
@@ -1536,8 +1536,8 @@ vr_stop(struct vr_softc *sc)
 int
 vr_alloc_mbuf(struct vr_softc *sc, struct vr_chain_onefrag *r)
 {
-       struct vr_desc  *d;
-       struct mbuf     *m;
+       volatile struct vr_desc *d;
+       struct mbuf             *m;
 
        if (r == NULL)
                return (EINVAL);

Reply via email to