[dpdk-dev] [PATCH v2 08/15] net/bnxt: switch CFA code to dynamic mbuf field
Ajit Khaparde
ajit.khaparde at broadcom.com
Tue Oct 27 05:44:40 CET 2020
On Mon, Oct 26, 2020 at 3:20 PM Thomas Monjalon <thomas at 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 <thomas at monjalon.net>
Acked-by: Ajit Khaparde <ajit.khaparde at 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
>
More information about the dev
mailing list