summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi RongQing <lirongqing@baidu.com>2026-03-31 08:26:04 -0400
committerJakub Kicinski <kuba@kernel.org>2026-04-01 18:53:09 -0700
commit2897c697b3266cae753e2349098cd98f36891c19 (patch)
tree539d4bfa0b1b5c5f11ac87bc8acb3e0825abeee9
parent4cbcf82e26b6324a56c6d9c5bc49d59b6076b54d (diff)
net/mlx5: Move command entry freeing outside of spinlock
Move the kfree() call outside the critical section to reduce lock holding time. This aligns with the general principle of minimizing work under locks. Signed-off-by: Li RongQing <lirongqing@baidu.com> Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Link: https://patch.msgid.link/20260331122604.1933-1-lirongqing@baidu.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/cmd.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
index 6c99c7f36163..c89417c1a1f9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
@@ -196,17 +196,18 @@ static void cmd_ent_put(struct mlx5_cmd_work_ent *ent)
unsigned long flags;
spin_lock_irqsave(&cmd->alloc_lock, flags);
- if (!refcount_dec_and_test(&ent->refcnt))
- goto out;
+ if (!refcount_dec_and_test(&ent->refcnt)) {
+ spin_unlock_irqrestore(&cmd->alloc_lock, flags);
+ return;
+ }
if (ent->idx >= 0) {
cmd_free_index(cmd, ent->idx);
up(ent->page_queue ? &cmd->vars.pages_sem : &cmd->vars.sem);
}
+ spin_unlock_irqrestore(&cmd->alloc_lock, flags);
cmd_free_ent(ent);
-out:
- spin_unlock_irqrestore(&cmd->alloc_lock, flags);
}
static struct mlx5_cmd_layout *get_inst(struct mlx5_cmd *cmd, int idx)