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);