* [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; 7+ 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] 7+ 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; 7+ 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] 7+ 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; 7+ 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] 7+ 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 more replies) 2 siblings, 3 replies; 7+ 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] 7+ 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 2025-09-10 0:33 ` Stephen Hemminger 2025-09-10 0:33 ` Stephen Hemminger 2 siblings, 0 replies; 7+ 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] 7+ 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 @ 2025-09-10 0:33 ` Stephen Hemminger 2025-09-10 0:33 ` Stephen Hemminger 2 siblings, 0 replies; 7+ messages in thread From: Stephen Hemminger @ 2025-09-10 0:33 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: > @@ -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); > Not all ARM systems use page size of 4096. Some are larger. The parameter changed is the alignment value, not the size. The allocation is taking place on huge pages where the page size is typically 2 Megabytes or larger. Why is this doing anything useful? ^ permalink raw reply [flat|nested] 7+ 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 2025-09-10 0:33 ` Stephen Hemminger @ 2025-09-10 0:33 ` Stephen Hemminger 2 siblings, 0 replies; 7+ messages in thread From: Stephen Hemminger @ 2025-09-10 0:33 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); > + queue->starvation = 1; Best to not split messages across lines, it makes it harder for users to search the source. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-09-10 0:33 UTC | newest] Thread overview: 7+ 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 2025-09-10 0:33 ` Stephen Hemminger 2025-09-10 0:33 ` 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).