RDMA/nes: Encapsulate logic nes_put_cqp_request()
The iw_nes driver repeats the logic if (atomic_dec_and_test(&cqp_request->refcount)) { if (cqp_request->dynamic) { kfree(cqp_request); } else { spin_lock_irqsave(&nesdev->cqp.lock, flags); list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs); spin_unlock_irqrestore(&nesdev->cqp.lock, flags); } } over and over. Wrap this up in functions nes_free_cqp_request() and nes_put_cqp_request() to simplify such code. In addition to making the source smaller and more readable, this shrinks the compiled code quite a bit: add/remove: 2/0 grow/shrink: 0/13 up/down: 164/-1692 (-1528) function old new delta nes_free_cqp_request - 147 +147 nes_put_cqp_request - 17 +17 nes_modify_qp 2316 2293 -23 nes_hw_modify_qp 737 657 -80 nes_dereg_mr 945 860 -85 flush_wqes 501 416 -85 nes_manage_apbvt 648 560 -88 nes_reg_mr 1117 1026 -91 nes_cqp_ce_handler 927 769 -158 nes_alloc_mw 1052 884 -168 nes_create_qp 5314 5141 -173 nes_alloc_fmr 2212 2035 -177 nes_destroy_cq 1097 918 -179 nes_create_cq 2787 2598 -189 nes_dealloc_mw 762 566 -196 Signed-off-by: Roland Dreier <rolandd@cisco.com> Acked-by: Faisal Latif <flatif@neteffect.com>
This commit is contained in:
Родитель
ee1e2c82c2
Коммит
1ff66e8c1f
|
@ -538,6 +538,10 @@ void nes_read_1G_phy_reg(struct nes_device *, u8, u8, u16 *);
|
|||
void nes_write_10G_phy_reg(struct nes_device *, u16, u8, u16, u16);
|
||||
void nes_read_10G_phy_reg(struct nes_device *, u8, u8, u16);
|
||||
struct nes_cqp_request *nes_get_cqp_request(struct nes_device *);
|
||||
void nes_free_cqp_request(struct nes_device *nesdev,
|
||||
struct nes_cqp_request *cqp_request);
|
||||
void nes_put_cqp_request(struct nes_device *nesdev,
|
||||
struct nes_cqp_request *cqp_request);
|
||||
void nes_post_cqp_request(struct nes_device *, struct nes_cqp_request *, int);
|
||||
int nes_arp_table(struct nes_device *, u32, u8 *, u32);
|
||||
void nes_mh_fix(unsigned long);
|
||||
|
|
|
@ -2710,39 +2710,11 @@ static void nes_cqp_ce_handler(struct nes_device *nesdev, struct nes_hw_cq *cq)
|
|||
barrier();
|
||||
cqp_request->request_done = 1;
|
||||
wake_up(&cqp_request->waitq);
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
nes_debug(NES_DBG_CQP, "CQP request %p (opcode 0x%02X) freed.\n",
|
||||
cqp_request,
|
||||
le32_to_cpu(cqp_request->cqp_wqe.wqe_words[NES_CQP_WQE_OPCODE_IDX])&0x3f);
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
} else if (cqp_request->callback) {
|
||||
/* Envoke the callback routine */
|
||||
cqp_request->cqp_callback(nesdev, cqp_request);
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
} else {
|
||||
nes_debug(NES_DBG_CQP, "CQP request %p (opcode 0x%02X) freed.\n",
|
||||
cqp_request,
|
||||
le32_to_cpu(cqp_request->cqp_wqe.wqe_words[NES_CQP_WQE_OPCODE_IDX]) & 0x3f);
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
if (cqp_request->callback)
|
||||
cqp_request->cqp_callback(nesdev, cqp_request);
|
||||
nes_free_cqp_request(nesdev, cqp_request);
|
||||
}
|
||||
} else {
|
||||
wake_up(&nesdev->cqp.waitq);
|
||||
|
@ -3149,7 +3121,6 @@ int nes_manage_apbvt(struct nes_vnic *nesvnic, u32 accel_local_port,
|
|||
{
|
||||
struct nes_device *nesdev = nesvnic->nesdev;
|
||||
struct nes_hw_cqp_wqe *cqp_wqe;
|
||||
unsigned long flags;
|
||||
struct nes_cqp_request *cqp_request;
|
||||
int ret = 0;
|
||||
u16 major_code;
|
||||
|
@ -3184,15 +3155,9 @@ int nes_manage_apbvt(struct nes_vnic *nesvnic, u32 accel_local_port,
|
|||
nes_debug(NES_DBG_QP, "Completed, ret=%u, CQP Major:Minor codes = 0x%04X:0x%04X\n",
|
||||
ret, cqp_request->major_code, cqp_request->minor_code);
|
||||
major_code = cqp_request->major_code;
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
|
||||
if (!ret)
|
||||
return -ETIME;
|
||||
else if (major_code)
|
||||
|
@ -3262,7 +3227,6 @@ void nes_manage_arp_cache(struct net_device *netdev, unsigned char *mac_addr,
|
|||
void flush_wqes(struct nes_device *nesdev, struct nes_qp *nesqp,
|
||||
u32 which_wq, u32 wait_completion)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct nes_cqp_request *cqp_request;
|
||||
struct nes_hw_cqp_wqe *cqp_wqe;
|
||||
int ret;
|
||||
|
@ -3294,14 +3258,6 @@ void flush_wqes(struct nes_device *nesdev, struct nes_qp *nesqp,
|
|||
nes_debug(NES_DBG_QP, "Flush SQ QP WQEs completed, ret=%u,"
|
||||
" CQP Major:Minor codes = 0x%04X:0x%04X\n",
|
||||
ret, cqp_request->major_code, cqp_request->minor_code);
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -567,6 +567,30 @@ struct nes_cqp_request *nes_get_cqp_request(struct nes_device *nesdev)
|
|||
return cqp_request;
|
||||
}
|
||||
|
||||
void nes_free_cqp_request(struct nes_device *nesdev,
|
||||
struct nes_cqp_request *cqp_request)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
nes_debug(NES_DBG_CQP, "CQP request %p (opcode 0x%02X) freed.\n",
|
||||
cqp_request,
|
||||
le32_to_cpu(cqp_request->cqp_wqe.wqe_words[NES_CQP_WQE_OPCODE_IDX]) & 0x3f);
|
||||
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
|
||||
void nes_put_cqp_request(struct nes_device *nesdev,
|
||||
struct nes_cqp_request *cqp_request)
|
||||
{
|
||||
if (atomic_dec_and_test(&cqp_request->refcount))
|
||||
nes_free_cqp_request(nesdev, cqp_request);
|
||||
}
|
||||
|
||||
/**
|
||||
* nes_post_cqp_request
|
||||
|
|
|
@ -55,7 +55,6 @@ static void nes_unregister_ofa_device(struct nes_ib_device *nesibdev);
|
|||
* nes_alloc_mw
|
||||
*/
|
||||
static struct ib_mw *nes_alloc_mw(struct ib_pd *ibpd) {
|
||||
unsigned long flags;
|
||||
struct nes_pd *nespd = to_nespd(ibpd);
|
||||
struct nes_vnic *nesvnic = to_nesvnic(ibpd->device);
|
||||
struct nes_device *nesdev = nesvnic->nesdev;
|
||||
|
@ -128,15 +127,7 @@ static struct ib_mw *nes_alloc_mw(struct ib_pd *ibpd) {
|
|||
" CQP Major:Minor codes = 0x%04X:0x%04X.\n",
|
||||
stag, ret, cqp_request->major_code, cqp_request->minor_code);
|
||||
if ((!ret) || (cqp_request->major_code)) {
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
kfree(nesmr);
|
||||
nes_free_resource(nesadapter, nesadapter->allocated_mrs, stag_index);
|
||||
if (!ret) {
|
||||
|
@ -144,17 +135,8 @@ static struct ib_mw *nes_alloc_mw(struct ib_pd *ibpd) {
|
|||
} else {
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
} else {
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
}
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
|
||||
nesmr->ibmw.rkey = stag;
|
||||
nesmr->mode = IWNES_MEMREG_TYPE_MW;
|
||||
|
@ -178,7 +160,6 @@ static int nes_dealloc_mw(struct ib_mw *ibmw)
|
|||
struct nes_hw_cqp_wqe *cqp_wqe;
|
||||
struct nes_cqp_request *cqp_request;
|
||||
int err = 0;
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
/* Deallocate the window with the adapter */
|
||||
|
@ -204,32 +185,12 @@ static int nes_dealloc_mw(struct ib_mw *ibmw)
|
|||
nes_debug(NES_DBG_MR, "Deallocate STag completed, wait_event_timeout ret = %u,"
|
||||
" CQP Major:Minor codes = 0x%04X:0x%04X.\n",
|
||||
ret, cqp_request->major_code, cqp_request->minor_code);
|
||||
if ((!ret) || (cqp_request->major_code)) {
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
if (!ret) {
|
||||
err = -ETIME;
|
||||
} else {
|
||||
err = -EIO;
|
||||
}
|
||||
} else {
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!ret)
|
||||
err = -ETIME;
|
||||
else if (cqp_request->major_code)
|
||||
err = -EIO;
|
||||
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
|
||||
nes_free_resource(nesadapter, nesadapter->allocated_mrs,
|
||||
(ibmw->rkey & 0x0fffff00) >> 8);
|
||||
|
@ -526,29 +487,11 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
|
|||
stag, ret, cqp_request->major_code, cqp_request->minor_code);
|
||||
|
||||
if ((!ret) || (cqp_request->major_code)) {
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
ret = (!ret) ? -ETIME : -EIO;
|
||||
goto failed_leaf_vpbl_pages_alloc;
|
||||
} else {
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
nesfmr->nesmr.ibfmr.lkey = stag;
|
||||
nesfmr->nesmr.ibfmr.rkey = stag;
|
||||
nesfmr->attr = *ibfmr_attr;
|
||||
|
@ -1487,15 +1430,7 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd,
|
|||
nesqp->hwqp.qp_id, ret, nesdev->cqp.sq_head, nesdev->cqp.sq_tail,
|
||||
cqp_request->major_code, cqp_request->minor_code);
|
||||
if ((!ret) || (cqp_request->major_code)) {
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
nes_free_resource(nesadapter, nesadapter->allocated_qps, qp_num);
|
||||
nes_free_qp_mem(nesdev, nesqp,virt_wqs);
|
||||
kfree(nesqp->allocated_buffer);
|
||||
|
@ -1504,18 +1439,10 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd,
|
|||
} else {
|
||||
return ERR_PTR(-EIO);
|
||||
}
|
||||
} else {
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
|
||||
if (ibpd->uobject) {
|
||||
uresp.mmap_sq_db_index = nesqp->mmap_sq_db_index;
|
||||
uresp.actual_sq_size = sq_size;
|
||||
|
@ -1827,32 +1754,15 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries,
|
|||
nes_debug(NES_DBG_CQ, "Create iWARP CQ%u completed, wait_event_timeout ret = %d.\n",
|
||||
nescq->hw_cq.cq_number, ret);
|
||||
if ((!ret) || (cqp_request->major_code)) {
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
if (!context)
|
||||
pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem,
|
||||
nescq->hw_cq.cq_pbase);
|
||||
nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num);
|
||||
kfree(nescq);
|
||||
return ERR_PTR(-EIO);
|
||||
} else {
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
}
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
|
||||
if (context) {
|
||||
/* free the nespbl */
|
||||
|
@ -1942,37 +1852,18 @@ static int nes_destroy_cq(struct ib_cq *ib_cq)
|
|||
" CQP Major:Minor codes = 0x%04X:0x%04X.\n",
|
||||
nescq->hw_cq.cq_number, ret, cqp_request->major_code,
|
||||
cqp_request->minor_code);
|
||||
if ((!ret) || (cqp_request->major_code)) {
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
if (!ret) {
|
||||
nes_debug(NES_DBG_CQ, "iWARP CQ%u destroy timeout expired\n",
|
||||
if (!ret) {
|
||||
nes_debug(NES_DBG_CQ, "iWARP CQ%u destroy timeout expired\n",
|
||||
nescq->hw_cq.cq_number);
|
||||
ret = -ETIME;
|
||||
} else {
|
||||
nes_debug(NES_DBG_CQ, "iWARP CQ%u destroy failed\n",
|
||||
ret = -ETIME;
|
||||
} else if (cqp_request->major_code) {
|
||||
nes_debug(NES_DBG_CQ, "iWARP CQ%u destroy failed\n",
|
||||
nescq->hw_cq.cq_number);
|
||||
ret = -EIO;
|
||||
}
|
||||
ret = -EIO;
|
||||
} else {
|
||||
ret = 0;
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
}
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
|
||||
if (nescq->cq_mem_size)
|
||||
pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size,
|
||||
|
@ -2105,15 +1996,8 @@ static int nes_reg_mr(struct nes_device *nesdev, struct nes_pd *nespd,
|
|||
" CQP Major:Minor codes = 0x%04X:0x%04X.\n",
|
||||
stag, ret, cqp_request->major_code, cqp_request->minor_code);
|
||||
major_code = cqp_request->major_code;
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
|
||||
if (!ret)
|
||||
return -ETIME;
|
||||
else if (major_code)
|
||||
|
@ -2771,15 +2655,9 @@ static int nes_dereg_mr(struct ib_mr *ib_mr)
|
|||
|
||||
major_code = cqp_request->major_code;
|
||||
minor_code = cqp_request->minor_code;
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
|
||||
if (!ret) {
|
||||
nes_debug(NES_DBG_MR, "Timeout waiting to destroy STag,"
|
||||
" ib_mr=%p, rkey = 0x%08X\n",
|
||||
|
@ -2904,7 +2782,6 @@ int nes_hw_modify_qp(struct nes_device *nesdev, struct nes_qp *nesqp,
|
|||
/* struct iw_cm_id *cm_id = nesqp->cm_id; */
|
||||
/* struct iw_cm_event cm_event; */
|
||||
struct nes_cqp_request *cqp_request;
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
u16 major_code;
|
||||
|
||||
|
@ -2950,15 +2827,9 @@ int nes_hw_modify_qp(struct nes_device *nesdev, struct nes_qp *nesqp,
|
|||
nesqp->hwqp.qp_id, cqp_request->major_code,
|
||||
cqp_request->minor_code, next_iwarp_state);
|
||||
}
|
||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
||||
if (cqp_request->dynamic) {
|
||||
kfree(cqp_request);
|
||||
} else {
|
||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
||||
list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
|
||||
spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
|
||||
}
|
||||
}
|
||||
|
||||
nes_put_cqp_request(nesdev, cqp_request);
|
||||
|
||||
if (!ret)
|
||||
return -ETIME;
|
||||
else if (major_code)
|
||||
|
|
Загрузка…
Ссылка в новой задаче