Page MenuHomeFreeBSD

D5725.id.diff
No OneTemporary

D5725.id.diff

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

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)

Event Timeline