Lines Matching refs:fl
260 static inline unsigned int fl_cap(const struct sge_fl *fl) in fl_cap() argument
262 return fl->size - FL_PER_EQ_UNIT; in fl_cap()
273 static inline bool fl_starving(const struct sge_fl *fl) in fl_starving() argument
275 return fl->avail - fl->pend_cred <= FL_STARVE_THRES; in fl_starving()
479 static void free_rx_bufs(struct adapter *adapter, struct sge_fl *fl, int n) in free_rx_bufs() argument
482 struct rx_sw_desc *sdesc = &fl->sdesc[fl->cidx]; in free_rx_bufs()
489 if (++fl->cidx == fl->size) in free_rx_bufs()
490 fl->cidx = 0; in free_rx_bufs()
491 fl->avail--; in free_rx_bufs()
508 static void unmap_rx_buf(struct adapter *adapter, struct sge_fl *fl) in unmap_rx_buf() argument
510 struct rx_sw_desc *sdesc = &fl->sdesc[fl->cidx]; in unmap_rx_buf()
516 if (++fl->cidx == fl->size) in unmap_rx_buf()
517 fl->cidx = 0; in unmap_rx_buf()
518 fl->avail--; in unmap_rx_buf()
529 static inline void ring_fl_db(struct adapter *adapter, struct sge_fl *fl) in ring_fl_db() argument
538 if (fl->pend_cred >= FL_PER_EQ_UNIT) { in ring_fl_db()
539 val = PIDX(fl->pend_cred / FL_PER_EQ_UNIT); in ring_fl_db()
545 QID(fl->cntxt_id) | val); in ring_fl_db()
546 fl->pend_cred %= FL_PER_EQ_UNIT; in ring_fl_db()
589 static unsigned int refill_fl(struct adapter *adapter, struct sge_fl *fl, in refill_fl() argument
594 unsigned int cred = fl->avail; in refill_fl()
595 __be64 *d = &fl->desc[fl->pidx]; in refill_fl()
596 struct rx_sw_desc *sdesc = &fl->sdesc[fl->pidx]; in refill_fl()
603 BUG_ON(fl->avail + n > fl->size - FL_PER_EQ_UNIT); in refill_fl()
623 fl->large_alloc_failed++; in refill_fl()
649 fl->avail++; in refill_fl()
650 if (++fl->pidx == fl->size) { in refill_fl()
651 fl->pidx = 0; in refill_fl()
652 sdesc = fl->sdesc; in refill_fl()
653 d = fl->desc; in refill_fl()
662 fl->alloc_failed++; in refill_fl()
678 fl->avail++; in refill_fl()
679 if (++fl->pidx == fl->size) { in refill_fl()
680 fl->pidx = 0; in refill_fl()
681 sdesc = fl->sdesc; in refill_fl()
682 d = fl->desc; in refill_fl()
692 cred = fl->avail - cred; in refill_fl()
693 fl->pend_cred += cred; in refill_fl()
694 ring_fl_db(adapter, fl); in refill_fl()
696 if (unlikely(fl_starving(fl))) { in refill_fl()
698 set_bit(fl->cntxt_id, adapter->sge.starving_fl); in refill_fl()
708 static inline void __refill_fl(struct adapter *adapter, struct sge_fl *fl) in __refill_fl() argument
710 refill_fl(adapter, fl, in __refill_fl()
711 min((unsigned int)MAX_RX_REFILL, fl_cap(fl) - fl->avail), in __refill_fl()
1597 static void restore_rx_bufs(const struct pkt_gl *gl, struct sge_fl *fl, in restore_rx_bufs() argument
1603 if (fl->cidx == 0) in restore_rx_bufs()
1604 fl->cidx = fl->size - 1; in restore_rx_bufs()
1606 fl->cidx--; in restore_rx_bufs()
1607 sdesc = &fl->sdesc[fl->cidx]; in restore_rx_bufs()
1610 fl->avail++; in restore_rx_bufs()
1680 free_rx_bufs(rspq->adapter, &rxq->fl, in process_responses()
1693 BUG_ON(rxq->fl.avail == 0); in process_responses()
1694 sdesc = &rxq->fl.sdesc[rxq->fl.cidx]; in process_responses()
1702 unmap_rx_buf(rspq->adapter, &rxq->fl); in process_responses()
1726 restore_rx_bufs(&gl, &rxq->fl, frag); in process_responses()
1756 rxq->fl.size - rxq->fl.avail >= 2*FL_PER_EQ_UNIT) in process_responses()
1757 __refill_fl(rspq->adapter, &rxq->fl); in process_responses()
1950 struct sge_fl *fl = s->egr_map[id]; in sge_rx_timer_cb() local
1961 if (fl_starving(fl)) { in sge_rx_timer_cb()
1964 rxq = container_of(fl, struct sge_eth_rxq, fl); in sge_rx_timer_cb()
1966 fl->starving++; in sge_rx_timer_cb()
2043 struct sge_fl *fl, rspq_handler_t hnd) in t4vf_sge_alloc_rxq() argument
2105 if (fl) { in t4vf_sge_alloc_rxq()
2112 fl->size = roundup(fl->size, FL_PER_EQ_UNIT); in t4vf_sge_alloc_rxq()
2113 fl->desc = alloc_ring(adapter->pdev_dev, fl->size, in t4vf_sge_alloc_rxq()
2115 &fl->addr, &fl->sdesc, STAT_LEN); in t4vf_sge_alloc_rxq()
2116 if (!fl->desc) { in t4vf_sge_alloc_rxq()
2126 flsz = (fl->size / FL_PER_EQ_UNIT + in t4vf_sge_alloc_rxq()
2143 cmd.fl0addr = cpu_to_be64(fl->addr); in t4vf_sge_alloc_rxq()
2167 rspq->offset = fl ? 0 : -1; in t4vf_sge_alloc_rxq()
2169 if (fl) { in t4vf_sge_alloc_rxq()
2170 fl->cntxt_id = be16_to_cpu(rpl.fl0id); in t4vf_sge_alloc_rxq()
2171 fl->avail = 0; in t4vf_sge_alloc_rxq()
2172 fl->pend_cred = 0; in t4vf_sge_alloc_rxq()
2173 fl->pidx = 0; in t4vf_sge_alloc_rxq()
2174 fl->cidx = 0; in t4vf_sge_alloc_rxq()
2175 fl->alloc_failed = 0; in t4vf_sge_alloc_rxq()
2176 fl->large_alloc_failed = 0; in t4vf_sge_alloc_rxq()
2177 fl->starving = 0; in t4vf_sge_alloc_rxq()
2178 refill_fl(adapter, fl, fl_cap(fl), GFP_KERNEL); in t4vf_sge_alloc_rxq()
2193 if (fl && fl->desc) { in t4vf_sge_alloc_rxq()
2194 kfree(fl->sdesc); in t4vf_sge_alloc_rxq()
2195 fl->sdesc = NULL; in t4vf_sge_alloc_rxq()
2197 fl->desc, fl->addr); in t4vf_sge_alloc_rxq()
2198 fl->desc = NULL; in t4vf_sge_alloc_rxq()
2317 struct sge_fl *fl) in free_rspq_fl() argument
2319 unsigned int flid = fl ? fl->cntxt_id : 0xffff; in free_rspq_fl()
2331 if (fl) { in free_rspq_fl()
2332 free_rx_bufs(adapter, fl, fl->avail); in free_rspq_fl()
2334 fl->size * sizeof(*fl->desc) + STAT_LEN, in free_rspq_fl()
2335 fl->desc, fl->addr); in free_rspq_fl()
2336 kfree(fl->sdesc); in free_rspq_fl()
2337 fl->sdesc = NULL; in free_rspq_fl()
2338 fl->cntxt_id = 0; in free_rspq_fl()
2339 fl->desc = NULL; in free_rspq_fl()
2360 free_rspq_fl(adapter, &rxq->rspq, &rxq->fl); in t4vf_free_sge_resources()