Commit c098b026 authored by Hariprasad Shenai's avatar Hariprasad Shenai Committed by David S. Miller

cxgb4: Freelist starving threshold varies from adapter to adapter

fl_starv_thres could be different from adapter to adapter, don't use
hardcoded values
Signed-off-by: default avatarHariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 21dcfad6
...@@ -120,12 +120,6 @@ ...@@ -120,12 +120,6 @@
*/ */
#define NOMEM_TMR_IDX (SGE_NTIMERS - 1) #define NOMEM_TMR_IDX (SGE_NTIMERS - 1)
/*
* An FL with <= FL_STARVE_THRES buffers is starving and a periodic timer will
* attempt to refill it.
*/
#define FL_STARVE_THRES 4
/* /*
* Suspend an Ethernet Tx queue with fewer available descriptors than this. * Suspend an Ethernet Tx queue with fewer available descriptors than this.
* This is the same as calc_tx_descs() for a TSO packet with * This is the same as calc_tx_descs() for a TSO packet with
...@@ -248,9 +242,21 @@ static inline unsigned int fl_cap(const struct sge_fl *fl) ...@@ -248,9 +242,21 @@ static inline unsigned int fl_cap(const struct sge_fl *fl)
return fl->size - 8; /* 1 descriptor = 8 buffers */ return fl->size - 8; /* 1 descriptor = 8 buffers */
} }
static inline bool fl_starving(const struct sge_fl *fl) /**
* fl_starving - return whether a Free List is starving.
* @adapter: pointer to the adapter
* @fl: the Free List
*
* Tests specified Free List to see whether the number of buffers
* available to the hardware has falled below our "starvation"
* threshold.
*/
static inline bool fl_starving(const struct adapter *adapter,
const struct sge_fl *fl)
{ {
return fl->avail - fl->pend_cred <= FL_STARVE_THRES; const struct sge *s = &adapter->sge;
return fl->avail - fl->pend_cred <= s->fl_starve_thres;
} }
static int map_skb(struct device *dev, const struct sk_buff *skb, static int map_skb(struct device *dev, const struct sk_buff *skb,
...@@ -655,7 +661,7 @@ out: cred = q->avail - cred; ...@@ -655,7 +661,7 @@ out: cred = q->avail - cred;
q->pend_cred += cred; q->pend_cred += cred;
ring_fl_db(adap, q); ring_fl_db(adap, q);
if (unlikely(fl_starving(q))) { if (unlikely(fl_starving(adap, q))) {
smp_wmb(); smp_wmb();
set_bit(q->cntxt_id - adap->sge.egr_start, set_bit(q->cntxt_id - adap->sge.egr_start,
adap->sge.starving_fl); adap->sge.starving_fl);
...@@ -2248,7 +2254,7 @@ static void sge_rx_timer_cb(unsigned long data) ...@@ -2248,7 +2254,7 @@ static void sge_rx_timer_cb(unsigned long data)
clear_bit(id, s->starving_fl); clear_bit(id, s->starving_fl);
smp_mb__after_atomic(); smp_mb__after_atomic();
if (fl_starving(fl)) { if (fl_starving(adap, fl)) {
rxq = container_of(fl, struct sge_eth_rxq, fl); rxq = container_of(fl, struct sge_eth_rxq, fl);
if (napi_reschedule(&rxq->rspq.napi)) if (napi_reschedule(&rxq->rspq.napi))
fl->starving++; fl->starving++;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment