summaryrefslogtreecommitdiff
path: root/drivers/infiniband/hw/irdma/puda.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/hw/irdma/puda.c')
-rw-r--r--drivers/infiniband/hw/irdma/puda.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/irdma/puda.c b/drivers/infiniband/hw/irdma/puda.c
index cee47ddbd1b5..4f1a8c97faf1 100644
--- a/drivers/infiniband/hw/irdma/puda.c
+++ b/drivers/infiniband/hw/irdma/puda.c
@@ -809,6 +809,13 @@ error:
dma_free_coherent(dev->hw->device, rsrc->cqmem.size,
rsrc->cqmem.va, rsrc->cqmem.pa);
rsrc->cqmem.va = NULL;
+ } else {
+ scoped_guard(spinlock_irqsave, &dev->puda_cq_lock) {
+ if (rsrc->type == IRDMA_PUDA_RSRC_TYPE_ILQ)
+ dev->ilq_cq = cq;
+ else
+ dev->ieq_cq = cq;
+ }
}
return ret;
@@ -856,6 +863,13 @@ static void irdma_puda_free_cq(struct irdma_puda_rsrc *rsrc)
struct irdma_ccq_cqe_info compl_info;
struct irdma_sc_dev *dev = rsrc->dev;
+ scoped_guard(spinlock_irqsave, &dev->puda_cq_lock) {
+ if (rsrc->type == IRDMA_PUDA_RSRC_TYPE_ILQ)
+ dev->ilq_cq = NULL;
+ else
+ dev->ieq_cq = NULL;
+ }
+
if (rsrc->dev->ceq_valid) {
irdma_cqp_cq_destroy_cmd(dev, &rsrc->cq);
return;