From: Li Zhang <lizh@nvidia.com> To: dekelp@nvidia.com, orika@nvidia.com, viacheslavo@nvidia.com, matan@nvidia.com, shahafs@nvidia.com Cc: dev@dpdk.org, thomas@monjalon.net, rasland@nvidia.com, roniba@nvidia.com Subject: [dpdk-dev] [PATCH v5 13/14] net/mlx5: make ASO meter queue thread-safe Date: Thu, 15 Apr 2021 18:11:33 +0300 Message-ID: <20210415151135.2098674-14-lizh@nvidia.com> (raw) In-Reply-To: <20210415151135.2098674-1-lizh@nvidia.com> Synchronize ASO meter queue accesses from different threads using a spinlock. Signed-off-by: Li Zhang <lizh@nvidia.com> Acked-by: Matan Azrad <matan@nvidia.com> --- drivers/net/mlx5/mlx5.h | 1 + drivers/net/mlx5/mlx5_flow_aso.c | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index d2ae69f209..d0798226ce 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -493,6 +493,7 @@ struct mlx5_aso_sq_elem { struct mlx5_aso_sq { uint16_t log_desc_n; + rte_spinlock_t sqsl; struct mlx5_aso_cq cq; struct mlx5_devx_sq sq_obj; volatile uint64_t *uar_addr; diff --git a/drivers/net/mlx5/mlx5_flow_aso.c b/drivers/net/mlx5/mlx5_flow_aso.c index fe5c9912f2..cd2cc016b9 100644 --- a/drivers/net/mlx5/mlx5_flow_aso.c +++ b/drivers/net/mlx5/mlx5_flow_aso.c @@ -274,6 +274,7 @@ mlx5_aso_sq_create(void *ctx, struct mlx5_aso_sq *sq, int socket, sq->tail = 0; sq->sqn = sq->sq_obj.sq->id; sq->uar_addr = mlx5_os_get_devx_uar_reg_addr(uar); + rte_spinlock_init(&sq->sqsl); return 0; error: mlx5_aso_destroy_sq(sq); @@ -665,12 +666,15 @@ mlx5_aso_mtr_sq_enqueue_single(struct mlx5_aso_sq *sq, struct mlx5_flow_meter_info *fm = NULL; uint16_t size = 1 << sq->log_desc_n; uint16_t mask = size - 1; - uint16_t res = size - (uint16_t)(sq->head - sq->tail); + uint16_t res; uint32_t dseg_idx = 0; struct mlx5_aso_mtr_pool *pool = NULL; + rte_spinlock_lock(&sq->sqsl); + res = size - (uint16_t)(sq->head - sq->tail); if (unlikely(!res)) { DRV_LOG(ERR, "Fail: SQ is full and no free WQE to send"); + rte_spinlock_unlock(&sq->sqsl); return 0; } wqe = &sq->sq_obj.aso_wqes[sq->head & mask]; @@ -707,6 +711,7 @@ mlx5_aso_mtr_sq_enqueue_single(struct mlx5_aso_sq *sq, rte_wmb(); *sq->uar_addr = *(volatile uint64_t *)wqe; /* Assume 64 bit ARCH. */ rte_wmb(); + rte_spinlock_unlock(&sq->sqsl); return 1; } @@ -737,12 +742,16 @@ mlx5_aso_mtr_completion_handle(struct mlx5_aso_sq *sq) const unsigned int mask = cq_size - 1; uint32_t idx; uint32_t next_idx = cq->cq_ci & mask; - const uint16_t max = (uint16_t)(sq->head - sq->tail); + uint16_t max; uint16_t n = 0; int ret; - if (unlikely(!max)) + rte_spinlock_lock(&sq->sqsl); + max = (uint16_t)(sq->head - sq->tail); + if (unlikely(!max)) { + rte_spinlock_unlock(&sq->sqsl); return; + } do { idx = next_idx; next_idx = (cq->cq_ci + 1) & mask; @@ -769,6 +778,7 @@ mlx5_aso_mtr_completion_handle(struct mlx5_aso_sq *sq) rte_io_wmb(); cq->cq_obj.db_rec[0] = rte_cpu_to_be_32(cq->cq_ci); } + rte_spinlock_unlock(&sq->sqsl); } /** -- 2.27.0
next prev parent reply other threads:[~2021-04-15 15:13 UTC|newest] Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-03-31 7:36 [dpdk-dev] [PATCH 00/13] Add ASO meter support in MLX5 PMD Li Zhang 2021-03-31 7:36 ` [dpdk-dev] [PATCH 01/13] net/mlx5: support three level table walk Li Zhang 2021-03-31 7:36 ` [dpdk-dev] [PATCH 02/13] net/mlx5: fix meter statistics Li Zhang 2021-03-31 7:36 ` [dpdk-dev] [PATCH 03/13] net/mlx5: optimize " Li Zhang 2021-03-31 7:36 ` [dpdk-dev] [PATCH 04/13] net/mlx5: use mask for meter register setting Li Zhang 2021-03-31 7:36 ` [dpdk-dev] [PATCH 05/13] common/mlx5: add definitions for ASO flow meter Li Zhang 2021-03-31 7:36 ` [dpdk-dev] [PATCH 06/13] common/mlx5: add read ASO flow meter HCA capability Li Zhang 2021-03-31 7:36 ` [dpdk-dev] [PATCH 07/13] common/mlx5: add DevX API to create ASO flow meter object Li Zhang 2021-03-31 7:36 ` [dpdk-dev] [PATCH 08/13] net/mlx5: flow meter pool to manage " Li Zhang 2021-03-31 7:36 ` [dpdk-dev] [PATCH 09/13] net/mlx5: init/uninit flow meter queue for WQE Li Zhang 2021-03-31 7:36 ` [dpdk-dev] [PATCH 10/13] net/mlx5: aso flow meter send WQE and CQE handle Li Zhang 2021-03-31 7:36 ` [dpdk-dev] [PATCH 11/13] net/mlx5: add support of ASO meter action Li Zhang 2021-03-31 7:36 ` [dpdk-dev] [PATCH 12/13] net/mlx5: make ASO meter queue thread-safe Li Zhang 2021-03-31 7:36 ` [dpdk-dev] [PATCH 13/13] net/mlx5: allow multiple flow tables on the same level Li Zhang 2021-04-02 15:16 ` [dpdk-dev] [PATCH v2 00/13] Add ASO meter support in MLX5 PMD Li Zhang 2021-04-02 15:16 ` [dpdk-dev] [PATCH v2 01/13] net/mlx5: support three level table walk Li Zhang 2021-04-02 15:16 ` [dpdk-dev] [PATCH v2 02/13] net/mlx5: fix meter statistics Li Zhang 2021-04-02 15:16 ` [dpdk-dev] [PATCH v2 03/13] net/mlx5: optimize " Li Zhang 2021-04-02 15:16 ` [dpdk-dev] [PATCH v2 04/13] net/mlx5: use mask for meter register setting Li Zhang 2021-04-02 15:16 ` [dpdk-dev] [PATCH v2 05/13] common/mlx5: add definitions for ASO flow meter Li Zhang 2021-04-02 15:16 ` [dpdk-dev] [PATCH v2 06/13] common/mlx5: add read ASO flow meter HCA capability Li Zhang 2021-04-02 15:16 ` [dpdk-dev] [PATCH v2 07/13] common/mlx5: add DevX API to create ASO flow meter object Li Zhang 2021-04-13 16:50 ` Kinsella, Ray 2021-04-02 15:16 ` [dpdk-dev] [PATCH v2 08/13] net/mlx5: flow meter pool to manage " Li Zhang 2021-04-02 15:16 ` [dpdk-dev] [PATCH v2 09/13] net/mlx5: init/uninit flow meter queue for WQE Li Zhang 2021-04-02 15:16 ` [dpdk-dev] [PATCH v2 10/13] net/mlx5: aso flow meter send WQE and CQE handle Li Zhang 2021-04-02 15:16 ` [dpdk-dev] [PATCH v2 11/13] net/mlx5: add support of ASO meter action Li Zhang 2021-04-02 15:16 ` [dpdk-dev] [PATCH v2 12/13] net/mlx5: make ASO meter queue thread-safe Li Zhang 2021-04-02 15:16 ` [dpdk-dev] [PATCH v2 13/13] net/mlx5: allow multiple flow tables on the same level Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 00/14] Add ASO meter support in MLX5 PMD Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 01/14] net/mlx5: support three level table walk Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 02/14] common/mlx5: add color register idle bits definition Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 03/14] net/mlx5: fix meter statistics Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 04/14] net/mlx5: optimize " Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 05/14] net/mlx5: use mask for meter register setting Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 06/14] common/mlx5: add definitions for ASO flow meter Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 07/14] common/mlx5: add read ASO flow meter HCA capability Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 08/14] common/mlx5: add DevX API to create ASO flow meter object Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 09/14] net/mlx5: flow meter pool to manage " Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 10/14] net/mlx5: initialize the flow meter ASO SQ Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 11/14] net/mlx5: aso flow meter send WQE and CQE handle Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 12/14] net/mlx5: add support of ASO meter action Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 13/14] net/mlx5: make ASO meter queue thread-safe Li Zhang 2021-04-13 0:10 ` [dpdk-dev] [PATCH v3 14/14] net/mlx5: allow multiple flow tables on the same level Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 00/14] Add ASO meter support in MLX5 PMD Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 01/14] net/mlx5: support three level table walk Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 02/14] common/mlx5: add color register idle bits definition Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 03/14] net/mlx5: fix meter statistics Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 04/14] net/mlx5: optimize " Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 05/14] net/mlx5: use mask for meter register setting Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 06/14] common/mlx5: add definitions for ASO flow meter Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 07/14] common/mlx5: add read ASO flow meter HCA capability Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 08/14] common/mlx5: add DevX API to create ASO flow meter object Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 09/14] net/mlx5: flow meter pool to manage " Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 10/14] net/mlx5: initialize the flow meter ASO SQ Li Zhang 2021-04-15 13:05 ` Raslan Darawsheh 2021-04-15 14:21 ` Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 11/14] net/mlx5: aso flow meter send WQE and CQE handle Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 12/14] net/mlx5: add support of ASO meter action Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 13/14] net/mlx5: make ASO meter queue thread-safe Li Zhang 2021-04-14 2:57 ` [dpdk-dev] [PATCH v4 14/14] net/mlx5: allow multiple flow tables on the same level Li Zhang 2021-04-15 15:11 ` [dpdk-dev] [PATCH v5 00/14] Add ASO meter support in MLX5 PMD Li Zhang 2021-04-15 15:11 ` [dpdk-dev] [PATCH v5 01/14] net/mlx5: support three level table walk Li Zhang 2021-04-15 15:11 ` [dpdk-dev] [PATCH v5 02/14] common/mlx5: add color register idle bits definition Li Zhang 2021-04-15 15:11 ` [dpdk-dev] [PATCH v5 03/14] net/mlx5: fix meter statistics Li Zhang 2021-04-15 15:11 ` [dpdk-dev] [PATCH v5 04/14] net/mlx5: optimize " Li Zhang 2021-04-15 15:11 ` [dpdk-dev] [PATCH v5 05/14] net/mlx5: use mask for meter register setting Li Zhang 2021-04-15 15:11 ` [dpdk-dev] [PATCH v5 06/14] common/mlx5: add definitions for ASO flow meter Li Zhang 2021-04-15 15:11 ` [dpdk-dev] [PATCH v5 07/14] common/mlx5: add read ASO flow meter HCA capability Li Zhang 2021-04-15 15:11 ` [dpdk-dev] [PATCH v5 08/14] common/mlx5: add DevX API to create ASO flow meter object Li Zhang 2021-04-15 15:11 ` [dpdk-dev] [PATCH v5 09/14] net/mlx5: flow meter pool to manage " Li Zhang 2021-04-15 15:11 ` [dpdk-dev] [PATCH v5 10/14] net/mlx5: initialize the flow meter ASO SQ Li Zhang 2021-04-15 15:11 ` [dpdk-dev] [PATCH v5 11/14] net/mlx5: aso flow meter send WQE and CQE handle Li Zhang 2021-04-19 21:46 ` Ferruh Yigit 2021-04-19 22:02 ` Thomas Monjalon 2021-04-20 10:35 ` Jiawei(Jonny) Wang 2021-04-15 15:11 ` [dpdk-dev] [PATCH v5 12/14] net/mlx5: add support of ASO meter action Li Zhang 2021-04-15 15:11 ` Li Zhang [this message] 2021-04-15 15:11 ` [dpdk-dev] [PATCH v5 14/14] net/mlx5: allow multiple flow tables on the same level Li Zhang 2021-04-18 19:33 ` [dpdk-dev] [PATCH v5 00/14] Add ASO meter support in MLX5 PMD Raslan Darawsheh 2021-04-19 21:42 ` Ferruh Yigit 2021-04-19 21:59 ` Thomas Monjalon 2021-04-20 10:33 ` Jiawei(Jonny) Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 00/15] " Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 01/15] net/mlx5: support three level table walk Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 02/15] common/mlx5: add color register idle bits definition Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 03/15] net/mlx5: fix meter statistics Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 04/15] net/mlx5: optimize " Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 05/15] net/mlx5: use mask for meter register setting Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 06/15] common/mlx5: add definitions for ASO flow meter Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 07/15] common/mlx5: add read ASO flow meter HCA capability Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 08/15] common/mlx5: add DevX API to create ASO flow meter object Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 09/15] net/mlx5: flow meter pool to manage " Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 10/15] net/mlx5: initialize the flow meter ASO SQ Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 11/15] net/mlx5: add meter ASO queue management Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 12/15] net/mlx5: add support of ASO meter action Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 13/15] net/mlx5: make ASO meter queue thread-safe Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 14/15] net/mlx5: allow multiple flow tables on the same level Jiawei Wang 2021-04-20 10:55 ` [dpdk-dev] [PATCH v6 15/15] doc: update release notes for ASO meter Jiawei Wang 2021-04-21 6:50 ` Raslan Darawsheh 2021-04-21 8:58 ` Ferruh Yigit 2021-04-21 6:51 ` [dpdk-dev] [PATCH v6 00/15] Add ASO meter support in MLX5 PMD Raslan Darawsheh 2021-04-21 8:31 ` Ferruh Yigit 2021-04-21 8:33 ` Asaf Penso 2021-04-21 8:58 ` Ferruh Yigit
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=20210415151135.2098674-14-lizh@nvidia.com \ --to=lizh@nvidia.com \ --cc=dekelp@nvidia.com \ --cc=dev@dpdk.org \ --cc=matan@nvidia.com \ --cc=orika@nvidia.com \ --cc=rasland@nvidia.com \ --cc=roniba@nvidia.com \ --cc=shahafs@nvidia.com \ --cc=thomas@monjalon.net \ --cc=viacheslavo@nvidia.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
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git