From 2897c697b3266cae753e2349098cd98f36891c19 Mon Sep 17 00:00:00 2001 From: Li RongQing Date: Tue, 31 Mar 2026 08:26:04 -0400 Subject: [PATCH] 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 Reviewed-by: Tariq Toukan Link: https://patch.msgid.link/20260331122604.1933-1-lirongqing@baidu.com Signed-off-by: Jakub Kicinski --- drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 9 +++++---- 1 file 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 6c99c7f361634..c89417c1a1f96 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) -- 2.47.3