Consider the total number of descriptors available (and not just those

that are ready to be reclaimed) when deciding whether to resume tx after
a stall.

MFC after:	3 days
This commit is contained in:
Navdeep Parhar 2014-06-20 20:28:46 +00:00
parent 2f4c57fbe9
commit 0835ddc766
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=267689

View file

@ -1771,7 +1771,7 @@ t4_wrq_tx_locked(struct adapter *sc, struct sge_wrq *wrq, struct wrqe *wr)
can_reclaim = reclaimable(eq);
if (__predict_false(eq->flags & EQ_STALLED)) {
if (can_reclaim < tx_resume_threshold(eq))
if (eq->avail + can_reclaim < tx_resume_threshold(eq))
return;
eq->flags &= ~EQ_STALLED;
eq->unstalled++;
@ -1892,7 +1892,7 @@ t4_eth_tx(struct ifnet *ifp, struct sge_txq *txq, struct mbuf *m)
can_reclaim = reclaimable(eq);
if (__predict_false(eq->flags & EQ_STALLED)) {
if (can_reclaim < tx_resume_threshold(eq)) {
if (eq->avail + can_reclaim < tx_resume_threshold(eq)) {
txq->m = m;
return (0);
}
@ -2066,7 +2066,8 @@ t4_update_fl_bufsize(struct ifnet *ifp)
int
can_resume_tx(struct sge_eq *eq)
{
return (reclaimable(eq) >= tx_resume_threshold(eq));
return (eq->avail + reclaimable(eq) >= tx_resume_threshold(eq));
}
static inline void