net/octeontx2: extend RSS supported offload types

Message ID 20200122034609.19100-1-kirankumark@marvell.com (mailing list archive)
State Superseded, archived
Delegated to: Jerin Jacob
Headers
Series net/octeontx2: extend RSS supported offload types |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-testing success Testing PASS
ci/iol-nxp-Performance success Performance Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/Intel-compilation fail Compilation issues
ci/travis-robot success Travis build: passed
ci/iol-intel-Performance success Performance Testing PASS

Commit Message

Kiran Kumar Kokkilagadda Jan. 22, 2020, 3:46 a.m. UTC
  From: Kiran Kumar K <kirankumark@marvell.com>

Extend RSS offload types for octeontx2. Add support to select
L3 SRC, L3 DST, L4 SRC and L4 DST for RSS calculation.

Add support to select L3 SRC or DST only, L4 SRC or DST only for RSS
calculation.

With this requirement there will be following combinations,
IPV[4,6]_SRC_ONLY, IPV[4,6]_DST_ONLY, [TCP,UDP,SCTP]_SRC_ONLY,
[TCP,UDP,SCTP]_DST_ONLY. So, instead of creating a bit for each
combination, we are using upper 4 bits (31:28) in the flow_key_cfg
to represent the SRC, DST selection. 31 => L3_SRC, 30 => L3_DST,
29 => L4_SRC, 28 => L4_DST. These won't be part of flow_cfg, so that
we don't need to change the existing ABI.

Signed-off-by: Kiran Kumar K <kirankumark@marvell.com>
---
 drivers/common/octeontx2/otx2_mbox.h |  6 +++++-
 drivers/net/octeontx2/otx2_rss.c     | 12 ++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)
  

Comments

Jerin Jacob Jan. 22, 2020, 8:05 a.m. UTC | #1
On Wed, Jan 22, 2020 at 9:16 AM <kirankumark@marvell.com> wrote:
>
> From: Kiran Kumar K <kirankumark@marvell.com>
>
> Extend RSS offload types for octeontx2. Add support to select
> L3 SRC, L3 DST, L4 SRC and L4 DST for RSS calculation.
>
> Add support to select L3 SRC or DST only, L4 SRC or DST only for RSS
> calculation.
>
> With this requirement there will be following combinations,
> IPV[4,6]_SRC_ONLY, IPV[4,6]_DST_ONLY, [TCP,UDP,SCTP]_SRC_ONLY,
> [TCP,UDP,SCTP]_DST_ONLY. So, instead of creating a bit for each
> combination, we are using upper 4 bits (31:28) in the flow_key_cfg
> to represent the SRC, DST selection. 31 => L3_SRC, 30 => L3_DST,
> 29 => L4_SRC, 28 => L4_DST. These won't be part of flow_cfg, so that
> we don't need to change the existing ABI.
>
> Signed-off-by: Kiran Kumar K <kirankumark@marvell.com>
> ---
>
>  struct nix_rss_flowkey_cfg_rsp {
> diff --git a/drivers/net/octeontx2/otx2_rss.c b/drivers/net/octeontx2/otx2_rss.c
> index bc7b64387..7a8c8f3de 100644
> --- a/drivers/net/octeontx2/otx2_rss.c
> +++ b/drivers/net/octeontx2/otx2_rss.c
> @@ -210,6 +210,18 @@ otx2_rss_ethdev_to_nix(struct otx2_eth_dev *dev, uint64_t ethdev_rss,
>
>         dev->rss_info.nix_rss = ethdev_rss;
>

Should n't we update the struct
rte_eth_dev_info::flow_type_rss_offloads to show this capability to
the driver. Please check other drivers.



> +       if (ethdev_rss & ETH_RSS_L3_SRC_ONLY)
> +               flowkey_cfg |= FLOW_KEY_TYPE_L3_SRC;
> +
> +       if (ethdev_rss & ETH_RSS_L3_DST_ONLY)
> +               flowkey_cfg |= FLOW_KEY_TYPE_L3_DST;
> +
> +       if (ethdev_rss & ETH_RSS_L4_SRC_ONLY)
> +               flowkey_cfg |= FLOW_KEY_TYPE_L4_SRC;
> +
> +       if (ethdev_rss & ETH_RSS_L4_DST_ONLY)
> +               flowkey_cfg |= FLOW_KEY_TYPE_L4_DST;
> +
>         if (ethdev_rss & RSS_IPV4_ENABLE)
>                 flowkey_cfg |= flow_key_type[rss_level][RSS_IPV4_INDEX];
>
> --
> 2.17.1
>
  
Kiran Kumar Kokkilagadda Jan. 23, 2020, 5:30 a.m. UTC | #2
> -----Original Message-----
> From: Jerin Jacob <jerinjacobk@gmail.com>
> Sent: Wednesday, January 22, 2020 1:35 PM
> To: Kiran Kumar Kokkilagadda <kirankumark@marvell.com>
> Cc: Jerin Jacob Kollanukkaran <jerinj@marvell.com>; Nithin Kumar Dabilpuram
> <ndabilpuram@marvell.com>; Vamsi Krishna Attunuru
> <vattunuru@marvell.com>; dpdk-dev <dev@dpdk.org>
> Subject: [EXT] Re: [dpdk-dev] [PATCH] net/octeontx2: extend RSS supported
> offload types
> 
> External Email
> 
> ----------------------------------------------------------------------
> On Wed, Jan 22, 2020 at 9:16 AM <kirankumark@marvell.com> wrote:
> >
> > From: Kiran Kumar K <kirankumark@marvell.com>
> >
> > Extend RSS offload types for octeontx2. Add support to select
> > L3 SRC, L3 DST, L4 SRC and L4 DST for RSS calculation.
> >
> > Add support to select L3 SRC or DST only, L4 SRC or DST only for RSS
> > calculation.
> >
> > With this requirement there will be following combinations,
> > IPV[4,6]_SRC_ONLY, IPV[4,6]_DST_ONLY, [TCP,UDP,SCTP]_SRC_ONLY,
> > [TCP,UDP,SCTP]_DST_ONLY. So, instead of creating a bit for each
> > combination, we are using upper 4 bits (31:28) in the flow_key_cfg to
> > represent the SRC, DST selection. 31 => L3_SRC, 30 => L3_DST,
> > 29 => L4_SRC, 28 => L4_DST. These won't be part of flow_cfg, so that
> > we don't need to change the existing ABI.
> >
> > Signed-off-by: Kiran Kumar K <kirankumark@marvell.com>
> > ---
> >
> >  struct nix_rss_flowkey_cfg_rsp {
> > diff --git a/drivers/net/octeontx2/otx2_rss.c
> > b/drivers/net/octeontx2/otx2_rss.c
> > index bc7b64387..7a8c8f3de 100644
> > --- a/drivers/net/octeontx2/otx2_rss.c
> > +++ b/drivers/net/octeontx2/otx2_rss.c
> > @@ -210,6 +210,18 @@ otx2_rss_ethdev_to_nix(struct otx2_eth_dev *dev,
> > uint64_t ethdev_rss,
> >
> >         dev->rss_info.nix_rss = ethdev_rss;
> >
> 
> Should n't we update the struct
> rte_eth_dev_info::flow_type_rss_offloads to show this capability to the driver.
> Please check other drivers.

Verified with testpmd. I need to update the supported RSS offloads. Will send V2.

> 
> 
> 
> > +       if (ethdev_rss & ETH_RSS_L3_SRC_ONLY)
> > +               flowkey_cfg |= FLOW_KEY_TYPE_L3_SRC;
> > +
> > +       if (ethdev_rss & ETH_RSS_L3_DST_ONLY)
> > +               flowkey_cfg |= FLOW_KEY_TYPE_L3_DST;
> > +
> > +       if (ethdev_rss & ETH_RSS_L4_SRC_ONLY)
> > +               flowkey_cfg |= FLOW_KEY_TYPE_L4_SRC;
> > +
> > +       if (ethdev_rss & ETH_RSS_L4_DST_ONLY)
> > +               flowkey_cfg |= FLOW_KEY_TYPE_L4_DST;
> > +
> >         if (ethdev_rss & RSS_IPV4_ENABLE)
> >                 flowkey_cfg |=
> > flow_key_type[rss_level][RSS_IPV4_INDEX];
> >
> > --
> > 2.17.1
> >
  

Patch

diff --git a/drivers/common/octeontx2/otx2_mbox.h b/drivers/common/octeontx2/otx2_mbox.h
index e0e4e2f63..4972b8a6e 100644
--- a/drivers/common/octeontx2/otx2_mbox.h
+++ b/drivers/common/octeontx2/otx2_mbox.h
@@ -918,7 +918,11 @@  struct nix_rss_flowkey_cfg {
 #define FLOW_KEY_TYPE_INNR_UDP      BIT(15)
 #define FLOW_KEY_TYPE_INNR_SCTP     BIT(16)
 #define FLOW_KEY_TYPE_INNR_ETH_DMAC BIT(17)
-	uint8_t	group;       /* RSS context or group */
+#define FLOW_KEY_TYPE_L4_DST BIT(28)
+#define FLOW_KEY_TYPE_L4_SRC BIT(29)
+#define FLOW_KEY_TYPE_L3_DST BIT(30)
+#define FLOW_KEY_TYPE_L3_SRC BIT(31)
+	uint8_t	__otx2_io group;       /* RSS context or group */
 };
 
 struct nix_rss_flowkey_cfg_rsp {
diff --git a/drivers/net/octeontx2/otx2_rss.c b/drivers/net/octeontx2/otx2_rss.c
index bc7b64387..7a8c8f3de 100644
--- a/drivers/net/octeontx2/otx2_rss.c
+++ b/drivers/net/octeontx2/otx2_rss.c
@@ -210,6 +210,18 @@  otx2_rss_ethdev_to_nix(struct otx2_eth_dev *dev, uint64_t ethdev_rss,
 
 	dev->rss_info.nix_rss = ethdev_rss;
 
+	if (ethdev_rss & ETH_RSS_L3_SRC_ONLY)
+		flowkey_cfg |= FLOW_KEY_TYPE_L3_SRC;
+
+	if (ethdev_rss & ETH_RSS_L3_DST_ONLY)
+		flowkey_cfg |= FLOW_KEY_TYPE_L3_DST;
+
+	if (ethdev_rss & ETH_RSS_L4_SRC_ONLY)
+		flowkey_cfg |= FLOW_KEY_TYPE_L4_SRC;
+
+	if (ethdev_rss & ETH_RSS_L4_DST_ONLY)
+		flowkey_cfg |= FLOW_KEY_TYPE_L4_DST;
+
 	if (ethdev_rss & RSS_IPV4_ENABLE)
 		flowkey_cfg |= flow_key_type[rss_level][RSS_IPV4_INDEX];