diff options
-rw-r--r-- | drivers/infiniband/hw/i40iw/i40iw.h | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/i40iw/i40iw_cm.c | 20 | ||||
-rw-r--r-- | drivers/infiniband/hw/i40iw/i40iw_hw.c | 4 |
3 files changed, 20 insertions, 6 deletions
diff --git a/drivers/infiniband/hw/i40iw/i40iw.h b/drivers/infiniband/hw/i40iw/i40iw.h index ef188e6b1f89..51b828026b53 100644 --- a/drivers/infiniband/hw/i40iw/i40iw.h +++ b/drivers/infiniband/hw/i40iw/i40iw.h | |||
@@ -512,7 +512,7 @@ u32 i40iw_initialize_hw_resources(struct i40iw_device *iwdev); | |||
512 | 512 | ||
513 | int i40iw_register_rdma_device(struct i40iw_device *iwdev); | 513 | int i40iw_register_rdma_device(struct i40iw_device *iwdev); |
514 | void i40iw_port_ibevent(struct i40iw_device *iwdev); | 514 | void i40iw_port_ibevent(struct i40iw_device *iwdev); |
515 | int i40iw_cm_disconn(struct i40iw_qp *); | 515 | void i40iw_cm_disconn(struct i40iw_qp *iwqp); |
516 | void i40iw_cm_disconn_worker(void *); | 516 | void i40iw_cm_disconn_worker(void *); |
517 | int mini_cm_recv_pkt(struct i40iw_cm_core *, struct i40iw_device *, | 517 | int mini_cm_recv_pkt(struct i40iw_cm_core *, struct i40iw_device *, |
518 | struct sk_buff *); | 518 | struct sk_buff *); |
diff --git a/drivers/infiniband/hw/i40iw/i40iw_cm.c b/drivers/infiniband/hw/i40iw/i40iw_cm.c index 25af89a3cdce..ff95feaee105 100644 --- a/drivers/infiniband/hw/i40iw/i40iw_cm.c +++ b/drivers/infiniband/hw/i40iw/i40iw_cm.c | |||
@@ -3359,21 +3359,33 @@ static void i40iw_cm_init_tsa_conn(struct i40iw_qp *iwqp, | |||
3359 | * i40iw_cm_disconn - when a connection is being closed | 3359 | * i40iw_cm_disconn - when a connection is being closed |
3360 | * @iwqp: associate qp for the connection | 3360 | * @iwqp: associate qp for the connection |
3361 | */ | 3361 | */ |
3362 | int i40iw_cm_disconn(struct i40iw_qp *iwqp) | 3362 | void i40iw_cm_disconn(struct i40iw_qp *iwqp) |
3363 | { | 3363 | { |
3364 | struct disconn_work *work; | 3364 | struct disconn_work *work; |
3365 | struct i40iw_device *iwdev = iwqp->iwdev; | 3365 | struct i40iw_device *iwdev = iwqp->iwdev; |
3366 | struct i40iw_cm_core *cm_core = &iwdev->cm_core; | 3366 | struct i40iw_cm_core *cm_core = &iwdev->cm_core; |
3367 | unsigned long flags; | ||
3367 | 3368 | ||
3368 | work = kzalloc(sizeof(*work), GFP_ATOMIC); | 3369 | work = kzalloc(sizeof(*work), GFP_ATOMIC); |
3369 | if (!work) | 3370 | if (!work) |
3370 | return -ENOMEM; /* Timer will clean up */ | 3371 | return; /* Timer will clean up */ |
3371 | 3372 | ||
3373 | spin_lock_irqsave(&iwdev->qptable_lock, flags); | ||
3374 | if (!iwdev->qp_table[iwqp->ibqp.qp_num]) { | ||
3375 | spin_unlock_irqrestore(&iwdev->qptable_lock, flags); | ||
3376 | i40iw_debug(&iwdev->sc_dev, I40IW_DEBUG_CM, | ||
3377 | "%s qp_id %d is already freed\n", | ||
3378 | __func__, iwqp->ibqp.qp_num); | ||
3379 | kfree(work); | ||
3380 | return; | ||
3381 | } | ||
3372 | i40iw_add_ref(&iwqp->ibqp); | 3382 | i40iw_add_ref(&iwqp->ibqp); |
3383 | spin_unlock_irqrestore(&iwdev->qptable_lock, flags); | ||
3384 | |||
3373 | work->iwqp = iwqp; | 3385 | work->iwqp = iwqp; |
3374 | INIT_WORK(&work->work, i40iw_disconnect_worker); | 3386 | INIT_WORK(&work->work, i40iw_disconnect_worker); |
3375 | queue_work(cm_core->disconn_wq, &work->work); | 3387 | queue_work(cm_core->disconn_wq, &work->work); |
3376 | return 0; | 3388 | return; |
3377 | } | 3389 | } |
3378 | 3390 | ||
3379 | /** | 3391 | /** |
diff --git a/drivers/infiniband/hw/i40iw/i40iw_hw.c b/drivers/infiniband/hw/i40iw/i40iw_hw.c index 5e2c16c725e3..b2854b11a240 100644 --- a/drivers/infiniband/hw/i40iw/i40iw_hw.c +++ b/drivers/infiniband/hw/i40iw/i40iw_hw.c | |||
@@ -308,7 +308,9 @@ void i40iw_process_aeq(struct i40iw_device *iwdev) | |||
308 | iwqp = iwdev->qp_table[info->qp_cq_id]; | 308 | iwqp = iwdev->qp_table[info->qp_cq_id]; |
309 | if (!iwqp) { | 309 | if (!iwqp) { |
310 | spin_unlock_irqrestore(&iwdev->qptable_lock, flags); | 310 | spin_unlock_irqrestore(&iwdev->qptable_lock, flags); |
311 | i40iw_pr_err("qp_id %d is already freed\n", info->qp_cq_id); | 311 | i40iw_debug(dev, I40IW_DEBUG_AEQ, |
312 | "%s qp_id %d is already freed\n", | ||
313 | __func__, info->qp_cq_id); | ||
312 | continue; | 314 | continue; |
313 | } | 315 | } |
314 | i40iw_add_ref(&iwqp->ibqp); | 316 | i40iw_add_ref(&iwqp->ibqp); |