RDMA/i40iw: Add qp table lock around AE processing
QP may be freed during Async Event processing. Add a lock around QP table to prevent it. Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com> Signed-off-by: Faisal Latif <faisal.latif@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:

committed by
Doug Ledford

parent
36a4793350
commit
996abf0a52
@@ -506,14 +506,19 @@ void i40iw_rem_ref(struct ib_qp *ibqp)
|
||||
struct cqp_commands_info *cqp_info;
|
||||
struct i40iw_device *iwdev;
|
||||
u32 qp_num;
|
||||
unsigned long flags;
|
||||
|
||||
iwqp = to_iwqp(ibqp);
|
||||
if (!atomic_dec_and_test(&iwqp->refcount))
|
||||
return;
|
||||
|
||||
iwdev = iwqp->iwdev;
|
||||
spin_lock_irqsave(&iwdev->qptable_lock, flags);
|
||||
if (!atomic_dec_and_test(&iwqp->refcount)) {
|
||||
spin_unlock_irqrestore(&iwdev->qptable_lock, flags);
|
||||
return;
|
||||
}
|
||||
|
||||
qp_num = iwqp->ibqp.qp_num;
|
||||
iwdev->qp_table[qp_num] = NULL;
|
||||
spin_unlock_irqrestore(&iwdev->qptable_lock, flags);
|
||||
cqp_request = i40iw_get_cqp_request(&iwdev->cqp, false);
|
||||
if (!cqp_request)
|
||||
return;
|
||||
|
Reference in New Issue
Block a user