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 0ED4F41E1C; Wed, 8 Mar 2023 10:31:55 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E32F340FAE; Wed, 8 Mar 2023 10:31:54 +0100 (CET) Received: from mail-vs1-f46.google.com (mail-vs1-f46.google.com [209.85.217.46]) by mails.dpdk.org (Postfix) with ESMTP id 2155540ED6 for ; Wed, 8 Mar 2023 10:31:52 +0100 (CET) Received: by mail-vs1-f46.google.com with SMTP id o32so14795790vsv.12 for ; Wed, 08 Mar 2023 01:31:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678267911; 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=AW8DRBny43xfqNhg76Jl8RxWQA9Tb+wmcLiSWgcUQUc=; b=CelDmZSK9iI8i2RHJ1WM40BanfK/N5jKvqgbXpYG9AO1/kdQaZh9R4g8yGdUVzjjEL SfkcGkf0PhNNqkHeFymNgxtPC/vbcGf1Q2Ns7LBrCCFjrpa/gFCIYlVqlf+k1/V5EK/s 4W4EGVbGhZM74qNKZSflKsUiPA6VebClJwW6PThYYQmK69i4FqxJDhg7NMF2TXGQYx3Q rU5q8682fyuJ31v7AXcN/rUt70cQwf/WIoHpNu23F67j89qnZlYLemMIDgKVD629HU9w L0cWpgoZlKOsBxS0SA8yi0vr+6n1AO6517VHBZyU34KPbzVDPhCqfPGZwYE3p6gBbca9 Yi+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678267911; 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=AW8DRBny43xfqNhg76Jl8RxWQA9Tb+wmcLiSWgcUQUc=; b=h/TH1unyypcG8R+XrWqjLpgGNdTRHkQIknd+3wH7B3mfPX1B4/HFZa/keGOVQpS9d1 e/cdfkeglDeUQgoVb3Q/EbKoEeFOX3Zg1aNZG8BwC0vF47UunPXMyMiCqd6vWx4Gcf21 7I+1E1KiilfV8PvTKqX1/yDZgXIaOZR8QKGZ8ixwynw3M186sCqapIqWtddPUFc/J8uE 9HA1q2r2d8E8Lzfr9PFXaI6BJ9gmxSiDYOD0zJ30BcQnqIgiD1O4clmq3slr9dVzqeh0 fhh9rstoqVqy6+btgD4121gWQlcHP3VttVCSc51NmwVbxb3nCi5Pl+a+wnd9JB13clP8 MYSw== X-Gm-Message-State: AO0yUKU/bsYXUziEkYrvkQWHj87Z3OlML3p35M2XWkFEmMwuryrKldSu UoBdmDV25T+GuhtQqyNbS1xCaw2DfuaLdcVmPvI= X-Google-Smtp-Source: AK7set9WlX5HfVzV+ga4ON3EaPkpsPNQWpGcrfZYmc9d/yU2nU7l9l4f76qZpNHrWkAPNL4MnPvCE2hBwdqdbQ4rhVQ= X-Received: by 2002:a05:6102:3167:b0:421:a2e2:cf30 with SMTP id l7-20020a056102316700b00421a2e2cf30mr11622620vsm.5.1678267911450; Wed, 08 Mar 2023 01:31:51 -0800 (PST) MIME-Version: 1.0 References: <20230306120853.849297-1-hpothula@marvell.com> <20230307104634.861726-1-hpothula@marvell.com> In-Reply-To: <20230307104634.861726-1-hpothula@marvell.com> From: Jerin Jacob Date: Wed, 8 Mar 2023 15:01:25 +0530 Message-ID: Subject: Re: [PATCH v2 1/1] drivers: remove implementation of Rx metadata negotiation To: Hanumanth Pothula Cc: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao , dev@dpdk.org, jerinj@marvell.com 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 Tue, Mar 7, 2023 at 4:16=E2=80=AFPM Hanumanth Pothula wrote: > > Presently, Rx metadata is sent to PMD by default, leading > to a performance drop as processing for the same in Rx path > takes extra cycles. > > Hence, removing driver implementation of Rx metadata negotiation > and falling back to old implementation where mark actions are > tracked as part of the flow rule. > > Signed-off-by: Hanumanth Pothula Updated the git commit as follows and applied to dpdk-next-net-mrvl/for-next-net. Thanks net/cnxk: remove Rx metadata negotiation > --- > v2: Remove explicit initializations. > --- > drivers/common/cnxk/roc_npc.c | 19 +++++++++++++++++++ > drivers/common/cnxk/roc_npc.h | 3 +++ > drivers/common/cnxk/roc_npc_priv.h | 1 + > drivers/common/cnxk/version.map | 2 ++ > drivers/net/cnxk/cn10k_ethdev.c | 26 -------------------------- > drivers/net/cnxk/cn10k_flow.c | 19 +++++++++++++++++++ > drivers/net/cnxk/cn9k_ethdev.c | 25 ------------------------- > drivers/net/cnxk/cn9k_flow.c | 20 ++++++++++++++++++++ > drivers/net/cnxk/cnxk_ethdev.h | 1 - > 9 files changed, 64 insertions(+), 52 deletions(-) > > diff --git a/drivers/common/cnxk/roc_npc.c b/drivers/common/cnxk/roc_npc.= c > index a795114326..47536c8ce8 100644 > --- a/drivers/common/cnxk/roc_npc.c > +++ b/drivers/common/cnxk/roc_npc.c > @@ -5,6 +5,23 @@ > #include "roc_api.h" > #include "roc_priv.h" > > +int > +roc_npc_mark_actions_get(struct roc_npc *roc_npc) > +{ > + struct npc *npc =3D roc_npc_to_npc_priv(roc_npc); > + > + return npc->mark_actions; > +} > + > +int > +roc_npc_mark_actions_sub_return(struct roc_npc *roc_npc, uint32_t count) > +{ > + struct npc *npc =3D roc_npc_to_npc_priv(roc_npc); > + > + npc->mark_actions -=3D count; > + return npc->mark_actions; > +} > + > int > roc_npc_vtag_actions_get(struct roc_npc *roc_npc) > { > @@ -488,12 +505,14 @@ npc_parse_actions(struct roc_npc *roc_npc, const st= ruct roc_npc_attr *attr, > } > mark =3D act_mark->id + 1; > req_act |=3D ROC_NPC_ACTION_TYPE_MARK; > + npc->mark_actions +=3D 1; > flow->match_id =3D mark; > break; > > case ROC_NPC_ACTION_TYPE_FLAG: > mark =3D NPC_FLOW_FLAG_VAL; > req_act |=3D ROC_NPC_ACTION_TYPE_FLAG; > + npc->mark_actions +=3D 1; > break; > > case ROC_NPC_ACTION_TYPE_COUNT: > diff --git a/drivers/common/cnxk/roc_npc.h b/drivers/common/cnxk/roc_npc.= h > index 5e07e26a91..61d0628f5f 100644 > --- a/drivers/common/cnxk/roc_npc.h > +++ b/drivers/common/cnxk/roc_npc.h > @@ -397,6 +397,9 @@ int __roc_api roc_npc_mcam_free_all_resources(struct = roc_npc *roc_npc); > void __roc_api roc_npc_flow_dump(FILE *file, struct roc_npc *roc_npc); > void __roc_api roc_npc_flow_mcam_dump(FILE *file, struct roc_npc *roc_np= c, > struct roc_npc_flow *mcam); > +int __roc_api roc_npc_mark_actions_get(struct roc_npc *roc_npc); > +int __roc_api roc_npc_mark_actions_sub_return(struct roc_npc *roc_npc, > + uint32_t count); > int __roc_api roc_npc_vtag_actions_get(struct roc_npc *roc_npc); > int __roc_api roc_npc_vtag_actions_sub_return(struct roc_npc *roc_npc, > uint32_t count); > diff --git a/drivers/common/cnxk/roc_npc_priv.h b/drivers/common/cnxk/roc= _npc_priv.h > index 08d763eeb4..714dcb09c9 100644 > --- a/drivers/common/cnxk/roc_npc_priv.h > +++ b/drivers/common/cnxk/roc_npc_priv.h > @@ -393,6 +393,7 @@ struct npc { > uint16_t flow_prealloc_size; /* Pre allocated mcam siz= e */ > uint16_t flow_max_priority; /* Max priority for flow = */ > uint16_t switch_header_type; /* Supported switch header type */ > + uint32_t mark_actions; > uint32_t vtag_strip_actions; /* vtag insert/strip actions */ > uint16_t pf_func; /* pf_func of device */ > npc_dxcfg_t prx_dxcfg; /* intf, lid, lt, extract */ > diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/versio= n.map > index 5d2b75fb5a..3eff3870d1 100644 > --- a/drivers/common/cnxk/version.map > +++ b/drivers/common/cnxk/version.map > @@ -344,6 +344,8 @@ INTERNAL { > roc_npc_flow_parse; > roc_npc_get_low_priority_mcam; > roc_npc_init; > + roc_npc_mark_actions_get; > + roc_npc_mark_actions_sub_return; > roc_npc_vtag_actions_get; > roc_npc_vtag_actions_sub_return; > roc_npc_mcam_alloc_entries; > diff --git a/drivers/net/cnxk/cn10k_ethdev.c b/drivers/net/cnxk/cn10k_eth= dev.c > index b84fed6d90..512b9c2597 100644 > --- a/drivers/net/cnxk/cn10k_ethdev.c > +++ b/drivers/net/cnxk/cn10k_ethdev.c > @@ -39,9 +39,6 @@ nix_rx_offload_flags(struct rte_eth_dev *eth_dev) > if (dev->rx_offloads & RTE_ETH_RX_OFFLOAD_SECURITY) > flags |=3D NIX_RX_OFFLOAD_SECURITY_F; > > - if (dev->rx_mark_update) > - flags |=3D NIX_RX_OFFLOAD_MARK_UPDATE_F; > - > return flags; > } > > @@ -562,27 +559,6 @@ cn10k_nix_dev_start(struct rte_eth_dev *eth_dev) > return 0; > } > > -static int > -cn10k_nix_rx_metadata_negotiate(struct rte_eth_dev *eth_dev, uint64_t *f= eatures) > -{ > - struct cnxk_eth_dev *dev =3D cnxk_eth_pmd_priv(eth_dev); > - > - *features &=3D > - (RTE_ETH_RX_METADATA_USER_FLAG | RTE_ETH_RX_METADATA_USER= _MARK); > - > - if (*features) { > - dev->rx_offload_flags |=3D NIX_RX_OFFLOAD_MARK_UPDATE_F; > - dev->rx_mark_update =3D true; > - } else { > - dev->rx_offload_flags &=3D ~NIX_RX_OFFLOAD_MARK_UPDATE_F; > - dev->rx_mark_update =3D false; > - } > - > - cn10k_eth_set_rx_function(eth_dev); > - > - return 0; > -} > - > static int > cn10k_nix_reassembly_capability_get(struct rte_eth_dev *eth_dev, > struct rte_eth_ip_reassembly_params *reassembly_capa) > @@ -770,8 +746,6 @@ nix_eth_dev_ops_override(void) > cnxk_eth_dev_ops.dev_ptypes_set =3D cn10k_nix_ptypes_set; > cnxk_eth_dev_ops.timesync_enable =3D cn10k_nix_timesync_enable; > cnxk_eth_dev_ops.timesync_disable =3D cn10k_nix_timesync_disable; > - cnxk_eth_dev_ops.rx_metadata_negotiate =3D > - cn10k_nix_rx_metadata_negotiate; > cnxk_eth_dev_ops.timesync_read_tx_timestamp =3D > cn10k_nix_timesync_read_tx_timestamp; > cnxk_eth_dev_ops.ip_reassembly_capability_get =3D > diff --git a/drivers/net/cnxk/cn10k_flow.c b/drivers/net/cnxk/cn10k_flow.= c > index 2ce9e1de74..d7a3442c5f 100644 > --- a/drivers/net/cnxk/cn10k_flow.c > +++ b/drivers/net/cnxk/cn10k_flow.c > @@ -135,6 +135,7 @@ cn10k_flow_create(struct rte_eth_dev *eth_dev, const = struct rte_flow_attr *attr, > struct roc_npc_flow *flow; > int vtag_actions =3D 0; > uint32_t req_act =3D 0; > + int mark_actions; > int i, rc; > > for (i =3D 0; actions[i].type !=3D RTE_FLOW_ACTION_TYPE_END; i++)= { > @@ -197,6 +198,12 @@ cn10k_flow_create(struct rte_eth_dev *eth_dev, const= struct rte_flow_attr *attr, > cn10k_mtr_connect(eth_dev, mtr->mtr_id); > } > > + mark_actions =3D roc_npc_mark_actions_get(npc); > + if (mark_actions) { > + dev->rx_offload_flags |=3D NIX_RX_OFFLOAD_MARK_UPDATE_F; > + cn10k_eth_set_rx_function(eth_dev); > + } > + > vtag_actions =3D roc_npc_vtag_actions_get(npc); > > if (vtag_actions) { > @@ -231,9 +238,21 @@ cn10k_flow_destroy(struct rte_eth_dev *eth_dev, stru= ct rte_flow *rte_flow, > struct cnxk_eth_dev *dev =3D cnxk_eth_pmd_priv(eth_dev); > struct roc_npc *npc =3D &dev->npc; > int vtag_actions =3D 0; > + int mark_actions; > + uint16_t match_id; > uint32_t mtr_id; > int rc; > > + match_id =3D (flow->npc_action >> NPC_RX_ACT_MATCH_OFFSET) & > + NPC_RX_ACT_MATCH_MASK; > + if (match_id) { > + mark_actions =3D roc_npc_mark_actions_sub_return(npc, 1); > + if (mark_actions =3D=3D 0) { > + dev->rx_offload_flags &=3D ~NIX_RX_OFFLOAD_MARK_U= PDATE_F; > + cn10k_eth_set_rx_function(eth_dev); > + } > + } > + > vtag_actions =3D roc_npc_vtag_actions_get(npc); > if (vtag_actions) { > if (flow->nix_intf =3D=3D ROC_NPC_INTF_RX) { > diff --git a/drivers/net/cnxk/cn9k_ethdev.c b/drivers/net/cnxk/cn9k_ethde= v.c > index e5c3074d91..e55a2aa133 100644 > --- a/drivers/net/cnxk/cn9k_ethdev.c > +++ b/drivers/net/cnxk/cn9k_ethdev.c > @@ -39,9 +39,6 @@ nix_rx_offload_flags(struct rte_eth_dev *eth_dev) > if (dev->rx_offloads & RTE_ETH_RX_OFFLOAD_SECURITY) > flags |=3D NIX_RX_OFFLOAD_SECURITY_F; > > - if (dev->rx_mark_update) > - flags |=3D NIX_RX_OFFLOAD_MARK_UPDATE_F; > - > return flags; > } > > @@ -541,27 +538,6 @@ cn9k_nix_timesync_read_tx_timestamp(struct rte_eth_d= ev *eth_dev, > return 0; > } > > -static int > -cn9k_nix_rx_metadata_negotiate(struct rte_eth_dev *eth_dev, uint64_t *fe= atures) > -{ > - struct cnxk_eth_dev *dev =3D cnxk_eth_pmd_priv(eth_dev); > - > - *features &=3D > - (RTE_ETH_RX_METADATA_USER_FLAG | RTE_ETH_RX_METADATA_USER= _MARK); > - > - if (*features) { > - dev->rx_offload_flags |=3D NIX_RX_OFFLOAD_MARK_UPDATE_F; > - dev->rx_mark_update =3D true; > - } else { > - dev->rx_offload_flags &=3D ~NIX_RX_OFFLOAD_MARK_UPDATE_F; > - dev->rx_mark_update =3D false; > - } > - > - cn9k_eth_set_rx_function(eth_dev); > - > - return 0; > -} > - > static int > cn9k_nix_tm_mark_vlan_dei(struct rte_eth_dev *eth_dev, int mark_green, > int mark_yellow, int mark_red, > @@ -695,7 +671,6 @@ nix_eth_dev_ops_override(void) > cnxk_eth_dev_ops.timesync_enable =3D cn9k_nix_timesync_enable; > cnxk_eth_dev_ops.timesync_disable =3D cn9k_nix_timesync_disable; > cnxk_eth_dev_ops.mtr_ops_get =3D NULL; > - cnxk_eth_dev_ops.rx_metadata_negotiate =3D cn9k_nix_rx_metadata_n= egotiate; > cnxk_eth_dev_ops.timesync_read_tx_timestamp =3D > cn9k_nix_timesync_read_tx_timestamp; > } > diff --git a/drivers/net/cnxk/cn9k_flow.c b/drivers/net/cnxk/cn9k_flow.c > index a418af185d..dc5476a189 100644 > --- a/drivers/net/cnxk/cn9k_flow.c > +++ b/drivers/net/cnxk/cn9k_flow.c > @@ -16,11 +16,19 @@ cn9k_flow_create(struct rte_eth_dev *eth_dev, const s= truct rte_flow_attr *attr, > struct roc_npc *npc =3D &dev->npc; > struct roc_npc_flow *flow; > int vtag_actions =3D 0; > + int mark_actions; > > flow =3D cnxk_flow_create(eth_dev, attr, pattern, actions, error)= ; > if (!flow) > return NULL; > > + mark_actions =3D roc_npc_mark_actions_get(npc); > + > + if (mark_actions) { > + dev->rx_offload_flags |=3D NIX_RX_OFFLOAD_MARK_UPDATE_F; > + cn9k_eth_set_rx_function(eth_dev); > + } > + > vtag_actions =3D roc_npc_vtag_actions_get(npc); > > if (vtag_actions) { > @@ -39,6 +47,18 @@ cn9k_flow_destroy(struct rte_eth_dev *eth_dev, struct = rte_flow *rte_flow, > struct cnxk_eth_dev *dev =3D cnxk_eth_pmd_priv(eth_dev); > struct roc_npc *npc =3D &dev->npc; > int vtag_actions =3D 0; > + uint16_t match_id; > + int mark_actions; > + > + match_id =3D (flow->npc_action >> NPC_RX_ACT_MATCH_OFFSET) & > + NPC_RX_ACT_MATCH_MASK; > + if (match_id) { > + mark_actions =3D roc_npc_mark_actions_sub_return(npc, 1); > + if (mark_actions =3D=3D 0) { > + dev->rx_offload_flags &=3D ~NIX_RX_OFFLOAD_MARK_U= PDATE_F; > + cn9k_eth_set_rx_function(eth_dev); > + } > + } > > vtag_actions =3D roc_npc_vtag_actions_get(npc); > if (vtag_actions) { > diff --git a/drivers/net/cnxk/cnxk_ethdev.h b/drivers/net/cnxk/cnxk_ethde= v.h > index f0eab4244c..59a06292d8 100644 > --- a/drivers/net/cnxk/cnxk_ethdev.h > +++ b/drivers/net/cnxk/cnxk_ethdev.h > @@ -315,7 +315,6 @@ struct cnxk_eth_dev { > bool tx_compl_ena; > bool tx_mark; > bool ptp_en; > - bool rx_mark_update; /* Enable/Disable mark update to mbuf */ > > /* Pointer back to rte */ > struct rte_eth_dev *eth_dev; > -- > 2.25.1 >