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 2FA60A00C2; Fri, 6 Jan 2023 12:36:39 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1F858400EF; Fri, 6 Jan 2023 12:36:39 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 7BEE0400D4 for ; Fri, 6 Jan 2023 12:36:38 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3066ioCk031574 for ; Fri, 6 Jan 2023 03:36:37 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=GmO3j/MkySBEcPV560GSmM59QZ0YYtSRvRR/a+40lyk=; b=cBtFLhr4KwO16+L9t6OSuEMnl0JL7xnbV/1pwmHAuYtTsV7uiz2mCIcXwNCvSbECGL2u WPYYIHfguXvfw8SEz7of9XutusATwaausUXSnNTz4XSrzE04FFRdqocGN9yjnDLHDRnE ucBPRQpKPP8t/vs9VhFMb8mmFBL1d3bXfKpv3odR56p9TaQ7GdLg9MkzSDA3g1K6Euif SZz98bOkmEeIakaof9gbj84z1S7a2Qj8LdPGMx5+U90dTnfJRmmgE3ZaLVgM9dSutZnR XU9mjDXsK6+aljed1zi+bvHGZcKrZHOsHAG2OyI+FvZQ3yThiZAT8ewdG0qWmDt8AgyN Kg== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3mxemv8u24-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Fri, 06 Jan 2023 03:36:37 -0800 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Fri, 6 Jan 2023 03:36:35 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.42 via Frontend Transport; Fri, 6 Jan 2023 03:36:35 -0800 Received: from localhost.localdomain (unknown [10.28.36.142]) by maili.marvell.com (Postfix) with ESMTP id 85A6F3F7069; Fri, 6 Jan 2023 03:36:31 -0800 (PST) From: Ashwin Sekhar T K To: , Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: , , , , , , Subject: [PATCH] common/cnxk: synchronize NPA aura bitmap accesses Date: Fri, 6 Jan 2023 17:06:27 +0530 Message-ID: <20230106113627.42097-1-asekhar@marvell.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-GUID: ZQltf6ZCU1zvMH98CO5Djd4VOIaQDwTj X-Proofpoint-ORIG-GUID: ZQltf6ZCU1zvMH98CO5Djd4VOIaQDwTj X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.923,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2023-01-06_06,2023-01-06_01,2022-06-22_01 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 Ensure that all cnxk mempool aura bitmap accesses are synchronized. Signed-off-by: Ashwin Sekhar T K --- drivers/common/cnxk/roc_idev.c | 1 + drivers/common/cnxk/roc_idev_priv.h | 1 + drivers/common/cnxk/roc_npa.c | 29 ++++++++++++++++++++++++++++- drivers/common/cnxk/roc_npa.h | 2 ++ drivers/common/cnxk/version.map | 2 ++ 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/drivers/common/cnxk/roc_idev.c b/drivers/common/cnxk/roc_idev.c index 4d2eff93ce..62a4fd8880 100644 --- a/drivers/common/cnxk/roc_idev.c +++ b/drivers/common/cnxk/roc_idev.c @@ -40,6 +40,7 @@ idev_set_defaults(struct idev_cfg *idev) idev->cpt = NULL; idev->nix_inl_dev = NULL; plt_spinlock_init(&idev->nix_inl_dev_lock); + plt_spinlock_init(&idev->npa_dev_lock); __atomic_store_n(&idev->npa_refcnt, 0, __ATOMIC_RELEASE); } diff --git a/drivers/common/cnxk/roc_idev_priv.h b/drivers/common/cnxk/roc_idev_priv.h index 315cc6f52c..b97d2936a2 100644 --- a/drivers/common/cnxk/roc_idev_priv.h +++ b/drivers/common/cnxk/roc_idev_priv.h @@ -33,6 +33,7 @@ struct idev_cfg { struct nix_inl_dev *nix_inl_dev; struct idev_nix_inl_cfg inl_cfg; plt_spinlock_t nix_inl_dev_lock; + plt_spinlock_t npa_dev_lock; }; /* Generic */ diff --git a/drivers/common/cnxk/roc_npa.c b/drivers/common/cnxk/roc_npa.c index ee42434c38..f015fc2f1b 100644 --- a/drivers/common/cnxk/roc_npa.c +++ b/drivers/common/cnxk/roc_npa.c @@ -325,14 +325,19 @@ npa_aura_pool_pair_alloc(struct npa_lf *lf, const uint32_t block_size, block_size > ROC_NPA_MAX_BLOCK_SZ) return NPA_ERR_INVALID_BLOCK_SZ; + roc_npa_dev_lock(); /* Get aura_id from resource bitmap */ aura_id = find_free_aura(lf, flags); - if (aura_id < 0) + if (aura_id < 0) { + roc_npa_dev_unlock(); return NPA_ERR_AURA_ID_ALLOC; + } /* Mark pool as reserved */ plt_bitmap_clear(lf->npa_bmp, aura_id); + roc_npa_dev_unlock(); + /* Configuration based on each aura has separate pool(aura-pool pair) */ pool_id = aura_id; rc = (aura_id < 0 || pool_id >= (int)lf->nr_pools || @@ -401,7 +406,9 @@ npa_aura_pool_pair_alloc(struct npa_lf *lf, const uint32_t block_size, stack_mem_free: plt_memzone_free(mz); aura_res_put: + roc_npa_dev_lock(); plt_bitmap_set(lf->npa_bmp, aura_id); + roc_npa_dev_unlock(); exit: return rc; } @@ -501,7 +508,9 @@ npa_aura_pool_pair_free(struct npa_lf *lf, uint64_t aura_handle) rc |= npa_stack_dma_free(lf, name, pool_id); memset(&lf->aura_attr[aura_id], 0, sizeof(struct npa_aura_attr)); + roc_npa_dev_lock(); plt_bitmap_set(lf->npa_bmp, aura_id); + roc_npa_dev_unlock(); return rc; } @@ -921,3 +930,21 @@ roc_npa_dev_fini(struct roc_npa *roc_npa) npa->dev.drv_inited = false; return dev_fini(&npa->dev, npa->pci_dev); } + +void +roc_npa_dev_lock(void) +{ + struct idev_cfg *idev = idev_get_cfg(); + + if (idev != NULL) + plt_spinlock_lock(&idev->npa_dev_lock); +} + +void +roc_npa_dev_unlock(void) +{ + struct idev_cfg *idev = idev_get_cfg(); + + if (idev != NULL) + plt_spinlock_unlock(&idev->npa_dev_lock); +} diff --git a/drivers/common/cnxk/roc_npa.h b/drivers/common/cnxk/roc_npa.h index fed1942404..c9093e6448 100644 --- a/drivers/common/cnxk/roc_npa.h +++ b/drivers/common/cnxk/roc_npa.h @@ -762,5 +762,7 @@ int __roc_api roc_npa_pool_op_pc_reset(uint64_t aura_handle); int __roc_api roc_npa_aura_drop_set(uint64_t aura_handle, uint64_t limit, bool ena); +void __roc_api roc_npa_dev_lock(void); +void __roc_api roc_npa_dev_unlock(void); #endif /* _ROC_NPA_H_ */ diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map index 17f0ec6b48..77bf3f2807 100644 --- a/drivers/common/cnxk/version.map +++ b/drivers/common/cnxk/version.map @@ -321,6 +321,8 @@ INTERNAL { roc_npa_ctx_dump; roc_npa_dev_fini; roc_npa_dev_init; + roc_npa_dev_lock; + roc_npa_dev_unlock; roc_npa_dump; roc_npa_lf_init_cb_register; roc_npa_pool_create; -- 2.25.1