From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BE6FBA04B1; Wed, 19 Jan 2022 17:46:04 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A97FA4116E; Wed, 19 Jan 2022 17:46:04 +0100 (CET) Received: from mail-il1-f179.google.com (mail-il1-f179.google.com [209.85.166.179]) by mails.dpdk.org (Postfix) with ESMTP id E87EC41147 for ; Wed, 19 Jan 2022 17:46:02 +0100 (CET) Received: by mail-il1-f179.google.com with SMTP id a18so2684849ilq.6 for ; Wed, 19 Jan 2022 08:46:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=9bP4HjxRCMeGnpPxI0r1DcCB2w4S0UZ1dHRrI5YOh3c=; b=Da2h28l3CiLz4OIh9xtjeTiMWuO3PRmBEDptaXK+GTPHUhgjFp8YpfmVHMUlcnEJCJ Vlt8fA4y/qavVAkAKe3PuUma/zyoMvQhvRMuS7o8b/eQPuKLIClZWr5htQzICjSBtzPk dwIzfygcZFZOjmXndf/uggzNdxDujsMZNWH/9dNHD+31VxpxJUKHTPHpqFdNdM/qLkV8 s5/BI5T0+ytr5A68YDvhAhRsGHlBfT8GpIW0OLg+n+tCeisbMIpZvmcxq8PpsW7kWXk8 RzxdtxDElsjKsz+381ljlY03gNhPcQwLRbzCwVIQTuleaY/E/PJeiShKbyTsgV8oaBL7 ELsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=9bP4HjxRCMeGnpPxI0r1DcCB2w4S0UZ1dHRrI5YOh3c=; b=dMSMs3cVcaWIExxTNq2yHV5Bc/LSlJU9OHuRCmEKkA5MMKDTMtWDRx4PaKgb/lMz8f Jw0eA6IfWmwNMXsww87GyTjD8+aXc/18JCm3BO/87P6ogUskXsxh5WoQLA2g+BoTtAZy 204Nbof1SK6SzrO8oCUFPqZ9irN5516L2VOxw7eUP40Iu7887/jbrkSjqun6Y0IMmzwz 2NUx/PmXhiqRQDFNuvmll/7Es4mG57l/8xVdxSlx6CHAlT3jTUp8HivwyHa3m3AEkaQa 2cvctiKvs+iTx5aZUBHfl6An/cWay3fg0A3fSnABNmjNwMLTFaGx370q8jT/U+Kn/aK/ KUtA== X-Gm-Message-State: AOAM532E+6DFkSPdRISIuaHUXREIi41CfvdAkl0Oqu2FEAy3duboiT16 SJ0kCYmFzujQ8ha0fnKc0HZQM8U3G4C+Q3LxRz0= X-Google-Smtp-Source: ABdhPJzdEVuBAdxbLB5kSmmM/EX6VRPZo8sWZ80VQCGZHOHpsgyonbm6SAoeag1lvStgOuoBAYbBp+q0tlBEASBtp40= X-Received: by 2002:a05:6e02:1809:: with SMTP id a9mr13122932ilv.318.1642610762209; Wed, 19 Jan 2022 08:46:02 -0800 (PST) MIME-Version: 1.0 References: <20211209091342.27017-1-ndabilpuram@marvell.com> <20211209091342.27017-8-ndabilpuram@marvell.com> In-Reply-To: <20211209091342.27017-8-ndabilpuram@marvell.com> From: Jerin Jacob Date: Wed, 19 Jan 2022 22:15:35 +0530 Message-ID: Subject: Re: [PATCH 8/8] net/cnxk: synchronize inline session create and destroy To: Nithin Dabilpuram Cc: Jerin Jacob , Kiran Kumar K , Sunil Kumar Kori , Satha Rao , dpdk-dev Content-Type: text/plain; charset="UTF-8" X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On Thu, Dec 9, 2021 at 2:44 PM Nithin Dabilpuram wrote: > > Synchronize inline session create and destroy using spinlock. > Also move security related error prints outside the spinlock. > > Signed-off-by: Nithin Dabilpuram Fixed the following issue CHECK:OPEN_ENDED_LINE: Lines should not end with a '(' #159: FILE: drivers/net/cnxk/cn9k_ethdev_sec.c:195: + inb_sa = (struct roc_onf_ipsec_inb_sa *)roc_nix_inl_inb_sa_get( And Series applied to dpdk-next-net-mrvl/for-next-net. Thanks. > --- > drivers/net/cnxk/cn10k_ethdev_sec.c | 35 ++++++++++++++++++++++++++++------- > drivers/net/cnxk/cn9k_ethdev_sec.c | 34 +++++++++++++++++++++++++++------- > drivers/net/cnxk/cnxk_ethdev.c | 7 +++++-- > drivers/net/cnxk/cnxk_ethdev.h | 6 ++++++ > 4 files changed, 66 insertions(+), 16 deletions(-) > > diff --git a/drivers/net/cnxk/cn10k_ethdev_sec.c b/drivers/net/cnxk/cn10k_ethdev_sec.c > index 235c168..12cec0a 100644 > --- a/drivers/net/cnxk/cn10k_ethdev_sec.c > +++ b/drivers/net/cnxk/cn10k_ethdev_sec.c > @@ -238,6 +238,8 @@ cn10k_eth_sec_session_create(void *device, > struct rte_crypto_sym_xform *crypto; > struct cnxk_eth_sec_sess *eth_sec; > bool inbound, inl_dev; > + rte_spinlock_t *lock; > + char tbuf[128] = {0}; > int rc = 0; > > if (conf->action_type != RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL) > @@ -272,6 +274,9 @@ cn10k_eth_sec_session_create(void *device, > memset(eth_sec, 0, sizeof(struct cnxk_eth_sec_sess)); > sess_priv.u64 = 0; > > + lock = inbound ? &dev->inb.lock : &dev->outb.lock; > + rte_spinlock_lock(lock); > + > /* Acquire lock on inline dev for inbound */ > if (inbound && inl_dev) > roc_nix_inl_dev_lock(); > @@ -287,12 +292,14 @@ cn10k_eth_sec_session_create(void *device, > /* Get Inbound SA from NIX_RX_IPSEC_SA_BASE */ > sa = roc_nix_inl_inb_sa_get(&dev->nix, inl_dev, ipsec->spi); > if (!sa && dev->inb.inl_dev) { > - plt_err("Failed to create ingress sa, inline dev " > - "not found or spi not in range"); > + snprintf(tbuf, sizeof(tbuf), > + "Failed to create ingress sa, inline dev " > + "not found or spi not in range"); > rc = -ENOTSUP; > goto mempool_put; > } else if (!sa) { > - plt_err("Failed to create ingress sa"); > + snprintf(tbuf, sizeof(tbuf), > + "Failed to create ingress sa"); > rc = -EFAULT; > goto mempool_put; > } > @@ -301,8 +308,9 @@ cn10k_eth_sec_session_create(void *device, > > /* Check if SA is already in use */ > if (inb_sa->w2.s.valid) { > - plt_err("Inbound SA with SPI %u already in use", > - ipsec->spi); > + snprintf(tbuf, sizeof(tbuf), > + "Inbound SA with SPI %u already in use", > + ipsec->spi); > rc = -EBUSY; > goto mempool_put; > } > @@ -313,7 +321,8 @@ cn10k_eth_sec_session_create(void *device, > /* Fill inbound sa params */ > rc = cnxk_ot_ipsec_inb_sa_fill(inb_sa_dptr, ipsec, crypto); > if (rc) { > - plt_err("Failed to init inbound sa, rc=%d", rc); > + snprintf(tbuf, sizeof(tbuf), > + "Failed to init inbound sa, rc=%d", rc); > goto mempool_put; > } > > @@ -371,7 +380,8 @@ cn10k_eth_sec_session_create(void *device, > /* Fill outbound sa params */ > rc = cnxk_ot_ipsec_outb_sa_fill(outb_sa_dptr, ipsec, crypto); > if (rc) { > - plt_err("Failed to init outbound sa, rc=%d", rc); > + snprintf(tbuf, sizeof(tbuf), > + "Failed to init outbound sa, rc=%d", rc); > rc |= cnxk_eth_outb_sa_idx_put(dev, sa_idx); > goto mempool_put; > } > @@ -409,6 +419,7 @@ cn10k_eth_sec_session_create(void *device, > } > if (inbound && inl_dev) > roc_nix_inl_dev_unlock(); > + rte_spinlock_unlock(lock); > > plt_nix_dbg("Created %s session with spi=%u, sa_idx=%u inl_dev=%u", > inbound ? "inbound" : "outbound", eth_sec->spi, > @@ -422,7 +433,11 @@ cn10k_eth_sec_session_create(void *device, > mempool_put: > if (inbound && inl_dev) > roc_nix_inl_dev_unlock(); > + rte_spinlock_unlock(lock); > + > rte_mempool_put(mempool, eth_sec); > + if (rc) > + plt_err("%s", tbuf); > return rc; > } > > @@ -433,12 +448,16 @@ cn10k_eth_sec_session_destroy(void *device, struct rte_security_session *sess) > struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); > struct cnxk_eth_sec_sess *eth_sec; > struct rte_mempool *mp; > + rte_spinlock_t *lock; > void *sa_dptr; > > eth_sec = cnxk_eth_sec_sess_get_by_sess(dev, sess); > if (!eth_sec) > return -ENOENT; > > + lock = eth_sec->inb ? &dev->inb.lock : &dev->outb.lock; > + rte_spinlock_lock(lock); > + > if (eth_sec->inl_dev) > roc_nix_inl_dev_lock(); > > @@ -468,6 +487,8 @@ cn10k_eth_sec_session_destroy(void *device, struct rte_security_session *sess) > if (eth_sec->inl_dev) > roc_nix_inl_dev_unlock(); > > + rte_spinlock_unlock(lock); > + > plt_nix_dbg("Destroyed %s session with spi=%u, sa_idx=%u, inl_dev=%u", > eth_sec->inb ? "inbound" : "outbound", eth_sec->spi, > eth_sec->sa_idx, eth_sec->inl_dev); > diff --git a/drivers/net/cnxk/cn9k_ethdev_sec.c b/drivers/net/cnxk/cn9k_ethdev_sec.c > index b070ad5..efdce22 100644 > --- a/drivers/net/cnxk/cn9k_ethdev_sec.c > +++ b/drivers/net/cnxk/cn9k_ethdev_sec.c > @@ -146,6 +146,8 @@ cn9k_eth_sec_session_create(void *device, > struct cn9k_sec_sess_priv sess_priv; > struct rte_crypto_sym_xform *crypto; > struct cnxk_eth_sec_sess *eth_sec; > + rte_spinlock_t *lock; > + char tbuf[128] = {0}; > bool inbound; > int rc = 0; > > @@ -174,6 +176,9 @@ cn9k_eth_sec_session_create(void *device, > return -ENOMEM; > } > > + lock = inbound ? &dev->inb.lock : &dev->outb.lock; > + rte_spinlock_lock(lock); > + > memset(eth_sec, 0, sizeof(struct cnxk_eth_sec_sess)); > sess_priv.u64 = 0; > > @@ -187,18 +192,20 @@ cn9k_eth_sec_session_create(void *device, > /* Get Inbound SA from NIX_RX_IPSEC_SA_BASE. Assume no inline > * device always for CN9K. > */ > - inb_sa = (struct roc_onf_ipsec_inb_sa *) > - roc_nix_inl_inb_sa_get(&dev->nix, false, ipsec->spi); > + inb_sa = (struct roc_onf_ipsec_inb_sa *)roc_nix_inl_inb_sa_get( > + &dev->nix, false, ipsec->spi); > if (!inb_sa) { > - plt_err("Failed to create ingress sa"); > + snprintf(tbuf, sizeof(tbuf), > + "Failed to create ingress sa"); > rc = -EFAULT; > goto mempool_put; > } > > /* Check if SA is already in use */ > if (inb_sa->ctl.valid) { > - plt_err("Inbound SA with SPI %u already in use", > - ipsec->spi); > + snprintf(tbuf, sizeof(tbuf), > + "Inbound SA with SPI %u already in use", > + ipsec->spi); > rc = -EBUSY; > goto mempool_put; > } > @@ -208,7 +215,8 @@ cn9k_eth_sec_session_create(void *device, > /* Fill inbound sa params */ > rc = cnxk_onf_ipsec_inb_sa_fill(inb_sa, ipsec, crypto); > if (rc) { > - plt_err("Failed to init inbound sa, rc=%d", rc); > + snprintf(tbuf, sizeof(tbuf), > + "Failed to init inbound sa, rc=%d", rc); > goto mempool_put; > } > > @@ -263,7 +271,8 @@ cn9k_eth_sec_session_create(void *device, > /* Fill outbound sa params */ > rc = cnxk_onf_ipsec_outb_sa_fill(outb_sa, ipsec, crypto); > if (rc) { > - plt_err("Failed to init outbound sa, rc=%d", rc); > + snprintf(tbuf, sizeof(tbuf), > + "Failed to init outbound sa, rc=%d", rc); > rc |= cnxk_eth_outb_sa_idx_put(dev, sa_idx); > goto mempool_put; > } > @@ -300,6 +309,8 @@ cn9k_eth_sec_session_create(void *device, > /* Sync SA content */ > plt_atomic_thread_fence(__ATOMIC_ACQ_REL); > > + rte_spinlock_unlock(lock); > + > plt_nix_dbg("Created %s session with spi=%u, sa_idx=%u", > inbound ? "inbound" : "outbound", eth_sec->spi, > eth_sec->sa_idx); > @@ -310,7 +321,10 @@ cn9k_eth_sec_session_create(void *device, > > return 0; > mempool_put: > + rte_spinlock_unlock(lock); > rte_mempool_put(mempool, eth_sec); > + if (rc) > + plt_err("%s", tbuf); > return rc; > } > > @@ -323,11 +337,15 @@ cn9k_eth_sec_session_destroy(void *device, struct rte_security_session *sess) > struct roc_onf_ipsec_inb_sa *inb_sa; > struct cnxk_eth_sec_sess *eth_sec; > struct rte_mempool *mp; > + rte_spinlock_t *lock; > > eth_sec = cnxk_eth_sec_sess_get_by_sess(dev, sess); > if (!eth_sec) > return -ENOENT; > > + lock = eth_sec->inb ? &dev->inb.lock : &dev->outb.lock; > + rte_spinlock_lock(lock); > + > if (eth_sec->inb) { > inb_sa = eth_sec->sa; > /* Disable SA */ > @@ -349,6 +367,8 @@ cn9k_eth_sec_session_destroy(void *device, struct rte_security_session *sess) > /* Sync SA content */ > plt_atomic_thread_fence(__ATOMIC_ACQ_REL); > > + rte_spinlock_unlock(lock); > + > plt_nix_dbg("Destroyed %s session with spi=%u, sa_idx=%u", > eth_sec->inb ? "inbound" : "outbound", eth_sec->spi, > eth_sec->sa_idx); > diff --git a/drivers/net/cnxk/cnxk_ethdev.c b/drivers/net/cnxk/cnxk_ethdev.c > index 74f6255..c2e7f2f 100644 > --- a/drivers/net/cnxk/cnxk_ethdev.c > +++ b/drivers/net/cnxk/cnxk_ethdev.c > @@ -1605,8 +1605,6 @@ cnxk_eth_dev_init(struct rte_eth_dev *eth_dev) > sec_ctx->flags = > (RTE_SEC_CTX_F_FAST_SET_MDATA | RTE_SEC_CTX_F_FAST_GET_UDATA); > eth_dev->security_ctx = sec_ctx; > - TAILQ_INIT(&dev->inb.list); > - TAILQ_INIT(&dev->outb.list); > > /* For secondary processes, the primary has done all the work */ > if (rte_eal_process_type() != RTE_PROC_PRIMARY) > @@ -1642,6 +1640,11 @@ cnxk_eth_dev_init(struct rte_eth_dev *eth_dev) > dev->configured = 0; > dev->ptype_disable = 0; > > + TAILQ_INIT(&dev->inb.list); > + TAILQ_INIT(&dev->outb.list); > + rte_spinlock_init(&dev->inb.lock); > + rte_spinlock_init(&dev->outb.lock); > + > /* For vfs, returned max_entries will be 0. but to keep default mac > * address, one entry must be allocated. so setting up to 1. > */ > diff --git a/drivers/net/cnxk/cnxk_ethdev.h b/drivers/net/cnxk/cnxk_ethdev.h > index 5bfda3d..db1fb4b 100644 > --- a/drivers/net/cnxk/cnxk_ethdev.h > +++ b/drivers/net/cnxk/cnxk_ethdev.h > @@ -271,6 +271,9 @@ struct cnxk_eth_dev_sec_inb { > > /* DPTR for WRITE_SA microcode op */ > void *sa_dptr; > + > + /* Lock to synchronize sa setup/release */ > + rte_spinlock_t lock; > }; > > /* Outbound security data */ > @@ -304,6 +307,9 @@ struct cnxk_eth_dev_sec_outb { > > /* DPTR for WRITE_SA microcode op */ > void *sa_dptr; > + > + /* Lock to synchronize sa setup/release */ > + rte_spinlock_t lock; > }; > > struct cnxk_eth_dev { > -- > 2.8.4 >