arge: ensure there's enough space in the TX ring before attempting to
send frames. This matches the other check for space. "enough" is a misnomer, for "reasons". The biggest reason is that the TX ring is actually a circular linked list, with no head/tail pointers. This is just a bit more headroom between head/tail so we have time to schedule frames before we hit where the hardware is at. Ideally this would be tunable and a little larger.
This commit is contained in:
parent
3b8a3b85eb
commit
47ed24efe2
@ -1501,7 +1501,7 @@ arge_encap(struct arge_softc *sc, struct mbuf **m_head)
|
||||
}
|
||||
|
||||
/* Check number of available descriptors. */
|
||||
if (sc->arge_cdata.arge_tx_cnt + nsegs >= (ARGE_TX_RING_COUNT - 1)) {
|
||||
if (sc->arge_cdata.arge_tx_cnt + nsegs >= (ARGE_TX_RING_COUNT - 2)) {
|
||||
bus_dmamap_unload(sc->arge_cdata.arge_tx_tag, txd->tx_dmamap);
|
||||
sc->stats.tx_pkts_nosegs++;
|
||||
return (ENOBUFS);
|
||||
|
Loading…
x
Reference in New Issue
Block a user