From e274fbfe321df303df4e06cbaa5407ce2170df75 Mon Sep 17 00:00:00 2001 From: Ed Czeck Date: Tue, 8 Sep 2020 15:20:18 -0400 Subject: [PATCH] net/ark: remove Tx padding configuration macro Replace behavior with RTE_LIBRTE_ARK_MIN_TX_PKTLEN with a default value of 0. Update documentation as needed. Signed-off-by: Ed Czeck Reviewed-by: Ferruh Yigit --- doc/guides/nics/ark.rst | 13 ++++++++-- drivers/net/ark/ark_ethdev_tx.c | 43 ++++++++++++++++++--------------- drivers/net/ark/ark_logs.h | 8 ------ 3 files changed, 35 insertions(+), 29 deletions(-) diff --git a/doc/guides/nics/ark.rst b/doc/guides/nics/ark.rst index c3ffcbbc26..358e7f624d 100644 --- a/doc/guides/nics/ark.rst +++ b/doc/guides/nics/ark.rst @@ -129,8 +129,10 @@ Configuration Information * **CONFIG_RTE_LIBRTE_ARK_PMD** (default y): Enables or disables inclusion of the ARK PMD driver in the DPDK compilation. - * **CONFIG_RTE_LIBRTE_ARK_PAD_TX** (default y): When enabled TX - packets are padded to 60 bytes to support downstream MACS. + * **RTE_LIBRTE_ARK_MIN_TX_PKTLEN** (default 0): Sets the minimum + packet length for tx packets to the FPGA. Packets less than this + length are padded to meet the requirement. This allows padding to + be offloaded or remain in host software. Building DPDK @@ -144,6 +146,13 @@ By default the ARK PMD library will be built into the DPDK library. For configuring and using UIO and VFIO frameworks, please also refer :ref:`the documentation that comes with DPDK suite `. +To build with a non-zero minimum tx packet length, set the above macro in your +CFLAGS environment prior to the meson build step. I.e., + + export CFLAGS="-DRTE_LIBRTE_ARK_MIN_TX_PKTLEN=60" + meson build + + Supported ARK RTL PCIe Instances -------------------------------- diff --git a/drivers/net/ark/ark_ethdev_tx.c b/drivers/net/ark/ark_ethdev_tx.c index 72624deb39..a0e35af880 100644 --- a/drivers/net/ark/ark_ethdev_tx.c +++ b/drivers/net/ark/ark_ethdev_tx.c @@ -14,6 +14,11 @@ #define ARK_TX_META_OFFSET (RTE_PKTMBUF_HEADROOM - ARK_TX_META_SIZE) #define ARK_TX_MAX_NOCHAIN (RTE_MBUF_DEFAULT_DATAROOM) +#ifndef RTE_LIBRTE_ARK_MIN_TX_PKTLEN +#define ARK_MIN_TX_PKTLEN 0 +#else +#define ARK_MIN_TX_PKTLEN RTE_LIBRTE_ARK_MIN_TX_PKTLEN +#endif /* ************************************************************************* */ struct ark_tx_queue { @@ -91,6 +96,7 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) uint32_t prod_index_limit; int stat; uint16_t nb; + const uint32_t min_pkt_len = ARK_MIN_TX_PKTLEN; queue = (struct ark_tx_queue *)vtxq; @@ -104,27 +110,26 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) ++nb) { mbuf = tx_pkts[nb]; - if (ARK_TX_PAD_TO_60) { - if (unlikely(rte_pktmbuf_pkt_len(mbuf) < 60)) { - /* this packet even if it is small can be split, - * be sure to add to the end mbuf + if (min_pkt_len && + unlikely(rte_pktmbuf_pkt_len(mbuf) < min_pkt_len)) { + /* this packet even if it is small can be split, + * be sure to add to the end mbuf + */ + uint16_t to_add = min_pkt_len - + rte_pktmbuf_pkt_len(mbuf); + char *appended = + rte_pktmbuf_append(mbuf, to_add); + + if (appended == 0) { + /* This packet is in error, + * we cannot send it so just + * count it and delete it. */ - uint16_t to_add = - 60 - rte_pktmbuf_pkt_len(mbuf); - char *appended = - rte_pktmbuf_append(mbuf, to_add); - - if (appended == 0) { - /* This packet is in error, - * we cannot send it so just - * count it and delete it. - */ - queue->tx_errors += 1; - rte_pktmbuf_free(mbuf); - continue; - } - memset(appended, 0, to_add); + queue->tx_errors += 1; + rte_pktmbuf_free(mbuf); + continue; } + memset(appended, 0, to_add); } if (unlikely(mbuf->nb_segs != 1)) { diff --git a/drivers/net/ark/ark_logs.h b/drivers/net/ark/ark_logs.h index c3d7e7d390..ca46d86c99 100644 --- a/drivers/net/ark/ark_logs.h +++ b/drivers/net/ark/ark_logs.h @@ -8,14 +8,6 @@ #include #include - -/* Configuration option to pad TX packets to 60 bytes */ -#ifdef RTE_LIBRTE_ARK_PAD_TX -#define ARK_TX_PAD_TO_60 1 -#else -#define ARK_TX_PAD_TO_60 0 -#endif - /* system camel case definition changed to upper case */ #define PRIU32 PRIu32 #define PRIU64 PRIu64 -- 2.20.1