On Mon, Oct 26, 2020 at 3:20 PM Thomas Monjalon <tho...@monjalon.net> wrote:
>
> The CFA code from mark was stored in the deprecated mbuf field udata64.
> It is moved to a dynamic field in order to allow removal of udata64.
>
> Note: the new field has 32 bits, smaller than udata64.
>
> Signed-off-by: Thomas Monjalon <tho...@monjalon.net>

Acked-by: Ajit Khaparde <ajit.khapa...@broadcom.com>

>
> ---
>  drivers/net/bnxt/bnxt_ethdev.c  | 19 +++++++++++++++++++
>  drivers/net/bnxt/bnxt_rxr.c     |  2 +-
>  drivers/net/bnxt/bnxt_rxr.h     |  5 +++++
>  drivers/net/bnxt/rte_pmd_bnxt.h |  3 +++
>  4 files changed, 28 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
> index 1c7d1b758d..1090d28341 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -31,6 +31,7 @@
>  #include "bnxt_nvm_defs.h"
>  #include "bnxt_tf_common.h"
>  #include "ulp_flow_db.h"
> +#include "rte_pmd_bnxt.h"
>
>  #define DRV_MODULE_NAME                "bnxt"
>  static const char bnxt_version[] =
> @@ -163,6 +164,8 @@ static const char *const bnxt_dev_args[] = {
>   */
>  #define BNXT_DEVARG_REP_FC_F2R_INVALID(rep_fc_f2r)     ((rep_fc_f2r) > 1)
>
> +int bnxt_cfa_code_dynfield_offset;
> +
>  /*
>   * max_num_kflows must be >= 32
>   * and must be a power-of-2 supported value
> @@ -6021,6 +6024,22 @@ bnxt_dev_init(struct rte_eth_dev *eth_dev, void 
> *params __rte_unused)
>             pci_dev->id.device_id == BROADCOM_DEV_ID_58802_VF)
>                 bp->flags |= BNXT_FLAG_STINGRAY;
>
> +       if (BNXT_TRUFLOW_EN(bp)) {
> +               /* extra mbuf field is required to store CFA code from mark */
> +               static const struct rte_mbuf_dynfield 
> bnxt_cfa_code_dynfield_desc = {
> +                       .name = RTE_PMD_BNXT_CFA_CODE_DYNFIELD_NAME,
> +                       .size = sizeof(BNXT_CFA_CODE_DYNFIELD_TYPE),
> +                       .align = __alignof__(BNXT_CFA_CODE_DYNFIELD_TYPE),
> +               };
> +               bnxt_cfa_code_dynfield_offset =
> +                       
> rte_mbuf_dynfield_register(&bnxt_cfa_code_dynfield_desc);
> +               if (bnxt_cfa_code_dynfield_offset < 0) {
> +                       PMD_DRV_LOG(ERR,
> +                           "Failed to register mbuf field for TruFlow 
> mark\n");
> +                       return -rte_errno;
> +               }
> +       }
> +
>         rc = bnxt_init_board(eth_dev);
>         if (rc) {
>                 PMD_DRV_LOG(ERR,
> diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c
> index 039217fa60..7156ce7dd8 100644
> --- a/drivers/net/bnxt/bnxt_rxr.c
> +++ b/drivers/net/bnxt/bnxt_rxr.c
> @@ -606,7 +606,7 @@ bnxt_ulp_set_mark_in_mbuf(struct bnxt *bp, struct 
> rx_pkt_cmpl_hi *rxcmp1,
>                         return mark_id;
>                 /* Got the mark, write it to the mbuf and return */
>                 mbuf->hash.fdir.hi = mark_id;
> -               mbuf->udata64 = (cfa_code & 0xffffffffull) << 32;
> +               BNXT_CFA_CODE_DYNFIELD(mbuf) = cfa_code & 0xffffffffull;
>                 mbuf->hash.fdir.id = rxcmp1->cfa_code;
>                 mbuf->ol_flags |= PKT_RX_FDIR | PKT_RX_FDIR_ID;
>                 return mark_id;
> diff --git a/drivers/net/bnxt/bnxt_rxr.h b/drivers/net/bnxt/bnxt_rxr.h
> index b874e54a8c..e01d3e4f18 100644
> --- a/drivers/net/bnxt/bnxt_rxr.h
> +++ b/drivers/net/bnxt/bnxt_rxr.h
> @@ -95,6 +95,11 @@ void bnxt_set_mark_in_mbuf(struct bnxt *bp,
>                            struct rx_pkt_cmpl_hi *rxcmp1,
>                            struct rte_mbuf *mbuf);
>
> +extern int bnxt_cfa_code_dynfield_offset;
> +#define BNXT_CFA_CODE_DYNFIELD_TYPE uint32_t
> +#define BNXT_CFA_CODE_DYNFIELD(mbuf) (*RTE_MBUF_DYNFIELD(mbuf, \
> +               bnxt_cfa_code_dynfield_offset, BNXT_CFA_CODE_DYNFIELD_TYPE *))
> +
>  #define BNXT_RX_META_CFA_CODE_SHIFT            19
>  #define BNXT_CFA_CODE_META_SHIFT               16
>  #define BNXT_RX_META_CFA_CODE_INT_ACT_REC_BIT  0x8000000
> diff --git a/drivers/net/bnxt/rte_pmd_bnxt.h b/drivers/net/bnxt/rte_pmd_bnxt.h
> index 81d0d0e032..8d3303bb0f 100644
> --- a/drivers/net/bnxt/rte_pmd_bnxt.h
> +++ b/drivers/net/bnxt/rte_pmd_bnxt.h
> @@ -9,6 +9,9 @@
>  #include <rte_ethdev.h>
>  #include <rte_ether.h>
>
> +/* mbuf dynfield where CFA code is stored */
> +#define RTE_PMD_BNXT_CFA_CODE_DYNFIELD_NAME "rte_net_bnxt_dynfield_cfa_code"
> +
>  /*
>   * Response sent back to the caller after callback
>   */
> --
> 2.28.0
>

Reply via email to