* [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).