* [PATCH 1/4] net/ark: add PCIe IDS for newly supported devices @ 2025-09-03 21:28 Ed Czeck 2025-09-03 21:28 ` [PATCH 2/4] net/ark: remove double mbuf frees Ed Czeck ` (2 more replies) 0 siblings, 3 replies; 5+ messages in thread From: Ed Czeck @ 2025-09-03 21:28 UTC (permalink / raw) To: dev; +Cc: Shepard Siegel, John Miller Update documentation and release notes Signed-off-by: Ed Czeck <ed.czeck@atomicrules.com> --- doc/guides/nics/ark.rst | 5 +++++ drivers/net/ark/ark_ethdev.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/doc/guides/nics/ark.rst b/doc/guides/nics/ark.rst index 6aabde2ed5..1977f67e73 100644 --- a/doc/guides/nics/ark.rst +++ b/doc/guides/nics/ark.rst @@ -310,6 +310,10 @@ ARK PMD supports the following Arkville RTL PCIe instances including: * ``1d6c:1024`` - AR-TK242 [2x100GbE Packet Capture Device] * ``1d6c:1025`` - AR-TK242-FX2 [2x100GbE Gen5 Packet Capture Device] * ``1d6c:1026`` - AR-TK242-FX2 [1x200GbE Gen5 Packet Capture Device] +* ``1d6c:102a`` - AR-TK242-FX2 [4x100GbE Gen5 Packet Capture Device] +* ``1d6c:102b`` - AR-ARKV-FX1 [Arkville 128B DPDK Data Mover for Versal/CPM5] +* ``1d6c:102c`` - AR-TK242-V80 [Gen5 PCAP Processor] +* ``1d6c:102d`` - AR-TK242-FX2 [8x10GbE Gen5 Packet Capture-Replay Device] Arkville RTL Core Configurations -------------------------------- @@ -322,6 +326,7 @@ stream interfaces for both AMD/Xilinx and Intel FPGAs. * ARK-FX0 - 256-bit 32B datapath (PCIe Gen3, Gen4) * ARK-FX1 - 512-bit 64B datapath (PCIe Gen3, Gen4, Gen5) +* ARKV-FX1 - 1024-bit 128B datapath (AMD PCIe Versal, Gen5 ) * ARK-FX2 - 1024-bit 128B datapath (PCIe Gen5x16 Only) DPDK and Arkville Firmware Versioning diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index c029dc46b3..d3fd76eec1 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -102,6 +102,10 @@ static const struct rte_pci_id pci_id_ark_map[] = { {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x1024)}, {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x1025)}, {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x1026)}, + {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x102a)}, + {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x102b)}, + {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x102c)}, + {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x102d)}, {.vendor_id = 0, /* sentinel */ }, }; -- 2.34.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/4] net/ark: remove double mbuf frees 2025-09-03 21:28 [PATCH 1/4] net/ark: add PCIe IDS for newly supported devices Ed Czeck @ 2025-09-03 21:28 ` Ed Czeck 2025-09-03 21:28 ` [PATCH 3/4] net/ark: improve ring handling for segmented packets Ed Czeck 2025-09-03 21:28 ` [PATCH 4/4] net/ark: improve Rx queue recovery after mbuf exhaustion Ed Czeck 2 siblings, 0 replies; 5+ messages in thread From: Ed Czeck @ 2025-09-03 21:28 UTC (permalink / raw) To: dev; +Cc: John Miller, stable, Shepard Siegel From: John Miller <john.miller@atomicrules.com> Fixes: 8b154b690266 ("net/ark: add Rx initial version") Cc: stable@dpdk.org Signed-off-by: John Miller <john.miller@atomicrules.com> --- drivers/net/ark/ark_ethdev_rx.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/drivers/net/ark/ark_ethdev_rx.c b/drivers/net/ark/ark_ethdev_rx.c index 80e431f1ae..6077d98ae0 100644 --- a/drivers/net/ark/ark_ethdev_rx.c +++ b/drivers/net/ark/ark_ethdev_rx.c @@ -538,7 +538,6 @@ void eth_ark_dev_rx_queue_release(void *vqueue) { struct ark_rx_queue *queue; - uint32_t i; queue = (struct ark_rx_queue *)vqueue; if (queue == 0) @@ -551,9 +550,6 @@ eth_ark_dev_rx_queue_release(void *vqueue) /* Need to clear out mbufs here, dropping packets along the way */ eth_ark_rx_queue_drain(queue); - for (i = 0; i < queue->queue_size; ++i) - rte_pktmbuf_free(queue->reserve_q[i]); - rte_free(queue->reserve_q); rte_free(queue->paddress_q); rte_free(queue); -- 2.34.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 3/4] net/ark: improve ring handling for segmented packets 2025-09-03 21:28 [PATCH 1/4] net/ark: add PCIe IDS for newly supported devices Ed Czeck 2025-09-03 21:28 ` [PATCH 2/4] net/ark: remove double mbuf frees Ed Czeck @ 2025-09-03 21:28 ` Ed Czeck 2025-09-03 21:28 ` [PATCH 4/4] net/ark: improve Rx queue recovery after mbuf exhaustion Ed Czeck 2 siblings, 0 replies; 5+ messages in thread From: Ed Czeck @ 2025-09-03 21:28 UTC (permalink / raw) To: dev; +Cc: Shepard Siegel, John Miller handle case where complete packet is not yet available Signed-off-by: Ed Czeck <ed.czeck@atomicrules.com> --- drivers/net/ark/ark_ethdev_rx.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/net/ark/ark_ethdev_rx.c b/drivers/net/ark/ark_ethdev_rx.c index 6077d98ae0..1b5c4b64a4 100644 --- a/drivers/net/ark/ark_ethdev_rx.c +++ b/drivers/net/ark/ark_ethdev_rx.c @@ -313,11 +313,15 @@ eth_ark_recv_pkts(void *rx_queue, } } - if (unlikely(meta->pkt_len > queue->dataroom)) - cons_index = eth_ark_rx_jumbo - (queue, meta, mbuf, cons_index + 1); - else + if (unlikely(meta->pkt_len > queue->dataroom)) { + uint32_t tcons = eth_ark_rx_jumbo(queue, meta, mbuf, cons_index + 1); + if ((int32_t)(prod_index - tcons) >= 0) + cons_index = tcons; /* nominal condition */ + else + break; + } else { cons_index += 1; + } rx_pkts[nb] = mbuf; nb++; -- 2.34.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 4/4] net/ark: improve Rx queue recovery after mbuf exhaustion 2025-09-03 21:28 [PATCH 1/4] net/ark: add PCIe IDS for newly supported devices Ed Czeck 2025-09-03 21:28 ` [PATCH 2/4] net/ark: remove double mbuf frees Ed Czeck 2025-09-03 21:28 ` [PATCH 3/4] net/ark: improve ring handling for segmented packets Ed Czeck @ 2025-09-03 21:28 ` Ed Czeck 2025-09-06 4:51 ` Stephen Hemminger 2 siblings, 1 reply; 5+ messages in thread From: Ed Czeck @ 2025-09-03 21:28 UTC (permalink / raw) To: dev; +Cc: Shepard Siegel, John Miller use 4-K page aligned buffers reduce message spew attempt to allocate smaller chunks of buffers Signed-off-by: Ed Czeck <ed.czeck@atomicrules.com> --- drivers/net/ark/ark_ethdev_rx.c | 37 ++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/drivers/net/ark/ark_ethdev_rx.c b/drivers/net/ark/ark_ethdev_rx.c index 1b5c4b64a4..2e7646fa23 100644 --- a/drivers/net/ark/ark_ethdev_rx.c +++ b/drivers/net/ark/ark_ethdev_rx.c @@ -42,6 +42,7 @@ struct __rte_cache_aligned ark_rx_queue { rx_user_meta_hook_fn rx_user_meta_hook; void *ext_user_data; + uint32_t starvation; uint32_t dataroom; uint32_t headroom; @@ -57,8 +58,6 @@ struct __rte_cache_aligned ark_rx_queue { /* The queue Index is used within the dpdk device structures */ uint16_t queue_index; - uint32_t unused; - /* next cache line - fields written by device */ alignas(RTE_CACHE_LINE_MIN_SIZE) RTE_MARKER cacheline1; @@ -185,12 +184,12 @@ eth_ark_dev_rx_queue_setup(struct rte_eth_dev *dev, queue->reserve_q = rte_zmalloc_socket("Ark_rx_queue mbuf", nb_desc * sizeof(struct rte_mbuf *), - 512, + 4096, socket_id); queue->paddress_q = rte_zmalloc_socket("Ark_rx_queue paddr", nb_desc * sizeof(rte_iova_t), - 512, + 4096, socket_id); if (queue->reserve_q == 0 || queue->paddress_q == 0) { @@ -265,6 +264,9 @@ eth_ark_recv_pkts(void *rx_queue, return 0; if (unlikely(nb_pkts == 0)) return 0; + if (unlikely(queue->starvation)) + eth_ark_rx_seed_mbufs(queue); + prod_index = queue->prod_index; cons_index = queue->cons_index; if (prod_index == cons_index) @@ -453,7 +455,7 @@ eth_ark_rx_stop_queue(struct rte_eth_dev *dev, uint16_t queue_id) static inline int eth_ark_rx_seed_mbufs(struct ark_rx_queue *queue) { - uint32_t limit = (queue->cons_index & ~(ARK_RX_MPU_CHUNK - 1)) + + uint32_t limit = RTE_ALIGN_FLOOR(queue->cons_index, ARK_RX_MPU_CHUNK) + queue->queue_size; uint32_t seed_index = queue->seed_index; @@ -461,23 +463,34 @@ eth_ark_rx_seed_mbufs(struct ark_rx_queue *queue) uint32_t seed_m = queue->seed_index & queue->queue_mask; uint32_t nb = limit - seed_index; + int status; /* Handle wrap around -- remainder is filled on the next call */ if (unlikely(seed_m + nb > queue->queue_size)) nb = queue->queue_size - seed_m; struct rte_mbuf **mbufs = &queue->reserve_q[seed_m]; - int status = rte_pktmbuf_alloc_bulk(queue->mb_pool, mbufs, nb); + do { + status = rte_pktmbuf_alloc_bulk(queue->mb_pool, mbufs, nb); + if (status == 0) + break; + /* Try again with a smaller request, keeping aligned with chunk size */ + nb = RTE_ALIGN_FLOOR(nb / 2, ARK_RX_MPU_CHUNK); + } while (nb >= ARK_RX_MPU_CHUNK); if (unlikely(status != 0)) { - ARK_PMD_LOG(NOTICE, - "Could not allocate %u mbufs from pool" - " for RX queue %u;" - " %u free buffers remaining in queue\n", - nb, queue->queue_index, - queue->seed_index - queue->cons_index); + if (queue->starvation == 0) { + ARK_PMD_LOG(NOTICE, + "Could not allocate %u mbufs from pool" + " for RX queue %u;" + " %u free buffers remaining in queue\n", + ARK_RX_MPU_CHUNK, queue->queue_index, + queue->seed_index - queue->cons_index); + queue->starvation = 1; + } return -1; } + queue->starvation = 0; if (ARK_DEBUG_CORE) { /* DEBUG */ while (count != nb) { -- 2.34.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 4/4] net/ark: improve Rx queue recovery after mbuf exhaustion 2025-09-03 21:28 ` [PATCH 4/4] net/ark: improve Rx queue recovery after mbuf exhaustion Ed Czeck @ 2025-09-06 4:51 ` Stephen Hemminger 0 siblings, 0 replies; 5+ messages in thread From: Stephen Hemminger @ 2025-09-06 4:51 UTC (permalink / raw) To: Ed Czeck; +Cc: dev, Shepard Siegel, John Miller On Wed, 3 Sep 2025 17:28:45 -0400 Ed Czeck <ed.czeck@atomicrules.com> wrote: > + if (queue->starvation == 0) { > + ARK_PMD_LOG(NOTICE, > + "Could not allocate %u mbufs from pool" > + " for RX queue %u;" > + " %u free buffers remaining in queue\n", > + ARK_RX_MPU_CHUNK, queue->queue_index, > + queue->seed_index - queue->cons_index); Keep messages to one source line and succinct as possible. Assume messages in production are going to a log manager such as journald. ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-09-06 4:51 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2025-09-03 21:28 [PATCH 1/4] net/ark: add PCIe IDS for newly supported devices Ed Czeck 2025-09-03 21:28 ` [PATCH 2/4] net/ark: remove double mbuf frees Ed Czeck 2025-09-03 21:28 ` [PATCH 3/4] net/ark: improve ring handling for segmented packets Ed Czeck 2025-09-03 21:28 ` [PATCH 4/4] net/ark: improve Rx queue recovery after mbuf exhaustion Ed Czeck 2025-09-06 4:51 ` Stephen Hemminger
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).