net/nfp: fix jumbo packet descriptors for NFDk
Checks
Commit Message
From: Long Wu <long.wu@corigine.com>
When sending a jumbo packet on NFDk the packet must be split between
multiple descriptors. The first descriptor contains the packet header
and is limited to NFDK_DESC_TX_DMA_LEN_HEAD bytes. If the packet is
large, one or more payload descriptors, without a packet header, and
a size limit of NFDK_DESC_TX_DMA_LEN bytes are appended.
When adjusting the coding style for the for NFDk datapath an error was
made and the total packet size was modified when creating the first
descriptor. This resulted in no payload descriptors being created and
the jumbo packets where truncated.
Fix this by not modifying the total packet length when constructing the
first descriptor, allowing one or more payload descriptors to be
created.
Fixes: d7f6d9b21ffa ("net/nfp: adjust coding style for NFDk")
Cc: chaoyong.he@corigine.com
Cc: stable@dpdk.org
Signed-off-by: Long Wu <long.wu@corigine.com>
Reviewed-by: Chaoyong He <chaoyong.he@corigine.com>
---
drivers/net/nfp/nfdk/nfp_nfdk_dp.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
Comments
On 10/10/2023 7:06 AM, Chaoyong He wrote:
> From: Long Wu <long.wu@corigine.com>
>
> When sending a jumbo packet on NFDk the packet must be split between
> multiple descriptors. The first descriptor contains the packet header
> and is limited to NFDK_DESC_TX_DMA_LEN_HEAD bytes. If the packet is
> large, one or more payload descriptors, without a packet header, and
> a size limit of NFDK_DESC_TX_DMA_LEN bytes are appended.
>
> When adjusting the coding style for the for NFDk datapath an error was
> made and the total packet size was modified when creating the first
> descriptor. This resulted in no payload descriptors being created and
> the jumbo packets where truncated.
>
> Fix this by not modifying the total packet length when constructing the
> first descriptor, allowing one or more payload descriptors to be
> created.
>
> Fixes: d7f6d9b21ffa ("net/nfp: adjust coding style for NFDk")
> Cc: chaoyong.he@corigine.com
> Cc: stable@dpdk.org
>
> Signed-off-by: Long Wu <long.wu@corigine.com>
> Reviewed-by: Chaoyong He <chaoyong.he@corigine.com>
>
Applied to dpdk-next-net/main, thanks.
@@ -354,8 +354,10 @@ nfp_net_nfdk_xmit_pkts_common(void *tx_queue,
* than packet head len.
*/
if (dma_len > NFDK_DESC_TX_DMA_LEN_HEAD)
- dma_len = NFDK_DESC_TX_DMA_LEN_HEAD;
- dlen_type = dma_len | (NFDK_DESC_TX_TYPE_HEAD & (type << 12));
+ tmp_dlen = NFDK_DESC_TX_DMA_LEN_HEAD;
+ else
+ tmp_dlen = dma_len;
+ dlen_type = tmp_dlen | (NFDK_DESC_TX_TYPE_HEAD & (type << 12));
ktxds->dma_len_type = rte_cpu_to_le_16(dlen_type);
dma_addr = rte_mbuf_data_iova(pkt);
ktxds->dma_addr_hi = rte_cpu_to_le_16(dma_addr >> 32);
@@ -366,7 +368,6 @@ nfp_net_nfdk_xmit_pkts_common(void *tx_queue,
* Preserve the original dlen_type, this way below the EOP logic
* can use dlen_type.
*/
- tmp_dlen = dlen_type & NFDK_DESC_TX_DMA_LEN_HEAD;
dma_len -= tmp_dlen;
dma_addr += tmp_dlen + 1;