Putting buffered and direct packets together into one request is an unnecessary optimization. Better to split into two requests (buffered and direct).
Signed-off-by: Stephen Hemminger <step...@networkplumber.org> --- drivers/net/netvsc/hn_rxtx.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/net/netvsc/hn_rxtx.c b/drivers/net/netvsc/hn_rxtx.c index 7212780c156e..aad3d8c04c7f 100644 --- a/drivers/net/netvsc/hn_rxtx.c +++ b/drivers/net/netvsc/hn_rxtx.c @@ -1362,15 +1362,14 @@ hn_xmit_pkts(void *ptxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) } else { struct hn_txdesc *txd; - /* can send chimney data and large packet at once */ + /* Send any outstanding packets in buffer */ txd = txq->agg_txd; - if (txd) { - hn_reset_txagg(txq); - } else { - txd = hn_new_txd(hv, txq); - if (unlikely(!txd)) - break; - } + if (txd && hn_flush_txagg(txq, &need_sig)) + goto fail; + + txd = hn_new_txd(hv, txq); + if (unlikely(!txd)) + break; pkt = txd->rndis_pkt; txd->m = m; -- 2.20.1