Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F163421642
D5725.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
11 KB
Referenced Files
None
Subscribers
None
D5725.id.diff
View Options
Index: head/sys/dev/cxgb/cxgb_sge.c
===================================================================
--- head/sys/dev/cxgb/cxgb_sge.c
+++ head/sys/dev/cxgb/cxgb_sge.c
@@ -2976,11 +2976,7 @@
#if defined(INET6) || defined(INET)
/* Flush LRO */
- while (!SLIST_EMPTY(&lro_ctrl->lro_active)) {
- struct lro_entry *queued = SLIST_FIRST(&lro_ctrl->lro_active);
- SLIST_REMOVE_HEAD(&lro_ctrl->lro_active, next);
- tcp_lro_flush(lro_ctrl, queued);
- }
+ tcp_lro_flush_all(lro_ctrl);
#endif
if (sleeping)
Index: head/sys/dev/cxgbe/t4_sge.c
===================================================================
--- head/sys/dev/cxgbe/t4_sge.c
+++ head/sys/dev/cxgbe/t4_sge.c
@@ -1397,13 +1397,8 @@
#if defined(INET) || defined(INET6)
if (iq->flags & IQ_LRO_ENABLED) {
struct lro_ctrl *lro = &rxq->lro;
- struct lro_entry *l;
- while (!SLIST_EMPTY(&lro->lro_active)) {
- l = SLIST_FIRST(&lro->lro_active);
- SLIST_REMOVE_HEAD(&lro->lro_active, next);
- tcp_lro_flush(lro, l);
- }
+ tcp_lro_flush_all(lro);
}
#endif
Index: head/sys/dev/e1000/if_igb.c
===================================================================
--- head/sys/dev/e1000/if_igb.c
+++ head/sys/dev/e1000/if_igb.c
@@ -4974,7 +4974,6 @@
struct rx_ring *rxr = que->rxr;
struct ifnet *ifp = adapter->ifp;
struct lro_ctrl *lro = &rxr->lro;
- struct lro_entry *queued;
int i, processed = 0, rxdone = 0;
u32 ptype, staterr = 0;
union e1000_adv_rx_desc *cur;
@@ -5202,10 +5201,7 @@
/*
* Flush any outstanding LRO work
*/
- while ((queued = SLIST_FIRST(&lro->lro_active)) != NULL) {
- SLIST_REMOVE_HEAD(&lro->lro_active, next);
- tcp_lro_flush(lro, queued);
- }
+ tcp_lro_flush_all(lro);
if (done != NULL)
*done += rxdone;
Index: head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
===================================================================
--- head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
+++ head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
@@ -778,13 +778,8 @@
struct hn_tx_ring *txr = chan->hv_chan_txr;
#if defined(INET) || defined(INET6)
struct hn_rx_ring *rxr = chan->hv_chan_rxr;
- struct lro_ctrl *lro = &rxr->hn_lro;
- struct lro_entry *queued;
- while ((queued = SLIST_FIRST(&lro->lro_active)) != NULL) {
- SLIST_REMOVE_HEAD(&lro->lro_active, next);
- tcp_lro_flush(lro, queued);
- }
+ tcp_lro_flush_all(&rxr->hn_lro);
#endif
/*
Index: head/sys/dev/ixgbe/ix_txrx.c
===================================================================
--- head/sys/dev/ixgbe/ix_txrx.c
+++ head/sys/dev/ixgbe/ix_txrx.c
@@ -1753,7 +1753,6 @@
struct rx_ring *rxr = que->rxr;
struct ifnet *ifp = adapter->ifp;
struct lro_ctrl *lro = &rxr->lro;
- struct lro_entry *queued;
int i, nextp, processed = 0;
u32 staterr = 0;
u32 count = adapter->rx_process_limit;
@@ -2003,10 +2002,7 @@
/*
* Flush any outstanding LRO work
*/
- while ((queued = SLIST_FIRST(&lro->lro_active)) != NULL) {
- SLIST_REMOVE_HEAD(&lro->lro_active, next);
- tcp_lro_flush(lro, queued);
- }
+ tcp_lro_flush_all(lro);
IXGBE_RX_UNLOCK(rxr);
Index: head/sys/dev/ixl/ixl_txrx.c
===================================================================
--- head/sys/dev/ixl/ixl_txrx.c
+++ head/sys/dev/ixl/ixl_txrx.c
@@ -1511,7 +1511,6 @@
struct ifnet *ifp = vsi->ifp;
#if defined(INET6) || defined(INET)
struct lro_ctrl *lro = &rxr->lro;
- struct lro_entry *queued;
#endif
int i, nextp, processed = 0;
union i40e_rx_desc *cur;
@@ -1735,10 +1734,7 @@
/*
* Flush any outstanding LRO work
*/
- while ((queued = SLIST_FIRST(&lro->lro_active)) != NULL) {
- SLIST_REMOVE_HEAD(&lro->lro_active, next);
- tcp_lro_flush(lro, queued);
- }
+ tcp_lro_flush_all(lro);
#endif
IXL_RX_UNLOCK(rxr);
Index: head/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
===================================================================
--- head/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
+++ head/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
@@ -322,9 +322,6 @@
static int
mlx5e_poll_rx_cq(struct mlx5e_rq *rq, int budget)
{
-#ifndef HAVE_TURBO_LRO
- struct lro_entry *queued;
-#endif
int i;
for (i = 0; i < budget; i++) {
@@ -399,10 +396,7 @@
/* ensure cq space is freed before enabling more cqes */
wmb();
#ifndef HAVE_TURBO_LRO
- while ((queued = SLIST_FIRST(&rq->lro.lro_active)) != NULL) {
- SLIST_REMOVE_HEAD(&rq->lro.lro_active, next);
- tcp_lro_flush(&rq->lro, queued);
- }
+ tcp_lro_flush_all(&rq->lro);
#endif
return (i);
}
Index: head/sys/dev/mxge/if_mxge.c
===================================================================
--- head/sys/dev/mxge/if_mxge.c
+++ head/sys/dev/mxge/if_mxge.c
@@ -2819,11 +2819,7 @@
break;
}
#if defined(INET) || defined (INET6)
- while (!SLIST_EMPTY(&ss->lc.lro_active)) {
- struct lro_entry *lro = SLIST_FIRST(&ss->lc.lro_active);
- SLIST_REMOVE_HEAD(&ss->lc.lro_active, next);
- tcp_lro_flush(&ss->lc, lro);
- }
+ tcp_lro_flush_all(&ss->lc);
#endif
}
Index: head/sys/dev/oce/oce_if.c
===================================================================
--- head/sys/dev/oce/oce_if.c
+++ head/sys/dev/oce/oce_if.c
@@ -1497,16 +1497,12 @@
oce_rx_flush_lro(struct oce_rq *rq)
{
struct lro_ctrl *lro = &rq->lro;
- struct lro_entry *queued;
POCE_SOFTC sc = (POCE_SOFTC) rq->parent;
if (!IF_LRO_ENABLED(sc))
return;
- while ((queued = SLIST_FIRST(&lro->lro_active)) != NULL) {
- SLIST_REMOVE_HEAD(&lro->lro_active, next);
- tcp_lro_flush(lro, queued);
- }
+ tcp_lro_flush_all(lro);
rq->lro_pkts_queued = 0;
return;
Index: head/sys/dev/qlxgb/qla_isr.c
===================================================================
--- head/sys/dev/qlxgb/qla_isr.c
+++ head/sys/dev/qlxgb/qla_isr.c
@@ -267,7 +267,6 @@
uint32_t comp_idx, desc_count;
q80_stat_desc_t *sdesc;
struct lro_ctrl *lro;
- struct lro_entry *queued;
uint32_t ret = 0;
dev = ha->pci_dev;
@@ -324,11 +323,7 @@
}
}
- while((!SLIST_EMPTY(&lro->lro_active))) {
- queued = SLIST_FIRST(&lro->lro_active);
- SLIST_REMOVE_HEAD(&lro->lro_active, next);
- tcp_lro_flush(lro, queued);
- }
+ tcp_lro_flush_all(lro);
if (hw->sds[sds_idx].sdsr_next != comp_idx) {
QL_UPDATE_SDS_CONSUMER_INDEX(ha, sds_idx, comp_idx);
Index: head/sys/dev/qlxge/qls_isr.c
===================================================================
--- head/sys/dev/qlxge/qls_isr.c
+++ head/sys/dev/qlxge/qls_isr.c
@@ -232,7 +232,6 @@
uint32_t i, cq_comp_idx;
int ret = 0, tx_comp_done = 0;
struct lro_ctrl *lro;
- struct lro_entry *queued;
cq_b = ha->rx_ring[cq_idx].cq_base_vaddr;
lro = &ha->rx_ring[cq_idx].lro;
@@ -287,11 +286,7 @@
}
}
- while((!SLIST_EMPTY(&lro->lro_active))) {
- queued = SLIST_FIRST(&lro->lro_active);
- SLIST_REMOVE_HEAD(&lro->lro_active, next);
- tcp_lro_flush(lro, queued);
- }
+ tcp_lro_flush_all(lro);
ha->rx_ring[cq_idx].cq_next = cq_comp_idx;
Index: head/sys/dev/vnic/nicvf_queues.c
===================================================================
--- head/sys/dev/vnic/nicvf_queues.c
+++ head/sys/dev/vnic/nicvf_queues.c
@@ -746,7 +746,6 @@
struct rcv_queue *rq;
struct cqe_rx_t *cq_desc;
struct lro_ctrl *lro;
- struct lro_entry *queued;
int rq_idx;
int cmp_err;
@@ -831,10 +830,7 @@
rq_idx = cq_idx;
rq = &nic->qs->rq[rq_idx];
lro = &rq->lro;
- while ((queued = SLIST_FIRST(&lro->lro_active)) != NULL) {
- SLIST_REMOVE_HEAD(&lro->lro_active, next);
- tcp_lro_flush(lro, queued);
- }
+ tcp_lro_flush_all(lro);
NICVF_CMP_UNLOCK(cq);
Index: head/sys/dev/vxge/vxge.c
===================================================================
--- head/sys/dev/vxge/vxge.c
+++ head/sys/dev/vxge/vxge.c
@@ -996,7 +996,6 @@
vxge_vpath_t *vpath = (vxge_vpath_t *) userdata;
vxge_dev_t *vdev = vpath->vdev;
- struct lro_entry *queued = NULL;
struct lro_ctrl *lro = &vpath->lro;
/* get the interface pointer */
@@ -1083,12 +1082,8 @@
&dtr_priv, &t_code) == VXGE_HAL_OK);
/* Flush any outstanding LRO work */
- if (vpath->lro_enable && vpath->lro.lro_cnt) {
- while ((queued = SLIST_FIRST(&lro->lro_active)) != NULL) {
- SLIST_REMOVE_HEAD(&lro->lro_active, next);
- tcp_lro_flush(lro, queued);
- }
- }
+ if (vpath->lro_enable && vpath->lro.lro_cnt)
+ tcp_lro_flush_all(lro);
return (status);
}
Index: head/sys/dev/xen/netfront/netfront.c
===================================================================
--- head/sys/dev/xen/netfront/netfront.c
+++ head/sys/dev/xen/netfront/netfront.c
@@ -1202,7 +1202,6 @@
struct netfront_info *np = rxq->info;
#if (defined(INET) || defined(INET6))
struct lro_ctrl *lro = &rxq->lro;
- struct lro_entry *queued;
#endif
struct netfront_rx_info rinfo;
struct netif_rx_response *rx = &rinfo.rx;
@@ -1296,11 +1295,7 @@
/*
* Flush any outstanding LRO work
*/
- while (!SLIST_EMPTY(&lro->lro_active)) {
- queued = SLIST_FIRST(&lro->lro_active);
- SLIST_REMOVE_HEAD(&lro->lro_active, next);
- tcp_lro_flush(lro, queued);
- }
+ tcp_lro_flush_all(lro);
#endif
xn_alloc_rx_buffers(rxq);
Index: head/sys/netinet/tcp_lro.c
===================================================================
--- head/sys/netinet/tcp_lro.c
+++ head/sys/netinet/tcp_lro.c
@@ -67,6 +67,8 @@
#define TCP_LRO_INVALID_CSUM 0x0000
#endif
+static void tcp_lro_rx_done(struct lro_ctrl *lc);
+
int
tcp_lro_init(struct lro_ctrl *lc)
{
@@ -226,6 +228,17 @@
}
#endif
+static void
+tcp_lro_rx_done(struct lro_ctrl *lc)
+{
+ struct lro_entry *le;
+
+ while ((le = SLIST_FIRST(&lc->lro_active)) != NULL) {
+ SLIST_REMOVE_HEAD(&lc->lro_active, next);
+ tcp_lro_flush(lc, le);
+ }
+}
+
void
tcp_lro_flush_inactive(struct lro_ctrl *lc, const struct timeval *timeout)
{
@@ -362,13 +375,12 @@
void
tcp_lro_flush_all(struct lro_ctrl *lc)
{
- struct lro_entry *le;
uint32_t hashtype;
uint32_t flowid;
unsigned x;
/* check if no mbufs to flush */
- if (__predict_false(lc->lro_mbuf_count == 0))
+ if (lc->lro_mbuf_count == 0)
goto done;
/* sort all mbufs according to stream */
@@ -390,10 +402,7 @@
hashtype = M_HASHTYPE_GET(mb);
/* flush active streams */
- while ((le = SLIST_FIRST(&lc->lro_active)) != NULL) {
- SLIST_REMOVE_HEAD(&lc->lro_active, next);
- tcp_lro_flush(lc, le);
- }
+ tcp_lro_rx_done(lc);
}
#ifdef TCP_LRO_RESET_SEQUENCE
/* reset sequence number */
@@ -409,10 +418,8 @@
}
done:
/* flush active streams */
- while ((le = SLIST_FIRST(&lc->lro_active)) != NULL) {
- SLIST_REMOVE_HEAD(&lc->lro_active, next);
- tcp_lro_flush(lc, le);
- }
+ tcp_lro_rx_done(lc);
+
lc->lro_mbuf_count = 0;
}
Index: head/sys/ofed/drivers/net/mlx4/en_rx.c
===================================================================
--- head/sys/ofed/drivers/net/mlx4/en_rx.c
+++ head/sys/ofed/drivers/net/mlx4/en_rx.c
@@ -561,9 +561,6 @@
struct mbuf *mb;
struct mlx4_cq *mcq = &cq->mcq;
struct mlx4_cqe *buf = cq->buf;
-#ifdef INET
- struct lro_entry *queued;
-#endif
int index;
unsigned int length;
int polled = 0;
@@ -669,10 +666,7 @@
/* Flush all pending IP reassembly sessions */
out:
#ifdef INET
- while ((queued = SLIST_FIRST(&ring->lro.lro_active)) != NULL) {
- SLIST_REMOVE_HEAD(&ring->lro.lro_active, next);
- tcp_lro_flush(&ring->lro, queued);
- }
+ tcp_lro_flush_all(&ring->lro);
#endif
AVG_PERF_COUNTER(priv->pstats.rx_coal_avg, polled);
mcq->cons_index = cons_index;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Jul 24, 1:58 AM (2 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35424511
Default Alt Text
D5725.id.diff (11 KB)
Attached To
Mode
D5725: tcp/lro: Factor out tcp_lro_rx_done() to avoid code duplication
Attached
Detach File
Event Timeline
Log In to Comment