> [PATCH v8 4/4] net/zxdh: optimize Tx xmit pkts performance<br />>  <br />> Error: the simple Tx burst signals a bad packet with a short return,<br />> which the application cannot distinguish from backpressure.<br /> <br />>     for (i = 0; i < nb_pkts; i++) {<br />>         rte_prefetch0(tx_pkts[i]);<br />>         if (unlikely(tx_pkts[i]->data_off < hdr_len)) {<br />>             txvq->stats.errors += nb_pkts - i;<br />>             nb_pkts = i;<br />>             break;<br />>         }<br />>     }<br />>  <br />> A short return from tx_burst is the backpressure signal (transmit ring<br />> full, retry later). Here it is also used to mean "packet i is bad",<br />> and the bad mbuf is left owned by the caller. The application has no<br />> way to tell the two apart: the usual<br />>  <br />>     for (sent = 0; sent < n; )<br />>         sent += rte_eth_tx_burst(port, q, &pkts[sent], n - sent);<br />>  <br />> loop treats the short return as backpressure and resubmits pkts[i],<br />> which fails again every time -- head-of-line blocking, and the good<br />> packets after i (which had ring space) never go out.<br />>  <br />> A packet that cannot be sent must be consumed by the driver, not<br />> handed back. Free it in tx_burst, increment the tx error counter, and<br />> continue with the rest of the burst. For a burst of 16 where only<br />> index 3 is bad and the ring has room, tx_burst should return 16, with<br />> stats showing 15 transmitted and 1 tx error. A short return is then<br />> reserved for the one case the application is entitled to retry: ring<br />> full.<br /> <br />The design intent of zxdh_xmit_pkts_simple is a fast path with<br />a usage restriction, not a general Tx entry point.<br />The restriction is data_off >= hdr_len on single-segment<br />mbufs. When a packet violates the restriction, the function<br />exits without sending — that is the contract, not a bug.<br /> <br />Applications that may produce reduced-headroom mbufs are<br />expected to keep RTE_ETH_TX_OFFLOAD_MULTI_SEGS enabled, in<br />which case zxdh_xmit_pkts_packed is selected instead and<br />handles the full set of inputs. The split between the two<br />paths is intentional.<br /> <br />how about add a paragraph to the "Limitations or Known issues" <br />section of doc/guides/nics/zxdh.rst describing the fast path's<br />requirement and pointing at the packed path as the alternative.<br /> <br />Thanks.