DPDK patches and discussions
 help / color / mirror / Atom feed
From: Jerin Jacob <jerinjacobk@gmail.com>
To: Nithin Dabilpuram <ndabilpuram@marvell.com>
Cc: Jerin Jacob <jerinj@marvell.com>,
	Kiran Kumar K <kirankumark@marvell.com>,
	 Sunil Kumar Kori <skori@marvell.com>,
	Satha Rao <skoteshwar@marvell.com>, Ray Kinsella <mdr@ashroe.eu>,
	dpdk-dev <dev@dpdk.org>
Subject: Re: [PATCH v3 28/28] common/cnxk: add support for per-port RQ in inline device
Date: Sat, 7 May 2022 15:50:34 +0530	[thread overview]
Message-ID: <CALBAE1NsX-PEo7mc0ubmOAQL9QdhoM0JdYZFBf5g7J+yZKVGcg@mail.gmail.com> (raw)
In-Reply-To: <20220505125557.8828-28-ndabilpuram@marvell.com>

On Thu, May 5, 2022 at 6:29 PM Nithin Dabilpuram
<ndabilpuram@marvell.com> wrote:
>
> Add support for per port RQ in inline device thereby using
> Aura/Pool attributes from that port specific first RQ.
> When inline device is used with channel masking, it will
> fallback to single RQ for all ethdev ports.
>
> Also remove clamping up of CQ size for LBK ethdev when
> inline inbound is enabled as now backpressure is supported
> even on LBK ethdevs.
>
> Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>


Build failure at http://mails.dpdk.org/archives/test-report/2022-May/278683.html
Please send next version.


> ---
>  drivers/common/cnxk/roc_nix.h             |   2 +-
>  drivers/common/cnxk/roc_nix_debug.c       |   7 +-
>  drivers/common/cnxk/roc_nix_inl.c         |  81 ++++++++--------
>  drivers/common/cnxk/roc_nix_inl.h         |   5 +-
>  drivers/common/cnxk/roc_nix_inl_dev.c     |  42 ++++++--
>  drivers/common/cnxk/roc_nix_inl_dev_irq.c | 155 +++++++++++++++++++-----------
>  drivers/common/cnxk/roc_nix_inl_priv.h    |  12 ++-
>  drivers/common/cnxk/roc_npc.c             |  13 ++-
>  drivers/common/cnxk/version.map           |   1 -
>  drivers/net/cnxk/cnxk_ethdev.c            |  14 +--
>  10 files changed, 202 insertions(+), 130 deletions(-)
>
> diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h
> index 1019e37..1c38af0 100644
> --- a/drivers/common/cnxk/roc_nix.h
> +++ b/drivers/common/cnxk/roc_nix.h
> @@ -309,7 +309,7 @@ struct roc_nix_rq {
>         bool spb_drop_ena;
>         /* End of Input parameters */
>         struct roc_nix *roc_nix;
> -       bool inl_dev_ref;
> +       uint16_t inl_dev_refs;
>  };
>
>  struct roc_nix_cq {
> diff --git a/drivers/common/cnxk/roc_nix_debug.c b/drivers/common/cnxk/roc_nix_debug.c
> index 1ae0451..e05e60d 100644
> --- a/drivers/common/cnxk/roc_nix_debug.c
> +++ b/drivers/common/cnxk/roc_nix_debug.c
> @@ -826,7 +826,7 @@ roc_nix_rq_dump(struct roc_nix_rq *rq)
>         nix_dump("  vwqe_wait_tmo = %ld", rq->vwqe_wait_tmo);
>         nix_dump("  vwqe_aura_handle = %ld", rq->vwqe_aura_handle);
>         nix_dump("  roc_nix = %p", rq->roc_nix);
> -       nix_dump("  inl_dev_ref = %d", rq->inl_dev_ref);
> +       nix_dump("  inl_dev_refs = %d", rq->inl_dev_refs);
>  }
>
>  void
> @@ -1243,6 +1243,7 @@ roc_nix_inl_dev_dump(struct roc_nix_inl_dev *roc_inl_dev)
>         struct nix_inl_dev *inl_dev =
>                 (struct nix_inl_dev *)&roc_inl_dev->reserved;
>         struct dev *dev = &inl_dev->dev;
> +       int i;
>
>         nix_dump("nix_inl_dev@%p", inl_dev);
>         nix_dump("  pf = %d", dev_get_pf(dev->pf_func));
> @@ -1259,7 +1260,6 @@ roc_nix_inl_dev_dump(struct roc_nix_inl_dev *roc_inl_dev)
>         nix_dump("  \tssow_msixoff = %d", inl_dev->ssow_msixoff);
>         nix_dump("  \tnix_cints = %d", inl_dev->cints);
>         nix_dump("  \tnix_qints = %d", inl_dev->qints);
> -       nix_dump("  \trq_refs = %d", inl_dev->rq_refs);
>         nix_dump("  \tinb_sa_base = 0x%p", inl_dev->inb_sa_base);
>         nix_dump("  \tinb_sa_sz = %d", inl_dev->inb_sa_sz);
>         nix_dump("  \txaq_buf_size = %u", inl_dev->xaq_buf_size);
> @@ -1269,5 +1269,6 @@ roc_nix_inl_dev_dump(struct roc_nix_inl_dev *roc_inl_dev)
>         nix_dump("  \txaq_mem = 0x%p", inl_dev->xaq.mem);
>
>         nix_dump("  \tinl_dev_rq:");
> -       roc_nix_rq_dump(&inl_dev->rq);
> +       for (i = 0; i < inl_dev->nb_rqs; i++)
> +               roc_nix_rq_dump(&inl_dev->rqs[i]);
>  }
> diff --git a/drivers/common/cnxk/roc_nix_inl.c b/drivers/common/cnxk/roc_nix_inl.c
> index 05c663d..28d01b0 100644
> --- a/drivers/common/cnxk/roc_nix_inl.c
> +++ b/drivers/common/cnxk/roc_nix_inl.c
> @@ -585,8 +585,10 @@ int
>  roc_nix_inl_dev_rq_get(struct roc_nix_rq *rq)
>  {
>         struct idev_cfg *idev = idev_get_cfg();
> +       int port_id = rq->roc_nix->port_id;
>         struct nix_inl_dev *inl_dev;
>         struct roc_nix_rq *inl_rq;
> +       uint16_t inl_rq_id;
>         struct dev *dev;
>         int rc;
>
> @@ -598,19 +600,24 @@ roc_nix_inl_dev_rq_get(struct roc_nix_rq *rq)
>         if (!inl_dev)
>                 return 0;
>
> +       /* Check if this RQ is already holding reference */
> +       if (rq->inl_dev_refs)
> +               return 0;
> +
> +       inl_rq_id = inl_dev->nb_rqs > 1 ? port_id : 0;
> +       dev = &inl_dev->dev;
> +       inl_rq = &inl_dev->rqs[inl_rq_id];
> +
>         /* Just take reference if already inited */
> -       if (inl_dev->rq_refs) {
> -               inl_dev->rq_refs++;
> -               rq->inl_dev_ref = true;
> +       if (inl_rq->inl_dev_refs) {
> +               inl_rq->inl_dev_refs++;
> +               rq->inl_dev_refs = 1;
>                 return 0;
>         }
> -
> -       dev = &inl_dev->dev;
> -       inl_rq = &inl_dev->rq;
>         memset(inl_rq, 0, sizeof(struct roc_nix_rq));
>
>         /* Take RQ pool attributes from the first ethdev RQ */
> -       inl_rq->qid = 0;
> +       inl_rq->qid = inl_rq_id;
>         inl_rq->aura_handle = rq->aura_handle;
>         inl_rq->first_skip = rq->first_skip;
>         inl_rq->later_skip = rq->later_skip;
> @@ -688,8 +695,8 @@ roc_nix_inl_dev_rq_get(struct roc_nix_rq *rq)
>                 return rc;
>         }
>
> -       inl_dev->rq_refs++;
> -       rq->inl_dev_ref = true;
> +       inl_rq->inl_dev_refs++;
> +       rq->inl_dev_refs = 1;
>         return 0;
>  }
>
> @@ -697,15 +704,17 @@ int
>  roc_nix_inl_dev_rq_put(struct roc_nix_rq *rq)
>  {
>         struct idev_cfg *idev = idev_get_cfg();
> +       int port_id = rq->roc_nix->port_id;
>         struct nix_inl_dev *inl_dev;
>         struct roc_nix_rq *inl_rq;
> +       uint16_t inl_rq_id;
>         struct dev *dev;
>         int rc;
>
>         if (idev == NULL)
>                 return 0;
>
> -       if (!rq->inl_dev_ref)
> +       if (!rq->inl_dev_refs)
>                 return 0;
>
>         inl_dev = idev->nix_inl_dev;
> @@ -715,13 +724,15 @@ roc_nix_inl_dev_rq_put(struct roc_nix_rq *rq)
>                 return -EFAULT;
>         }
>
> -       rq->inl_dev_ref = false;
> -       inl_dev->rq_refs--;
> -       if (inl_dev->rq_refs)
> -               return 0;
> -
>         dev = &inl_dev->dev;
> -       inl_rq = &inl_dev->rq;
> +       inl_rq_id = inl_dev->nb_rqs > 1 ? port_id : 0;
> +       inl_rq = &inl_dev->rqs[inl_rq_id];
> +
> +       rq->inl_dev_refs = 0;
> +       inl_rq->inl_dev_refs--;
> +       if (inl_rq->inl_dev_refs)
> +               return 0;
> +
>         /* There are no more references, disable RQ */
>         rc = nix_rq_ena_dis(dev, inl_rq, false);
>         if (rc)
> @@ -737,25 +748,6 @@ roc_nix_inl_dev_rq_put(struct roc_nix_rq *rq)
>         return rc;
>  }
>
> -uint64_t
> -roc_nix_inl_dev_rq_limit_get(void)
> -{
> -       struct idev_cfg *idev = idev_get_cfg();
> -       struct nix_inl_dev *inl_dev;
> -       struct roc_nix_rq *inl_rq;
> -
> -       if (!idev || !idev->nix_inl_dev)
> -               return 0;
> -
> -       inl_dev = idev->nix_inl_dev;
> -       if (!inl_dev->rq_refs)
> -               return 0;
> -
> -       inl_rq = &inl_dev->rq;
> -
> -       return roc_npa_aura_op_limit_get(inl_rq->aura_handle);
> -}
> -
>  void
>  roc_nix_inb_mode_set(struct roc_nix *roc_nix, bool use_inl_dev)
>  {
> @@ -804,15 +796,22 @@ roc_nix_inb_is_with_inl_dev(struct roc_nix *roc_nix)
>  }
>
>  struct roc_nix_rq *
> -roc_nix_inl_dev_rq(void)
> +roc_nix_inl_dev_rq(struct roc_nix *roc_nix)
>  {
>         struct idev_cfg *idev = idev_get_cfg();
> +       int port_id = roc_nix->port_id;
>         struct nix_inl_dev *inl_dev;
> +       struct roc_nix_rq *inl_rq;
> +       uint16_t inl_rq_id;
>
>         if (idev != NULL) {
>                 inl_dev = idev->nix_inl_dev;
> -               if (inl_dev != NULL && inl_dev->rq_refs)
> -                       return &inl_dev->rq;
> +               if (inl_dev != NULL) {
> +                       inl_rq_id = inl_dev->nb_rqs > 1 ? port_id : 0;
> +                       inl_rq = &inl_dev->rqs[inl_rq_id];
> +                       if (inl_rq->inl_dev_refs)
> +                               return inl_rq;
> +               }
>         }
>
>         return NULL;
> @@ -1022,6 +1021,7 @@ roc_nix_inl_ts_pkind_set(struct roc_nix *roc_nix, bool ts_ena, bool inb_inl_dev)
>         void *sa, *sa_base = NULL;
>         struct nix *nix = NULL;
>         uint16_t max_spi = 0;
> +       uint32_t rq_refs = 0;
>         uint8_t pkind = 0;
>         int i;
>
> @@ -1044,7 +1044,10 @@ roc_nix_inl_ts_pkind_set(struct roc_nix *roc_nix, bool ts_ena, bool inb_inl_dev)
>         }
>
>         if (inl_dev) {
> -               if (inl_dev->rq_refs == 0) {
> +               for (i = 0; i < inl_dev->nb_rqs; i++)
> +                       rq_refs += inl_dev->rqs[i].inl_dev_refs;
> +
> +               if (rq_refs == 0) {
>                         inl_dev->ts_ena = ts_ena;
>                         max_spi = inl_dev->ipsec_in_max_spi;
>                         sa_base = inl_dev->inb_sa_base;
> diff --git a/drivers/common/cnxk/roc_nix_inl.h b/drivers/common/cnxk/roc_nix_inl.h
> index 633f090..7835ba3 100644
> --- a/drivers/common/cnxk/roc_nix_inl.h
> +++ b/drivers/common/cnxk/roc_nix_inl.h
> @@ -168,12 +168,11 @@ void __roc_api roc_nix_inb_mode_set(struct roc_nix *roc_nix, bool use_inl_dev);
>  int __roc_api roc_nix_inl_dev_rq_get(struct roc_nix_rq *rq);
>  int __roc_api roc_nix_inl_dev_rq_put(struct roc_nix_rq *rq);
>  bool __roc_api roc_nix_inb_is_with_inl_dev(struct roc_nix *roc_nix);
> -struct roc_nix_rq *__roc_api roc_nix_inl_dev_rq(void);
> +struct roc_nix_rq *__roc_api roc_nix_inl_dev_rq(struct roc_nix *roc_nix);
>  int __roc_api roc_nix_inl_inb_tag_update(struct roc_nix *roc_nix,
>                                          uint32_t tag_const, uint8_t tt);
> -uint64_t __roc_api roc_nix_inl_dev_rq_limit_get(void);
>  int __roc_api roc_nix_reassembly_configure(uint32_t max_wait_time,
> -                                       uint16_t max_frags);
> +                                          uint16_t max_frags);
>  int __roc_api roc_nix_inl_ts_pkind_set(struct roc_nix *roc_nix, bool ts_ena,
>                                        bool inb_inl_dev);
>
> diff --git a/drivers/common/cnxk/roc_nix_inl_dev.c b/drivers/common/cnxk/roc_nix_inl_dev.c
> index 5e61a42..b304937 100644
> --- a/drivers/common/cnxk/roc_nix_inl_dev.c
> +++ b/drivers/common/cnxk/roc_nix_inl_dev.c
> @@ -334,6 +334,7 @@ nix_inl_nix_setup(struct nix_inl_dev *inl_dev)
>         struct nix_lf_alloc_rsp *rsp;
>         struct nix_lf_alloc_req *req;
>         struct nix_hw_info *hw_info;
> +       struct roc_nix_rq *rqs;
>         uint64_t max_sa, i;
>         size_t inb_sa_sz;
>         int rc = -ENOSPC;
> @@ -345,7 +346,8 @@ nix_inl_nix_setup(struct nix_inl_dev *inl_dev)
>         req = mbox_alloc_msg_nix_lf_alloc(mbox);
>         if (req == NULL)
>                 return rc;
> -       req->rq_cnt = 1;
> +       /* We will have per-port RQ if it is not with channel masking */
> +       req->rq_cnt = inl_dev->nb_rqs;
>         req->sq_cnt = 1;
>         req->cq_cnt = 1;
>         /* XQESZ is W16 */
> @@ -421,6 +423,14 @@ nix_inl_nix_setup(struct nix_inl_dev *inl_dev)
>                 goto free_mem;
>         }
>
> +       /* Allocate memory for RQ's */
> +       rqs = plt_zmalloc(sizeof(struct roc_nix_rq) * PLT_MAX_ETHPORTS, 0);
> +       if (!rqs) {
> +               plt_err("Failed to allocate memory for RQ's");
> +               goto free_mem;
> +       }
> +       inl_dev->rqs = rqs;
> +
>         return 0;
>  free_mem:
>         plt_free(inl_dev->inb_sa_base);
> @@ -464,7 +474,15 @@ nix_inl_nix_release(struct nix_inl_dev *inl_dev)
>         if (req == NULL)
>                 return -ENOSPC;
>
> -       return mbox_process(mbox);
> +       rc = mbox_process(mbox);
> +       if (rc)
> +               return rc;
> +
> +       plt_free(inl_dev->rqs);
> +       plt_free(inl_dev->inb_sa_base);
> +       inl_dev->rqs = NULL;
> +       inl_dev->inb_sa_base = NULL;
> +       return 0;
>  }
>
>  static int
> @@ -584,10 +602,13 @@ roc_nix_inl_dev_xaq_realloc(uint64_t aura_handle)
>
>  no_pool:
>         /* Disable RQ if enabled */
> -       if (inl_dev->rq_refs) {
> -               rc = nix_rq_ena_dis(&inl_dev->dev, &inl_dev->rq, false);
> +       for (i = 0; i < inl_dev->nb_rqs; i++) {
> +               if (!inl_dev->rqs[i].inl_dev_refs)
> +                       continue;
> +               rc = nix_rq_ena_dis(&inl_dev->dev, &inl_dev->rqs[i], false);
>                 if (rc) {
> -                       plt_err("Failed to disable inline dev RQ, rc=%d", rc);
> +                       plt_err("Failed to disable inline dev RQ %d, rc=%d", i,
> +                               rc);
>                         return rc;
>                 }
>         }
> @@ -633,10 +654,14 @@ roc_nix_inl_dev_xaq_realloc(uint64_t aura_handle)
>
>  exit:
>         /* Renable RQ */
> -       if (inl_dev->rq_refs) {
> -               rc = nix_rq_ena_dis(&inl_dev->dev, &inl_dev->rq, true);
> +       for (i = 0; i < inl_dev->nb_rqs; i++) {
> +               if (!inl_dev->rqs[i].inl_dev_refs)
> +                       continue;
> +
> +               rc = nix_rq_ena_dis(&inl_dev->dev, &inl_dev->rqs[i], true);
>                 if (rc)
> -                       plt_err("Failed to enable inline dev RQ, rc=%d", rc);
> +                       plt_err("Failed to enable inline dev RQ %d, rc=%d", i,
> +                               rc);
>         }
>
>         return rc;
> @@ -815,6 +840,7 @@ roc_nix_inl_dev_init(struct roc_nix_inl_dev *roc_inl_dev)
>         inl_dev->spb_drop_pc = NIX_AURA_DROP_PC_DFLT;
>         inl_dev->lpb_drop_pc = NIX_AURA_DROP_PC_DFLT;
>         inl_dev->set_soft_exp_poll = roc_inl_dev->set_soft_exp_poll;
> +       inl_dev->nb_rqs = inl_dev->is_multi_channel ? 1 : PLT_MAX_ETHPORTS;
>
>         if (roc_inl_dev->spb_drop_pc)
>                 inl_dev->spb_drop_pc = roc_inl_dev->spb_drop_pc;
> diff --git a/drivers/common/cnxk/roc_nix_inl_dev_irq.c b/drivers/common/cnxk/roc_nix_inl_dev_irq.c
> index 1855f36..5fd4f0f 100644
> --- a/drivers/common/cnxk/roc_nix_inl_dev_irq.c
> +++ b/drivers/common/cnxk/roc_nix_inl_dev_irq.c
> @@ -179,50 +179,59 @@ nix_inl_sso_unregister_irqs(struct nix_inl_dev *inl_dev)
>  static void
>  nix_inl_nix_q_irq(void *param)
>  {
> -       struct nix_inl_dev *inl_dev = (struct nix_inl_dev *)param;
> +       struct nix_inl_qint *qints_mem = (struct nix_inl_qint *)param;
> +       struct nix_inl_dev *inl_dev = qints_mem->inl_dev;
>         uintptr_t nix_base = inl_dev->nix_base;
>         struct dev *dev = &inl_dev->dev;
> +       uint16_t qint = qints_mem->qint;
>         volatile void *ctx;
>         uint64_t reg, intr;
> +       uint64_t wdata;
>         uint8_t irq;
> -       int rc;
> +       int rc, q;
>
> -       intr = plt_read64(nix_base + NIX_LF_QINTX_INT(0));
> +       intr = plt_read64(nix_base + NIX_LF_QINTX_INT(qint));
>         if (intr == 0)
>                 return;
>
>         plt_err("Queue_intr=0x%" PRIx64 " qintx 0 pf=%d, vf=%d", intr, dev->pf,
>                 dev->vf);
>
> -       /* Get and clear RQ0 interrupt */
> -       reg = roc_atomic64_add_nosync(0,
> -                                     (int64_t *)(nix_base + NIX_LF_RQ_OP_INT));
> -       if (reg & BIT_ULL(42) /* OP_ERR */) {
> -               plt_err("Failed to get rq_int");
> -               return;
> +       /* Handle RQ interrupts */
> +       for (q = 0; q < inl_dev->nb_rqs; q++) {
> +               /* Get and clear RQ interrupts */
> +               wdata = (uint64_t)q << 44;
> +               reg = roc_atomic64_add_nosync(wdata,
> +                                             (int64_t *)(nix_base + NIX_LF_RQ_OP_INT));
> +               if (reg & BIT_ULL(42) /* OP_ERR */) {
> +                       plt_err("Failed to get rq_int");
> +                       return;
> +               }
> +               irq = reg & 0xff;
> +               plt_write64(wdata | irq, nix_base + NIX_LF_RQ_OP_INT);
> +
> +               if (irq & BIT_ULL(NIX_RQINT_DROP))
> +                       plt_err("RQ=0 NIX_RQINT_DROP");
> +
> +               if (irq & BIT_ULL(NIX_RQINT_RED))
> +                       plt_err("RQ=0 NIX_RQINT_RED");
>         }
> -       irq = reg & 0xff;
> -       plt_write64(0 | irq, nix_base + NIX_LF_RQ_OP_INT);
> -
> -       if (irq & BIT_ULL(NIX_RQINT_DROP))
> -               plt_err("RQ=0 NIX_RQINT_DROP");
> -
> -       if (irq & BIT_ULL(NIX_RQINT_RED))
> -               plt_err("RQ=0 NIX_RQINT_RED");
>
>         /* Clear interrupt */
> -       plt_write64(intr, nix_base + NIX_LF_QINTX_INT(0));
> +       plt_write64(intr, nix_base + NIX_LF_QINTX_INT(qint));
>
>         /* Dump registers to std out */
>         nix_inl_nix_reg_dump(inl_dev);
>
> -       /* Dump RQ 0 */
> -       rc = nix_q_ctx_get(dev, NIX_AQ_CTYPE_RQ, 0, &ctx);
> -       if (rc) {
> -               plt_err("Failed to get rq context");
> -               return;
> +       /* Dump RQs */
> +       for (q = 0; q < inl_dev->nb_rqs; q++) {
> +               rc = nix_q_ctx_get(dev, NIX_AQ_CTYPE_RQ, q, &ctx);
> +               if (rc) {
> +                       plt_err("Failed to get rq %d context, rc=%d", q, rc);
> +                       continue;
> +               }
> +               nix_lf_rq_dump(ctx);
>         }
> -       nix_lf_rq_dump(ctx);
>  }
>
>  static void
> @@ -233,7 +242,7 @@ nix_inl_nix_ras_irq(void *param)
>         struct dev *dev = &inl_dev->dev;
>         volatile void *ctx;
>         uint64_t intr;
> -       int rc;
> +       int rc, q;
>
>         intr = plt_read64(nix_base + NIX_LF_RAS);
>         if (intr == 0)
> @@ -246,13 +255,15 @@ nix_inl_nix_ras_irq(void *param)
>         /* Dump registers to std out */
>         nix_inl_nix_reg_dump(inl_dev);
>
> -       /* Dump RQ 0 */
> -       rc = nix_q_ctx_get(dev, NIX_AQ_CTYPE_RQ, 0, &ctx);
> -       if (rc) {
> -               plt_err("Failed to get rq context");
> -               return;
> +       /* Dump RQs */
> +       for (q = 0; q < inl_dev->nb_rqs; q++) {
> +               rc = nix_q_ctx_get(dev, NIX_AQ_CTYPE_RQ, q, &ctx);
> +               if (rc) {
> +                       plt_err("Failed to get rq %d context, rc=%d", q, rc);
> +                       continue;
> +               }
> +               nix_lf_rq_dump(ctx);
>         }
> -       nix_lf_rq_dump(ctx);
>  }
>
>  static void
> @@ -263,7 +274,7 @@ nix_inl_nix_err_irq(void *param)
>         struct dev *dev = &inl_dev->dev;
>         volatile void *ctx;
>         uint64_t intr;
> -       int rc;
> +       int rc, q;
>
>         intr = plt_read64(nix_base + NIX_LF_ERR_INT);
>         if (intr == 0)
> @@ -277,13 +288,15 @@ nix_inl_nix_err_irq(void *param)
>         /* Dump registers to std out */
>         nix_inl_nix_reg_dump(inl_dev);
>
> -       /* Dump RQ 0 */
> -       rc = nix_q_ctx_get(dev, NIX_AQ_CTYPE_RQ, 0, &ctx);
> -       if (rc) {
> -               plt_err("Failed to get rq context");
> -               return;
> +       /* Dump RQs */
> +       for (q = 0; q < inl_dev->nb_rqs; q++) {
> +               rc = nix_q_ctx_get(dev, NIX_AQ_CTYPE_RQ, q, &ctx);
> +               if (rc) {
> +                       plt_err("Failed to get rq %d context, rc=%d", q, rc);
> +                       continue;
> +               }
> +               nix_lf_rq_dump(ctx);
>         }
> -       nix_lf_rq_dump(ctx);
>  }
>
>  int
> @@ -291,8 +304,10 @@ nix_inl_nix_register_irqs(struct nix_inl_dev *inl_dev)
>  {
>         struct plt_intr_handle *handle = inl_dev->pci_dev->intr_handle;
>         uintptr_t nix_base = inl_dev->nix_base;
> +       struct nix_inl_qint *qints_mem;
>         uint16_t msixoff;
> -       int rc;
> +       int rc, q, ret;
> +       int qints;
>
>         msixoff = inl_dev->nix_msixoff;
>         if (msixoff == MSIX_VECTOR_INVALID) {
> @@ -317,21 +332,38 @@ nix_inl_nix_register_irqs(struct nix_inl_dev *inl_dev)
>         /* Enable RAS interrupts */
>         plt_write64(~0ull, nix_base + NIX_LF_RAS_ENA_W1S);
>
> -       /* Setup queue irq for RQ 0 */
> +       /* Setup queue irq for RQ's */
> +       qints = PLT_MIN(inl_dev->nb_rqs, inl_dev->qints);
> +       qints_mem = plt_zmalloc(sizeof(struct nix_inl_qint) * qints, 0);
> +       if (!qints_mem) {
> +               plt_err("Failed to allocate memory for %u qints", qints);
> +               return -ENOMEM;
> +       }
>
> -       /* Clear QINT CNT, interrupt */
> -       plt_write64(0, nix_base + NIX_LF_QINTX_CNT(0));
> -       plt_write64(~0ull, nix_base + NIX_LF_QINTX_ENA_W1C(0));
> +       inl_dev->configured_qints = qints;
> +       inl_dev->qints_mem = qints_mem;
>
> -       /* Register queue irq vector */
> -       rc |= dev_irq_register(handle, nix_inl_nix_q_irq, inl_dev,
> -                              msixoff + NIX_LF_INT_VEC_QINT_START);
> +       for (q = 0; q < qints; q++) {
> +               /* Clear QINT CNT, interrupt */
> +               plt_write64(0, nix_base + NIX_LF_QINTX_CNT(q));
> +               plt_write64(~0ull, nix_base + NIX_LF_QINTX_ENA_W1C(q));
>
> -       plt_write64(0, nix_base + NIX_LF_QINTX_CNT(0));
> -       plt_write64(0, nix_base + NIX_LF_QINTX_INT(0));
> -       /* Enable QINT interrupt */
> -       plt_write64(~0ull, nix_base + NIX_LF_QINTX_ENA_W1S(0));
> +               /* Register queue irq vector */
> +               ret = dev_irq_register(handle, nix_inl_nix_q_irq, &qints_mem[q],
> +                                      msixoff + NIX_LF_INT_VEC_QINT_START + q);
> +               if (ret)
> +                       break;
>
> +               plt_write64(0, nix_base + NIX_LF_QINTX_CNT(q));
> +               plt_write64(0, nix_base + NIX_LF_QINTX_INT(q));
> +               /* Enable QINT interrupt */
> +               plt_write64(~0ull, nix_base + NIX_LF_QINTX_ENA_W1S(q));
> +
> +               qints_mem[q].inl_dev = inl_dev;
> +               qints_mem[q].qint = q;
> +       }
> +
> +       rc |= ret;
>         return rc;
>  }
>
> @@ -339,8 +371,10 @@ void
>  nix_inl_nix_unregister_irqs(struct nix_inl_dev *inl_dev)
>  {
>         struct plt_intr_handle *handle = inl_dev->pci_dev->intr_handle;
> +       struct nix_inl_qint *qints_mem = inl_dev->qints_mem;
>         uintptr_t nix_base = inl_dev->nix_base;
>         uint16_t msixoff;
> +       int q;
>
>         msixoff = inl_dev->nix_msixoff;
>         /* Disable err interrupts */
> @@ -353,14 +387,19 @@ nix_inl_nix_unregister_irqs(struct nix_inl_dev *inl_dev)
>         dev_irq_unregister(handle, nix_inl_nix_ras_irq, inl_dev,
>                            msixoff + NIX_LF_INT_VEC_POISON);
>
> -       /* Clear QINT CNT */
> -       plt_write64(0, nix_base + NIX_LF_QINTX_CNT(0));
> -       plt_write64(0, nix_base + NIX_LF_QINTX_INT(0));
> +       for (q = 0; q < inl_dev->configured_qints; q++) {
> +               /* Clear QINT CNT */
> +               plt_write64(0, nix_base + NIX_LF_QINTX_CNT(q));
> +               plt_write64(0, nix_base + NIX_LF_QINTX_INT(q));
>
> -       /* Disable QINT interrupt */
> -       plt_write64(~0ull, nix_base + NIX_LF_QINTX_ENA_W1C(0));
> +               /* Disable QINT interrupt */
> +               plt_write64(~0ull, nix_base + NIX_LF_QINTX_ENA_W1C(q));
>
> -       /* Unregister queue irq vector */
> -       dev_irq_unregister(handle, nix_inl_nix_q_irq, inl_dev,
> -                          msixoff + NIX_LF_INT_VEC_QINT_START);
> +               /* Unregister queue irq vector */
> +               dev_irq_unregister(handle, nix_inl_nix_q_irq, &qints_mem[q],
> +                                  msixoff + NIX_LF_INT_VEC_QINT_START + q);
> +       }
> +
> +       plt_free(inl_dev->qints_mem);
> +       inl_dev->qints_mem = NULL;
>  }
> diff --git a/drivers/common/cnxk/roc_nix_inl_priv.h b/drivers/common/cnxk/roc_nix_inl_priv.h
> index 1ab8470..d61c7b2 100644
> --- a/drivers/common/cnxk/roc_nix_inl_priv.h
> +++ b/drivers/common/cnxk/roc_nix_inl_priv.h
> @@ -6,6 +6,12 @@
>  #include <pthread.h>
>  #include <sys/types.h>
>
> +struct nix_inl_dev;
> +struct nix_inl_qint {
> +       struct nix_inl_dev *inl_dev;
> +       uint16_t qint;
> +};
> +
>  struct nix_inl_dev {
>         /* Base device object */
>         struct dev dev;
> @@ -42,8 +48,10 @@ struct nix_inl_dev {
>         uint16_t vwqe_interval;
>         uint16_t cints;
>         uint16_t qints;
> -       struct roc_nix_rq rq;
> -       uint16_t rq_refs;
> +       uint16_t configured_qints;
> +       struct roc_nix_rq *rqs;
> +       struct nix_inl_qint *qints_mem;
> +       uint16_t nb_rqs;
>         bool is_nix1;
>         uint8_t spb_drop_pc;
>         uint8_t lpb_drop_pc;
> diff --git a/drivers/common/cnxk/roc_npc.c b/drivers/common/cnxk/roc_npc.c
> index 51e36f1..3dee1ff 100644
> --- a/drivers/common/cnxk/roc_npc.c
> +++ b/drivers/common/cnxk/roc_npc.c
> @@ -307,6 +307,7 @@ npc_parse_actions(struct roc_npc *roc_npc, const struct roc_npc_attr *attr,
>         bool vlan_insert_action = false;
>         int sel_act, req_act = 0;
>         uint16_t pf_func, vf_id;
> +       struct roc_nix *roc_nix;
>         int errcode = 0;
>         int mark = 0;
>         int rq = 0;
> @@ -392,11 +393,19 @@ npc_parse_actions(struct roc_npc *roc_npc, const struct roc_npc_attr *attr,
>                          */
>                         req_act |= ROC_NPC_ACTION_TYPE_SEC;
>                         rq = 0;
> +                       roc_nix = roc_npc->roc_nix;
>
>                         /* Special processing when with inline device */
> -                       if (roc_nix_inb_is_with_inl_dev(roc_npc->roc_nix) &&
> +                       if (roc_nix_inb_is_with_inl_dev(roc_nix) &&
>                             roc_nix_inl_dev_is_probed()) {
> -                               rq = 0;
> +                               struct roc_nix_rq *inl_rq;
> +
> +                               inl_rq = roc_nix_inl_dev_rq(roc_nix);
> +                               if (!inl_rq) {
> +                                       errcode = NPC_ERR_INTERNAL;
> +                                       goto err_exit;
> +                               }
> +                               rq = inl_rq->qid;
>                                 pf_func = nix_inl_dev_pffunc_get();
>                         }
>                         break;
> diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map
> index 53586da..a77f3f6 100644
> --- a/drivers/common/cnxk/version.map
> +++ b/drivers/common/cnxk/version.map
> @@ -138,7 +138,6 @@ INTERNAL {
>         roc_nix_inl_dev_rq;
>         roc_nix_inl_dev_rq_get;
>         roc_nix_inl_dev_rq_put;
> -       roc_nix_inl_dev_rq_limit_get;
>         roc_nix_inl_dev_unlock;
>         roc_nix_inl_dev_xaq_realloc;
>         roc_nix_inl_inb_is_enabled;
> diff --git a/drivers/net/cnxk/cnxk_ethdev.c b/drivers/net/cnxk/cnxk_ethdev.c
> index 3912c24..09e5736 100644
> --- a/drivers/net/cnxk/cnxk_ethdev.c
> +++ b/drivers/net/cnxk/cnxk_ethdev.c
> @@ -546,19 +546,6 @@ cnxk_nix_rx_queue_setup(struct rte_eth_dev *eth_dev, uint16_t qid,
>                 eth_dev->data->rx_queues[qid] = NULL;
>         }
>
> -       /* Clam up cq limit to size of packet pool aura for LBK
> -        * to avoid meta packet drop as LBK does not currently support
> -        * backpressure.
> -        */
> -       if (dev->rx_offloads & RTE_ETH_RX_OFFLOAD_SECURITY && roc_nix_is_lbk(nix)) {
> -               uint64_t pkt_pool_limit = roc_nix_inl_dev_rq_limit_get();
> -
> -               /* Use current RQ's aura limit if inl rq is not available */
> -               if (!pkt_pool_limit)
> -                       pkt_pool_limit = roc_npa_aura_op_limit_get(mp->pool_id);
> -               nb_desc = RTE_MAX(nb_desc, pkt_pool_limit);
> -       }
> -
>         /* Its a no-op when inline device is not used */
>         if (dev->rx_offloads & RTE_ETH_RX_OFFLOAD_SECURITY ||
>             dev->tx_offloads & RTE_ETH_TX_OFFLOAD_SECURITY)
> @@ -1675,6 +1662,7 @@ cnxk_eth_dev_init(struct rte_eth_dev *eth_dev)
>         /* Initialize base roc nix */
>         nix->pci_dev = pci_dev;
>         nix->hw_vlan_ins = true;
> +       nix->port_id = eth_dev->data->port_id;
>         rc = roc_nix_dev_init(nix);
>         if (rc) {
>                 plt_err("Failed to initialize roc nix rc=%d", rc);
> --
> 2.8.4
>

  reply	other threads:[~2022-05-07 10:21 UTC|newest]

Thread overview: 110+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-19  5:58 [PATCH 01/24] common/cnxk: add multi channel support for SDP send queues Nithin Dabilpuram
2022-04-19  5:58 ` [PATCH 02/24] net/cnxk: add receive channel backpressure for SDP Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 03/24] common/cnxk: add new pkind for CPT when ts is enabled Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 04/24] common/cnxk: support to configure the ts pkind in CPT Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 05/24] common/cnxk: fix SQ flush sequence Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 06/24] common/cnxk: skip probing SoC environment for CN9k Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 07/24] common/cnxk: fix issues in soft expiry disable path Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 08/24] common/cnxk: convert warning to debug print Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 09/24] common/cnxk: use aggregate level rr prio from mbox Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 10/24] net/cnxk: support loopback mode on AF VF's Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 11/24] net/cnxk: update LBK ethdev link info Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 12/24] net/cnxk: add barrier after meta batch free in scalar Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 13/24] net/cnxk: disable default inner chksum for outb inline Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 14/24] net/cnxk: fix roundup size with transport mode Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 15/24] net/cnxk: update inline device in ethdev telemetry Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 16/24] net/cnxk: change env for debug IV Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 17/24] net/cnxk: reset offload flag if reassembly is disabled Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 18/24] net/cnxk: support decrement TTL for inline IPsec Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 19/24] net/cnxk: optimize Rx fast path for security pkts Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 20/24] net/cnxk: update olflags with L3/L4 csum offload Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 21/24] net/cnxk: add capabilities for IPsec crypto algos Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 22/24] net/cnxk: add capabilities for IPsec options Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 23/24] net/cnxk: support security stats Nithin Dabilpuram
2022-04-19  5:59 ` [PATCH 24/24] net/cnxk: add support for flow control for outbound inline Nithin Dabilpuram
2022-05-05 12:55 ` [PATCH v3 01/28] common/cnxk: add multi channel support for SDP send queues Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 02/28] net/cnxk: add receive channel backpressure for SDP Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 03/28] common/cnxk: add new pkind for CPT when ts is enabled Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 04/28] common/cnxk: support to configure the ts pkind in CPT Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 05/28] common/cnxk: fix SQ flush sequence Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 06/28] common/cnxk: skip probing SoC environment for CN9k Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 07/28] common/cnxk: fix issues in soft expiry disable path Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 08/28] common/cnxk: convert warning to debug print Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 09/28] common/cnxk: use aggregate level rr prio from mbox Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 10/28] net/cnxk: support loopback mode on AF VF's Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 11/28] net/cnxk: update LBK ethdev link info Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 12/28] net/cnxk: add barrier after meta batch free in scalar Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 13/28] net/cnxk: disable default inner chksum for outb inline Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 14/28] net/cnxk: fix roundup size with transport mode Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 15/28] net/cnxk: update inline device in ethdev telemetry Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 16/28] net/cnxk: change env for debug IV Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 17/28] net/cnxk: reset offload flag if reassembly is disabled Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 18/28] net/cnxk: support decrement TTL for inline IPsec Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 19/28] net/cnxk: optimize Rx fast path for security pkts Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 20/28] net/cnxk: update olflags with L3/L4 csum offload Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 21/28] net/cnxk: add capabilities for IPsec crypto algos Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 22/28] net/cnxk: add capabilities for IPsec options Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 23/28] net/cnxk: support security stats Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 24/28] net/cnxk: add support for flow control for outbound inline Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 25/28] net/cnxk: perform early MTU setup for eventmode Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 26/28] net/cnxk: fix multi-seg extraction in vwqe path Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 27/28] net/cnxk: fix hotplug detach sequence for first device Nithin Dabilpuram
2022-05-05 12:55   ` [PATCH v3 28/28] common/cnxk: add support for per-port RQ in inline device Nithin Dabilpuram
2022-05-07 10:20     ` Jerin Jacob [this message]
2022-05-08  6:25 ` [PATCH v4 01/28] common/cnxk: add multi channel support for SDP send queues Nithin Dabilpuram
2022-05-08  6:25   ` [PATCH v4 02/28] net/cnxk: add receive channel backpressure for SDP Nithin Dabilpuram
2022-05-08  6:25   ` [PATCH v4 03/28] common/cnxk: add new pkind for CPT when ts is enabled Nithin Dabilpuram
2022-05-08  6:25   ` [PATCH v4 04/28] common/cnxk: support to configure the ts pkind in CPT Nithin Dabilpuram
2022-05-08  6:25   ` [PATCH v4 05/28] common/cnxk: fix SQ flush sequence Nithin Dabilpuram
2022-05-08  6:25   ` [PATCH v4 06/28] common/cnxk: skip probing SoC environment for CN9k Nithin Dabilpuram
2022-05-08  6:25   ` [PATCH v4 07/28] common/cnxk: fix issues in soft expiry disable path Nithin Dabilpuram
2022-05-08  6:25   ` [PATCH v4 08/28] common/cnxk: convert warning to debug print Nithin Dabilpuram
2022-05-08  6:25   ` [PATCH v4 09/28] common/cnxk: use aggregate level rr prio from mbox Nithin Dabilpuram
2022-05-08  6:25   ` [PATCH v4 10/28] net/cnxk: support loopback mode on AF VF's Nithin Dabilpuram
2022-05-08  6:25   ` [PATCH v4 11/28] net/cnxk: update LBK ethdev link info Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 12/28] net/cnxk: add barrier after meta batch free in scalar Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 13/28] net/cnxk: disable default inner chksum for outb inline Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 14/28] net/cnxk: fix roundup size with transport mode Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 15/28] net/cnxk: update inline device in ethdev telemetry Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 16/28] net/cnxk: change env for debug IV Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 17/28] net/cnxk: reset offload flag if reassembly is disabled Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 18/28] net/cnxk: support decrement TTL for inline IPsec Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 19/28] net/cnxk: optimize Rx fast path for security pkts Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 20/28] net/cnxk: update olflags with L3/L4 csum offload Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 21/28] net/cnxk: add capabilities for IPsec crypto algos Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 22/28] net/cnxk: add capabilities for IPsec options Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 23/28] net/cnxk: support security stats Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 24/28] net/cnxk: add support for flow control for outbound inline Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 25/28] net/cnxk: perform early MTU setup for eventmode Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 26/28] net/cnxk: fix multi-seg extraction in vwqe path Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 27/28] net/cnxk: fix hotplug detach sequence for first device Nithin Dabilpuram
2022-05-08  6:26   ` [PATCH v4 28/28] common/cnxk: add support for per-port RQ in inline device Nithin Dabilpuram
2022-05-08  7:48 ` [PATCH v5 01/28] common/cnxk: add multi channel support for SDP send queues Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 02/28] net/cnxk: add receive channel backpressure for SDP Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 03/28] common/cnxk: add new pkind for CPT when ts is enabled Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 04/28] common/cnxk: support to configure the ts pkind in CPT Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 05/28] common/cnxk: fix SQ flush sequence Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 06/28] common/cnxk: skip probing SoC environment for CN9k Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 07/28] common/cnxk: fix issues in soft expiry disable path Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 08/28] common/cnxk: convert warning to debug print Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 09/28] common/cnxk: use aggregate level rr prio from mbox Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 10/28] net/cnxk: support loopback mode on AF VF's Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 11/28] net/cnxk: update LBK ethdev link info Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 12/28] net/cnxk: add barrier after meta batch free in scalar Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 13/28] net/cnxk: disable default inner chksum for outb inline Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 14/28] net/cnxk: fix roundup size with transport mode Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 15/28] net/cnxk: update inline device in ethdev telemetry Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 16/28] net/cnxk: change env for debug IV Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 17/28] net/cnxk: reset offload flag if reassembly is disabled Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 18/28] net/cnxk: support decrement TTL for inline IPsec Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 19/28] net/cnxk: optimize Rx fast path for security pkts Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 20/28] net/cnxk: update olflags with L3/L4 csum offload Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 21/28] net/cnxk: add capabilities for IPsec crypto algos Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 22/28] net/cnxk: add capabilities for IPsec options Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 23/28] net/cnxk: support security stats Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 24/28] net/cnxk: add support for flow control for outbound inline Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 25/28] net/cnxk: perform early MTU setup for eventmode Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 26/28] net/cnxk: fix multi-seg extraction in vwqe path Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 27/28] net/cnxk: fix hotplug detach sequence for first device Nithin Dabilpuram
2022-05-08  7:48   ` [PATCH v5 28/28] common/cnxk: add support for per-port RQ in inline device Nithin Dabilpuram
2022-05-10 14:31     ` Jerin Jacob

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CALBAE1NsX-PEo7mc0ubmOAQL9QdhoM0JdYZFBf5g7J+yZKVGcg@mail.gmail.com \
    --to=jerinjacobk@gmail.com \
    --cc=dev@dpdk.org \
    --cc=jerinj@marvell.com \
    --cc=kirankumark@marvell.com \
    --cc=mdr@ashroe.eu \
    --cc=ndabilpuram@marvell.com \
    --cc=skori@marvell.com \
    --cc=skoteshwar@marvell.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).