
OpenBSD 5.6 errata 1, Sep 5, 2014:  Incorrect RX ring computation
leads to panics under load with bge(4), em(4) and ix(4).

Apply patch using:
    
    signify -Vep /etc/signify/openbsd-56-base.pub -x 001_rxr.patch.sig -m - | \
        (cd /usr/src && patch -p0)

Then build and install a new kernel:

Index: sys/dev/pci/if_bge.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_bge.c,v
retrieving revision 1.358
diff -u -p -r1.358 if_bge.c
--- sys/dev/pci/if_bge.c	22 Jul 2014 13:12:11 -0000	1.358
+++ sys/dev/pci/if_bge.c	28 Aug 2014 10:51:57 -0000
@@ -1301,12 +1301,11 @@ bge_fill_rx_ring_std(struct bge_softc *s
 		if (bge_newbuf(sc, i) != 0)
 			break;
 
+		sc->bge_std = i;
 		post = 1;
 	}
 	if_rxr_put(&sc->bge_std_ring, slots);
 
-	sc->bge_std = i;
-
 	if (post)
 		bge_writembx(sc, BGE_MBX_RX_STD_PROD_LO, sc->bge_std);
 
@@ -1406,11 +1405,10 @@ bge_fill_rx_ring_jumbo(struct bge_softc 
 		if (bge_newbuf_jumbo(sc, i) != 0)
 			break;
 
+		sc->bge_jumbo = i;
 		post = 1;
 	}
 	if_rxr_put(&sc->bge_jumbo_ring, slots);
-
-	sc->bge_jumbo = i;
 
 	if (post)
 		bge_writembx(sc, BGE_MBX_RX_JUMBO_PROD_LO, sc->bge_jumbo);
Index: sys/dev/pci/if_em.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_em.c,v
retrieving revision 1.287
diff -u -p -r1.287 if_em.c
--- sys/dev/pci/if_em.c	13 Jul 2014 23:10:23 -0000	1.287
+++ sys/dev/pci/if_em.c	28 Aug 2014 10:51:57 -0000
@@ -2817,17 +2817,17 @@ em_rxfill(struct em_softc *sc)
 	i = sc->last_rx_desc_filled;
 
 	for (slots = if_rxr_get(&sc->rx_ring, sc->num_rx_desc);
-	    slots > 0; slots--) { 
+	    slots > 0; slots--) {
 		if (++i == sc->num_rx_desc)
 			i = 0;
 
 		if (em_get_buf(sc, i) != 0)
 			break;
 
+		sc->last_rx_desc_filled = i;
 		post = 1;
 	}
 
-	sc->last_rx_desc_filled = i;
 	if_rxr_put(&sc->rx_ring, slots);
 
 	return (post);
Index: sys/dev/pci/if_ix.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_ix.c,v
retrieving revision 1.96
diff -u -p -r1.96 if_ix.c
--- sys/dev/pci/if_ix.c	13 Jul 2014 23:10:23 -0000	1.96
+++ sys/dev/pci/if_ix.c	28 Aug 2014 10:51:59 -0000
@@ -2564,11 +2564,11 @@ ixgbe_rxfill(struct rx_ring *rxr)
 		if (ixgbe_get_buf(rxr, i) != 0)
 			break;
 
+		rxr->last_desc_filled = i;
 		post = 1;
 	}
-	if_rxr_put(&rxr->rx_ring, slots);
 
-	rxr->last_desc_filled = i;
+	if_rxr_put(&rxr->rx_ring, slots);
 
 	return (post);
 }
