From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 540D54265E; Thu, 28 Sep 2023 10:14:18 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2CA2F40296; Thu, 28 Sep 2023 10:14:18 +0200 (CEST) Received: from mail-vk1-f177.google.com (mail-vk1-f177.google.com [209.85.221.177]) by mails.dpdk.org (Postfix) with ESMTP id 5330940273 for ; Thu, 28 Sep 2023 10:14:17 +0200 (CEST) Received: by mail-vk1-f177.google.com with SMTP id 71dfb90a1353d-49970221662so4769781e0c.0 for ; Thu, 28 Sep 2023 01:14:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695888856; x=1696493656; darn=dpdk.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=h1kxLx6XvaqRoivmKGuYaLrx9TskaT3/QgyAbSCkI9s=; b=ebQDe+SG/jFjnpn9AkxnKzQwVOjwDP1QVBSOH6xC69hPSFkr5Ud+xzTd+D4fFt4DO3 CEqLdNe37FeSr9JR/wgoLvDZNW1JR90b0AVbFqbgc4Cj9rstBE0TCJ5UCNLPhZnh5LCu elXHur6r6Em/kVklsqdiBQs7SuhUmz7387bjWUnSgBN7sfCFAEm4VcmNpIyYcONqwAge MD8dmvK01/9xEZ0vvMHHzxYCtUNxVK9t63E4PxZdU2CICc8/MLIizuixwRf3M1MWxpzf j0baKqTyThdX17wls+41gSByORBb7VaAf46f/TlG4uuCFHcS/D62UOl+dsY3ckRGLtGj hJTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695888856; x=1696493656; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=h1kxLx6XvaqRoivmKGuYaLrx9TskaT3/QgyAbSCkI9s=; b=WoeQ7g8VjQOk1FpghlUMxDyzvIUJdn9teRU6NibOYGC7Es09D3AccHfQjkv8owwsR0 hx2fSzkhjzZ61i5BD9S4Ik4XVl/7gR1OpTVfKPjFVrCCJprj8yRH7aZoIvH3lIGctGAD 4MEutRViYsUkUdY6O5GvTRksqa2TkpBNDCKnNP/iA2BUcNYmZvt5IgivmrFw6llwQn+x Gg5RNw6558G5SXzmqGc2elgiqzl1DqJCh3yBbZ0+pC07cu1WuYjAOIPZf77paCVXGqeJ oCsOciM4XSpoylLP7g4G8yrtYcVqkLibef/5wSLvilCxKcqzIaEk8u3b25EeoEASw3P3 03kw== X-Gm-Message-State: AOJu0YxzeiDUiJOKxKVgez2DV7XPuZ+NhqLkWbyv7Qv32Li+H8pQcwga /Zff2WldZGK2VlrxEMJzNchOAxhGDeuc2WHbjzQ= X-Google-Smtp-Source: AGHT+IHYOxVTWgXZJrKBhwO1A7WvgPYiTFiZPic1hpQAGYsxo/ONQ8P/7vWvAnZ7I1/5SKc8MEE7J77x2boRlIDjW0g= X-Received: by 2002:a1f:e247:0:b0:49a:c2b9:f36a with SMTP id z68-20020a1fe247000000b0049ac2b9f36amr435276vkg.4.1695888856390; Thu, 28 Sep 2023 01:14:16 -0700 (PDT) MIME-Version: 1.0 References: <20230727115926.2252988-1-adwivedi@marvell.com> <20230808084952.2460758-1-adwivedi@marvell.com> <20230808084952.2460758-2-adwivedi@marvell.com> In-Reply-To: From: Jerin Jacob Date: Thu, 28 Sep 2023 13:43:50 +0530 Message-ID: Subject: Re: [PATCH v2 1/2] common/cnxk: add support to get aged flows To: Ankur Dwivedi Cc: dev@dpdk.org, jerinj@marvell.com, ndabilpuram@marvell.com, kirankumark@marvell.com, skori@marvell.com, skoteshwar@marvell.com, Thomas Monjalon Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On Mon, Aug 14, 2023 at 12:26=E2=80=AFPM Jerin Jacob wrote: > > On Tue, Aug 8, 2023 at 2:20=E2=80=AFPM Ankur Dwivedi wrote: > > > > Adds support to get aged flows in CNXK driver. > > The control thread polls the status of flows having age action, every 1= 0 > > seconds and updates a bitmap array with the aged flows. The poll freque= ncy > > of control thread can be set by devargs. > > > > Signed-off-by: Ankur Dwivedi > > --- > > drivers/common/cnxk/meson.build | 1 + > > drivers/common/cnxk/roc_mbox.h | 27 +++ > > drivers/common/cnxk/roc_npc.c | 22 ++ > > drivers/common/cnxk/roc_npc.h | 28 +++ > > drivers/common/cnxk/roc_npc_aging.c | 315 ++++++++++++++++++++++++++++ > > drivers/common/cnxk/roc_npc_priv.h | 17 ++ > > drivers/common/cnxk/roc_platform.h | 8 + > > drivers/common/cnxk/version.map | 1 + > > 8 files changed, 419 insertions(+) > > create mode 100644 drivers/common/cnxk/roc_npc_aging.c > > Updated the release notes as > diff --git a/doc/guides/rel_notes/release_23_11.rst > b/doc/guides/rel_notes/release_23_11.rst > index 5b01a52593..10d4484685 100644 > --- a/doc/guides/rel_notes/release_23_11.rst > +++ b/doc/guides/rel_notes/release_23_11.rst > @@ -58,6 +58,7 @@ New Features > * **Updated Marvell cnxk ethdev driver.** > > * Added support for ``RTE_FLOW_ITEM_TYPE_IPV6_ROUTING_EXT`` flow item. > + * Added support for ``RTE_FLOW_ACTION_TYPE_AGE`` flow action. > > Updated the git commit as follows and applied to > dpdk-next-net-mrvl/for-next-net. Thanks Ankur, following changes in upstream changed the thread APIs. I have adapted to this change in [1]. Please review ASAP - It is blocking rc1 PR. commit 1c1abf1786a6de044bd396da4cc316961e3fd812 Author: Thomas Monjalon Date: Wed Sep 13 13:28:19 2023 +0200 lib: convert to internal control threads Calls to rte_ctrl_thread_create() are replaced with rte_thread_create_internal_control(). Other pthread-related functions are replaced with the rte_thread API. Only pthread_cancel() has no replacement. Signed-off-by: Thomas Monjalon Acked-by: Morten Br=C3=B8rup Acked-by: Tyler Retzlaff Acked-by: Konstantin Ananyev flow_age.age_flow_refcnt =3D=3D 0 && roc_npc->flow_age.aged_flows_poll_thread) + if (roc_npc->flow_age.age_flow_refcnt =3D=3D 0 && + plt_thread_is_valid(roc_npc->flow_age.aged_flows_poll_thread)) npc_aging_ctrl_thread_destroy(roc_npc); done: diff --git a/drivers/common/cnxk/roc_npc.h b/drivers/common/cnxk/roc_npc.h index ad1c3b08cc..5a7117eae4 100644 --- a/drivers/common/cnxk/roc_npc.h +++ b/drivers/common/cnxk/roc_npc.h @@ -359,7 +359,7 @@ struct roc_npc_flow_age { uint32_t aged_flows_cnt; uint32_t start_id; uint32_t end_id; - pthread_t aged_flows_poll_thread; + rte_thread_t aged_flows_poll_thread; struct plt_bitmap *aged_flows; void *age_mem; bool aged_flows_get_thread_exit; diff --git a/drivers/common/cnxk/roc_npc_aging.c b/drivers/common/cnxk/roc_npc_aging.c index 4b845954b4..74543f227b 100644 --- a/drivers/common/cnxk/roc_npc_aging.c +++ b/drivers/common/cnxk/roc_npc_aging.c @@ -134,7 +134,7 @@ npc_mcam_get_hit_status(struct npc *npc, uint64_t *mcam_ids, uint16_t start_id, return rc; } -void * +uint32_t npc_aged_flows_get(void *args) { uint64_t hit_status[MCAM_ARR_SIZE] =3D {0}; @@ -182,7 +182,7 @@ npc_aged_flows_get(void *args) rc =3D npc_mcam_get_hit_status(npc, mcam_ids, start_id, end_id, hit_status, true); if (rc) - return NULL; + return 0; plt_seqcount_write_begin(&flow_age->seq_cnt); flow_age->aged_flows_cnt =3D 0; @@ -201,7 +201,7 @@ npc_aged_flows_get(void *args) sleep(flow_age->aging_poll_freq); } - return NULL; + return 0; } void @@ -276,8 +276,8 @@ npc_aging_ctrl_thread_create(struct roc_npc *roc_npc, if (flow_age->age_flow_refcnt =3D=3D 0) { flow_age->aged_flows_get_thread_exit =3D false; - if (plt_ctrl_thread_create(&flow_age->aged_flows_poll_thread, - "Aged Flows Get Ctrl Thread", NULL, + if (plt_thread_create_control(&flow_age->aged_flows_poll_thread, + "Aged Flows Get Ctrl Thread", npc_aged_flows_get, roc_npc) !=3D 0) { plt_err("Failed to create thread for age flows"); errcode =3D NPC_ERR_ACTION_NOTSUP; @@ -295,7 +295,7 @@ npc_aging_ctrl_thread_destroy(struct roc_npc *roc_npc) flow_age =3D &roc_npc->flow_age; flow_age->aged_flows_get_thread_exit =3D true; - pthread_join(flow_age->aged_flows_poll_thread, NULL); + plt_thread_join(flow_age->aged_flows_poll_thread, NULL); npc_aged_flows_bitmap_free(roc_npc); } diff --git a/drivers/common/cnxk/roc_npc_priv.h b/drivers/common/cnxk/roc_npc_priv.h index 6d6cb64c65..424f8e207a 100644 --- a/drivers/common/cnxk/roc_npc_priv.h +++ b/drivers/common/cnxk/roc_npc_priv.h @@ -490,7 +490,7 @@ int npc_mcam_init(struct npc *npc, struct roc_npc_flow *flow, int mcam_id); int npc_mcam_move(struct mbox *mbox, uint16_t old_ent, uint16_t new_ent); void npc_age_flow_list_entry_add(struct roc_npc *npc, struct roc_npc_flow *flow); void npc_age_flow_list_entry_delete(struct roc_npc *npc, struct roc_npc_flow *flow); -void *npc_aged_flows_get(void *args); +uint32_t npc_aged_flows_get(void *args); int npc_aged_flows_bitmap_alloc(struct roc_npc *roc_npc); void npc_aged_flows_bitmap_free(struct roc_npc *roc_npc); int npc_aging_ctrl_thread_create(struct roc_npc *roc_npc, diff --git a/drivers/common/cnxk/roc_platform.h b/drivers/common/cnxk/roc_platform.h index ad0d1624a3..1e535a527d 100644 --- a/drivers/common/cnxk/roc_platform.h +++ b/drivers/common/cnxk/roc_platform.h @@ -145,6 +145,12 @@ #define plt_thread_create_control rte_thread_create_internal_control #define plt_thread_join rte_thread_join +static inline bool +plt_thread_is_valid(rte_thread_t thr) +{ + return thr.opaque_id ? true : false; +} + #define plt_intr_efd_counter_size_get rte_intr_efd_counter_size_get #define plt_intr_efd_counter_size_set rte_intr_efd_counter_size_set #define plt_intr_vec_list_index_get rte_intr_vec_list_index_get