net/nfp: fix length comparison for max DMA length
Checks
Commit Message
From: Richard Donkin <richard.donkin@corigine.com>
The DMA transfer length is allowed to be as large as
NFDK_TX_MAX_DATA_PER_HEAD. The existing check would not allow a simple-
type descriptor to be created for a packet of size
NFDK_TX_MAX_DATA_PER_HEAD, but it would also not enable gather-type
descriptors to be created correctly later.
Change the limit of simple-type descriptors to include packets of size
NFDK_TX_MAX_DATA_PER_HEAD.
In practice this fixes traffic with packets of size 4096. Previously
such packets would not be transmitted correctly.
Fixes: c73dced48c8c ("net/nfp: add NFDk Tx")
Cc: stable@dpdk.org
Signed-off-by: Richard Donkin <richard.donkin@corigine.com>
Reviewed-by: Chaoyong He <chaoyong.he@corigine.com>
---
drivers/net/nfp/nfp_rxtx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Comments
On 2/3/2023 2:23 AM, Chaoyong He wrote:
> From: Richard Donkin <richard.donkin@corigine.com>
>
> The DMA transfer length is allowed to be as large as
> NFDK_TX_MAX_DATA_PER_HEAD. The existing check would not allow a simple-
> type descriptor to be created for a packet of size
> NFDK_TX_MAX_DATA_PER_HEAD, but it would also not enable gather-type
> descriptors to be created correctly later.
>
> Change the limit of simple-type descriptors to include packets of size
> NFDK_TX_MAX_DATA_PER_HEAD.
>
> In practice this fixes traffic with packets of size 4096. Previously
> such packets would not be transmitted correctly.
>
> Fixes: c73dced48c8c ("net/nfp: add NFDk Tx")
> Cc: stable@dpdk.org
>
> Signed-off-by: Richard Donkin <richard.donkin@corigine.com>
> Reviewed-by: Chaoyong He <chaoyong.he@corigine.com>
Applied to dpdk-next-net/main, thanks.
@@ -1214,7 +1214,7 @@ nfp_net_nfdk_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pk
if ((hw->cap & NFP_NET_CFG_CTRL_LSO_ANY) &&
(pkt->ol_flags & RTE_MBUF_F_TX_TCP_SEG)) {
type = NFDK_DESC_TX_TYPE_TSO;
- } else if (!pkt->next && dma_len < NFDK_TX_MAX_DATA_PER_HEAD) {
+ } else if (!pkt->next && dma_len <= NFDK_TX_MAX_DATA_PER_HEAD) {
type = NFDK_DESC_TX_TYPE_SIMPLE;
} else {
type = NFDK_DESC_TX_TYPE_GATHER;