net/octeontx2: extend RSS supported offload types
Checks
Commit Message
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
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
>
> -----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
> >
@@ -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 {
@@ -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];