[PATCH v2 0/7] migrate threads to DPDK service framework
Stephen Hemminger
stephen at networkplumber.org
Tue Sep 23 16:47:25 CEST 2025
On Mon, 8 Sep 2025 16:17:32 +0200
Serhii Iliushyk <sil-plv at napatech.com> wrote:
> This modification provides better resource (CPU) management for NTNIC PMD.
>
> The following threads are migrated:
> * FLM update thread
> * Statistic thread
> * Port event thread
> * Adapter monitoring thread
> Additionally, a warning is added to inform users about the importance of
> dedicating lcores to the DPDK service framework when using the NTNIC PMD.
> The code is also cleaned up to use pthreads and rte_thread APIs.
>
> After this patch series, an each application using NTNIC PMD should
> dedicate at least five(5) cores for DPDK service framework to ensure
> proper operation of the NTNIC PMD.
>
> The sercvice cores can be dedicated by EAL options:
> * s SERVICE COREMASK Hexadecimal bitmask of cores to be used as service cores
> * S SERVICE CORELIST List of cores to run services on
> Or with special API by application itself.
> * rte_pmd_ntnic_service_set_lcore to map a service to a specific lcore
> * rte_pmd_ntnic_service_get_id to get a service ID.
>
> Serhii Iliushyk (7):
> net/ntnic: introduce service API for NTNIC PMD
> net/ntnic: migrate flm update thread to service
> net/ntnic: migrate statistic thread to service
> net/ntnic: migrate port event thread to service
> net/ntnic: migrate adapter mon thread to service
> net/ntnic: add warning about service cores
> net/ntnic: cleanup using pthreads and rte_thread
>
> doc/guides/nics/ntnic.rst | 112 ++++
> drivers/net/ntnic/adapter/nt4ga_adapter.c | 27 +-
> .../net/ntnic/include/common_adapter_defs.h | 15 -
> drivers/net/ntnic/include/nt4ga_adapter.h | 4 -
> drivers/net/ntnic/include/ntdrv_4ga.h | 4 -
> drivers/net/ntnic/include/ntnic_stat.h | 2 +-
> drivers/net/ntnic/include/ntos_drv.h | 4 +-
> .../link_mgmt/link_100g/nt4ga_link_100g.c | 303 +++++-----
> .../link_agx_100g/nt4ga_agx_link_100g.c | 306 ++++++-----
> drivers/net/ntnic/meson.build | 2 +
> drivers/net/ntnic/nthw/core/nthw_pca9532.c | 2 -
> drivers/net/ntnic/nthw/core/nthw_pcal6416a.c | 1 -
> .../net/ntnic/nthw/core/nthw_si5332_si5156.c | 1 -
> .../profile_inline/flow_api_profile_inline.c | 2 +-
> drivers/net/ntnic/ntnic_ethdev.c | 520 ++++++++++--------
> drivers/net/ntnic/ntnic_filter/ntnic_filter.c | 17 +
> drivers/net/ntnic/ntutil/nt_service.c | 127 +++++
> drivers/net/ntnic/ntutil/nt_service.h | 62 +++
> drivers/net/ntnic/ntutil/nt_util.c | 2 +-
> drivers/net/ntnic/rte_pmd_ntnic.c | 104 ++++
> drivers/net/ntnic/rte_pmd_ntnic.h | 26 +
> 21 files changed, 1073 insertions(+), 570 deletions(-)
> delete mode 100644 drivers/net/ntnic/include/common_adapter_defs.h
> create mode 100644 drivers/net/ntnic/ntutil/nt_service.c
> create mode 100644 drivers/net/ntnic/ntutil/nt_service.h
> create mode 100644 drivers/net/ntnic/rte_pmd_ntnic.c
>
I got a report from Raslan about format overflow from sprintf()
so dropping this from next-net for now.
Please consider resubmitting with a fix for that.
Something like this (untested) change to not use sprintf at all
diff --git a/drivers/net/ntnic/ntnic_ethdev.c b/drivers/net/ntnic/ntnic_ethdev.c
index 3edf7796f7..18dab16f6b 100644
--- a/drivers/net/ntnic/ntnic_ethdev.c
+++ b/drivers/net/ntnic/ntnic_ethdev.c
@@ -2580,7 +2580,8 @@ nthw_pci_dev_init(struct rte_pci_device *pci_dev)
.callback_userdata = internals
};
- sprintf(port_event_spec.name, "ntnic-port_%d_event_service", n_intf_no);
+ snprintf(port_event_spec.name, RTE_SERVICE_NAME_MAX,
+ "ntnic-%d_event", n_intf_no);
const int port_srv_tag[2] = {
RTE_NTNIC_SERVICE_PORT_0_EVENT,
@@ -2612,9 +2613,8 @@ static int
nthw_pci_dev_deinit(struct rte_eth_dev *eth_dev __rte_unused)
{
NT_LOG_DBGX(DBG, NTNIC, "PCI device deinitialization");
-
int i;
- char name[32];
+ char name[RTE_ETH_NAME_MAX_LEN];
struct pmd_internals *internals = eth_dev->data->dev_private;
ntdrv_4ga_t *p_ntdrv = &internals->p_drv->ntdrv;
@@ -2641,7 +2641,7 @@ nthw_pci_dev_deinit(struct rte_eth_dev *eth_dev __rte_unused)
}
for (i = 0; i < n_phy_ports; i++) {
- sprintf(name, "ntnic%d", i);
+ snprintf(name, sizeof(name), "ntnic%d", i);
eth_dev = rte_eth_dev_allocated(name);
if (eth_dev == NULL)
continue; /* port already released */
More information about the dev
mailing list