Lines Matching refs:fl
247 static inline unsigned int fl_cap(const struct sge_fl *fl) in fl_cap() argument
249 return fl->size - FL_PER_EQ_UNIT; in fl_cap()
262 const struct sge_fl *fl) in fl_starving() argument
266 return fl->avail - fl->pend_cred <= s->fl_starve_thres; in fl_starving()
473 static void free_rx_bufs(struct adapter *adapter, struct sge_fl *fl, int n) in free_rx_bufs() argument
476 struct rx_sw_desc *sdesc = &fl->sdesc[fl->cidx]; in free_rx_bufs()
484 if (++fl->cidx == fl->size) in free_rx_bufs()
485 fl->cidx = 0; in free_rx_bufs()
486 fl->avail--; in free_rx_bufs()
503 static void unmap_rx_buf(struct adapter *adapter, struct sge_fl *fl) in unmap_rx_buf() argument
505 struct rx_sw_desc *sdesc = &fl->sdesc[fl->cidx]; in unmap_rx_buf()
512 if (++fl->cidx == fl->size) in unmap_rx_buf()
513 fl->cidx = 0; in unmap_rx_buf()
514 fl->avail--; in unmap_rx_buf()
525 static inline void ring_fl_db(struct adapter *adapter, struct sge_fl *fl) in ring_fl_db() argument
533 if (fl->pend_cred >= FL_PER_EQ_UNIT) { in ring_fl_db()
535 val = PIDX_V(fl->pend_cred / FL_PER_EQ_UNIT); in ring_fl_db()
537 val = PIDX_T5_V(fl->pend_cred / FL_PER_EQ_UNIT) | in ring_fl_db()
550 if (unlikely(fl->bar2_addr == NULL)) { in ring_fl_db()
553 QID_V(fl->cntxt_id) | val); in ring_fl_db()
555 writel(val | QID_V(fl->bar2_qid), in ring_fl_db()
556 fl->bar2_addr + SGE_UDB_KDOORBELL); in ring_fl_db()
563 fl->pend_cred %= FL_PER_EQ_UNIT; in ring_fl_db()
606 static unsigned int refill_fl(struct adapter *adapter, struct sge_fl *fl, in refill_fl() argument
612 unsigned int cred = fl->avail; in refill_fl()
613 __be64 *d = &fl->desc[fl->pidx]; in refill_fl()
614 struct rx_sw_desc *sdesc = &fl->sdesc[fl->pidx]; in refill_fl()
621 BUG_ON(fl->avail + n > fl->size - FL_PER_EQ_UNIT); in refill_fl()
642 fl->large_alloc_failed++; in refill_fl()
668 fl->avail++; in refill_fl()
669 if (++fl->pidx == fl->size) { in refill_fl()
670 fl->pidx = 0; in refill_fl()
671 sdesc = fl->sdesc; in refill_fl()
672 d = fl->desc; in refill_fl()
681 fl->alloc_failed++; in refill_fl()
697 fl->avail++; in refill_fl()
698 if (++fl->pidx == fl->size) { in refill_fl()
699 fl->pidx = 0; in refill_fl()
700 sdesc = fl->sdesc; in refill_fl()
701 d = fl->desc; in refill_fl()
711 cred = fl->avail - cred; in refill_fl()
712 fl->pend_cred += cred; in refill_fl()
713 ring_fl_db(adapter, fl); in refill_fl()
715 if (unlikely(fl_starving(adapter, fl))) { in refill_fl()
717 set_bit(fl->cntxt_id, adapter->sge.starving_fl); in refill_fl()
727 static inline void __refill_fl(struct adapter *adapter, struct sge_fl *fl) in __refill_fl() argument
729 refill_fl(adapter, fl, in __refill_fl()
730 min((unsigned int)MAX_RX_REFILL, fl_cap(fl) - fl->avail), in __refill_fl()
1689 static void restore_rx_bufs(const struct pkt_gl *gl, struct sge_fl *fl, in restore_rx_bufs() argument
1695 if (fl->cidx == 0) in restore_rx_bufs()
1696 fl->cidx = fl->size - 1; in restore_rx_bufs()
1698 fl->cidx--; in restore_rx_bufs()
1699 sdesc = &fl->sdesc[fl->cidx]; in restore_rx_bufs()
1702 fl->avail++; in restore_rx_bufs()
1774 free_rx_bufs(rspq->adapter, &rxq->fl, in process_responses()
1787 BUG_ON(rxq->fl.avail == 0); in process_responses()
1788 sdesc = &rxq->fl.sdesc[rxq->fl.cidx]; in process_responses()
1796 unmap_rx_buf(rspq->adapter, &rxq->fl); in process_responses()
1820 restore_rx_bufs(&gl, &rxq->fl, frag); in process_responses()
1850 rxq->fl.size - rxq->fl.avail >= 2*FL_PER_EQ_UNIT) in process_responses()
1851 __refill_fl(rspq->adapter, &rxq->fl); in process_responses()
2056 struct sge_fl *fl = s->egr_map[id]; in sge_rx_timer_cb() local
2067 if (fl_starving(adapter, fl)) { in sge_rx_timer_cb()
2070 rxq = container_of(fl, struct sge_eth_rxq, fl); in sge_rx_timer_cb()
2072 fl->starving++; in sge_rx_timer_cb()
2178 struct sge_fl *fl, rspq_handler_t hnd) in t4vf_sge_alloc_rxq() argument
2241 if (fl) { in t4vf_sge_alloc_rxq()
2248 fl->size = roundup(fl->size, FL_PER_EQ_UNIT); in t4vf_sge_alloc_rxq()
2249 fl->desc = alloc_ring(adapter->pdev_dev, fl->size, in t4vf_sge_alloc_rxq()
2251 &fl->addr, &fl->sdesc, s->stat_len); in t4vf_sge_alloc_rxq()
2252 if (!fl->desc) { in t4vf_sge_alloc_rxq()
2262 flsz = (fl->size / FL_PER_EQ_UNIT + in t4vf_sge_alloc_rxq()
2279 cmd.fl0addr = cpu_to_be64(fl->addr); in t4vf_sge_alloc_rxq()
2307 rspq->offset = fl ? 0 : -1; in t4vf_sge_alloc_rxq()
2309 if (fl) { in t4vf_sge_alloc_rxq()
2310 fl->cntxt_id = be16_to_cpu(rpl.fl0id); in t4vf_sge_alloc_rxq()
2311 fl->avail = 0; in t4vf_sge_alloc_rxq()
2312 fl->pend_cred = 0; in t4vf_sge_alloc_rxq()
2313 fl->pidx = 0; in t4vf_sge_alloc_rxq()
2314 fl->cidx = 0; in t4vf_sge_alloc_rxq()
2315 fl->alloc_failed = 0; in t4vf_sge_alloc_rxq()
2316 fl->large_alloc_failed = 0; in t4vf_sge_alloc_rxq()
2317 fl->starving = 0; in t4vf_sge_alloc_rxq()
2322 fl->bar2_addr = bar2_address(adapter, in t4vf_sge_alloc_rxq()
2323 fl->cntxt_id, in t4vf_sge_alloc_rxq()
2325 &fl->bar2_qid); in t4vf_sge_alloc_rxq()
2327 refill_fl(adapter, fl, fl_cap(fl), GFP_KERNEL); in t4vf_sge_alloc_rxq()
2342 if (fl && fl->desc) { in t4vf_sge_alloc_rxq()
2343 kfree(fl->sdesc); in t4vf_sge_alloc_rxq()
2344 fl->sdesc = NULL; in t4vf_sge_alloc_rxq()
2346 fl->desc, fl->addr); in t4vf_sge_alloc_rxq()
2347 fl->desc = NULL; in t4vf_sge_alloc_rxq()
2475 struct sge_fl *fl) in free_rspq_fl() argument
2478 unsigned int flid = fl ? fl->cntxt_id : 0xffff; in free_rspq_fl()
2490 if (fl) { in free_rspq_fl()
2491 free_rx_bufs(adapter, fl, fl->avail); in free_rspq_fl()
2493 fl->size * sizeof(*fl->desc) + s->stat_len, in free_rspq_fl()
2494 fl->desc, fl->addr); in free_rspq_fl()
2495 kfree(fl->sdesc); in free_rspq_fl()
2496 fl->sdesc = NULL; in free_rspq_fl()
2497 fl->cntxt_id = 0; in free_rspq_fl()
2498 fl->desc = NULL; in free_rspq_fl()
2519 free_rspq_fl(adapter, &rxq->rspq, &rxq->fl); in t4vf_free_sge_resources()