diff options
| author | Jacob Moroni <jmoroni@google.com> | 2026-06-18 20:14:55 +0000 |
|---|---|---|
| committer | Leon Romanovsky <leon@kernel.org> | 2026-07-05 06:44:41 -0400 |
| commit | 097f50384e1877b7cf3ace12ff0d1beed19f2088 (patch) | |
| tree | ab76006f6c6bfeff748fb92ec56823de47073c4b | |
| parent | c3fd3966f7dd871e47f9bcd8fe90d6e23e4cdb1a (diff) | |
| download | linux-097f50384e1877b7cf3ace12ff0d1beed19f2088.tar.gz linux-097f50384e1877b7cf3ace12ff0d1beed19f2088.zip | |
RDMA/irdma: Deduplicate the irdma_del_memlist logic
Simplify/dedup the irdma_del_memlist logic in preparation for
the QP/CQ/SRQ ring MR refcounting change that will follow in
a subsequent commit.
Signed-off-by: Jacob Moroni <jmoroni@google.com>
Link: https://patch.msgid.link/20260618201458.875740-2-jmoroni@google.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
| -rw-r--r-- | drivers/infiniband/hw/irdma/verbs.c | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/drivers/infiniband/hw/irdma/verbs.c b/drivers/infiniband/hw/irdma/verbs.c index cb54c7c8fcd8..cd34a9629e5e 100644 --- a/drivers/infiniband/hw/irdma/verbs.c +++ b/drivers/infiniband/hw/irdma/verbs.c @@ -3933,35 +3933,28 @@ static void irdma_del_memlist(struct irdma_mr *iwmr, { struct irdma_pbl *iwpbl = &iwmr->iwpbl; unsigned long flags; + spinlock_t *lock; switch (iwmr->type) { case IRDMA_MEMREG_TYPE_CQ: - spin_lock_irqsave(&ucontext->cq_reg_mem_list_lock, flags); - if (iwpbl->on_list) { - iwpbl->on_list = false; - list_del(&iwpbl->list); - } - spin_unlock_irqrestore(&ucontext->cq_reg_mem_list_lock, flags); + lock = &ucontext->cq_reg_mem_list_lock; break; case IRDMA_MEMREG_TYPE_QP: - spin_lock_irqsave(&ucontext->qp_reg_mem_list_lock, flags); - if (iwpbl->on_list) { - iwpbl->on_list = false; - list_del(&iwpbl->list); - } - spin_unlock_irqrestore(&ucontext->qp_reg_mem_list_lock, flags); + lock = &ucontext->qp_reg_mem_list_lock; break; case IRDMA_MEMREG_TYPE_SRQ: - spin_lock_irqsave(&ucontext->srq_reg_mem_list_lock, flags); - if (iwpbl->on_list) { - iwpbl->on_list = false; - list_del(&iwpbl->list); - } - spin_unlock_irqrestore(&ucontext->srq_reg_mem_list_lock, flags); + lock = &ucontext->srq_reg_mem_list_lock; break; default: - break; + return; + } + + spin_lock_irqsave(lock, flags); + if (iwpbl->on_list) { + iwpbl->on_list = false; + list_del(&iwpbl->list); } + spin_unlock_irqrestore(lock, flags); } /** |
