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:
parent
ee1e2c82c2
commit
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_write_10G_phy_reg(struct nes_device *, u16, u8, u16, u16);
|
||||||
void nes_read_10G_phy_reg(struct nes_device *, u8, u8, u16);
|
void nes_read_10G_phy_reg(struct nes_device *, u8, u8, u16);
|
||||||
struct nes_cqp_request *nes_get_cqp_request(struct nes_device *);
|
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);
|
void nes_post_cqp_request(struct nes_device *, struct nes_cqp_request *, int);
|
||||||
int nes_arp_table(struct nes_device *, u32, u8 *, u32);
|
int nes_arp_table(struct nes_device *, u32, u8 *, u32);
|
||||||
void nes_mh_fix(unsigned long);
|
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();
|
barrier();
|
||||||
cqp_request->request_done = 1;
|
cqp_request->request_done = 1;
|
||||||
wake_up(&cqp_request->waitq);
|
wake_up(&cqp_request->waitq);
|
||||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
nes_put_cqp_request(nesdev, cqp_request);
|
||||||
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);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
nes_debug(NES_DBG_CQP, "CQP request %p (opcode 0x%02X) freed.\n",
|
if (cqp_request->callback)
|
||||||
cqp_request,
|
cqp_request->cqp_callback(nesdev, cqp_request);
|
||||||
le32_to_cpu(cqp_request->cqp_wqe.wqe_words[NES_CQP_WQE_OPCODE_IDX]) & 0x3f);
|
nes_free_cqp_request(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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
wake_up(&nesdev->cqp.waitq);
|
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_device *nesdev = nesvnic->nesdev;
|
||||||
struct nes_hw_cqp_wqe *cqp_wqe;
|
struct nes_hw_cqp_wqe *cqp_wqe;
|
||||||
unsigned long flags;
|
|
||||||
struct nes_cqp_request *cqp_request;
|
struct nes_cqp_request *cqp_request;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
u16 major_code;
|
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",
|
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);
|
ret, cqp_request->major_code, cqp_request->minor_code);
|
||||||
major_code = cqp_request->major_code;
|
major_code = cqp_request->major_code;
|
||||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
|
||||||
if (cqp_request->dynamic) {
|
nes_put_cqp_request(nesdev, cqp_request);
|
||||||
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)
|
if (!ret)
|
||||||
return -ETIME;
|
return -ETIME;
|
||||||
else if (major_code)
|
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,
|
void flush_wqes(struct nes_device *nesdev, struct nes_qp *nesqp,
|
||||||
u32 which_wq, u32 wait_completion)
|
u32 which_wq, u32 wait_completion)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
|
||||||
struct nes_cqp_request *cqp_request;
|
struct nes_cqp_request *cqp_request;
|
||||||
struct nes_hw_cqp_wqe *cqp_wqe;
|
struct nes_hw_cqp_wqe *cqp_wqe;
|
||||||
int ret;
|
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,"
|
nes_debug(NES_DBG_QP, "Flush SQ QP WQEs completed, ret=%u,"
|
||||||
" CQP Major:Minor codes = 0x%04X:0x%04X\n",
|
" CQP Major:Minor codes = 0x%04X:0x%04X\n",
|
||||||
ret, cqp_request->major_code, cqp_request->minor_code);
|
ret, cqp_request->major_code, cqp_request->minor_code);
|
||||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
nes_put_cqp_request(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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -567,6 +567,30 @@ struct nes_cqp_request *nes_get_cqp_request(struct nes_device *nesdev)
|
||||||
return cqp_request;
|
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
|
* nes_post_cqp_request
|
||||||
|
|
|
@ -55,7 +55,6 @@ static void nes_unregister_ofa_device(struct nes_ib_device *nesibdev);
|
||||||
* nes_alloc_mw
|
* nes_alloc_mw
|
||||||
*/
|
*/
|
||||||
static struct ib_mw *nes_alloc_mw(struct ib_pd *ibpd) {
|
static struct ib_mw *nes_alloc_mw(struct ib_pd *ibpd) {
|
||||||
unsigned long flags;
|
|
||||||
struct nes_pd *nespd = to_nespd(ibpd);
|
struct nes_pd *nespd = to_nespd(ibpd);
|
||||||
struct nes_vnic *nesvnic = to_nesvnic(ibpd->device);
|
struct nes_vnic *nesvnic = to_nesvnic(ibpd->device);
|
||||||
struct nes_device *nesdev = nesvnic->nesdev;
|
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",
|
" CQP Major:Minor codes = 0x%04X:0x%04X.\n",
|
||||||
stag, ret, cqp_request->major_code, cqp_request->minor_code);
|
stag, ret, cqp_request->major_code, cqp_request->minor_code);
|
||||||
if ((!ret) || (cqp_request->major_code)) {
|
if ((!ret) || (cqp_request->major_code)) {
|
||||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
nes_put_cqp_request(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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
kfree(nesmr);
|
kfree(nesmr);
|
||||||
nes_free_resource(nesadapter, nesadapter->allocated_mrs, stag_index);
|
nes_free_resource(nesadapter, nesadapter->allocated_mrs, stag_index);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
|
@ -144,17 +135,8 @@ static struct ib_mw *nes_alloc_mw(struct ib_pd *ibpd) {
|
||||||
} else {
|
} else {
|
||||||
return ERR_PTR(-ENOMEM);
|
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->ibmw.rkey = stag;
|
||||||
nesmr->mode = IWNES_MEMREG_TYPE_MW;
|
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_hw_cqp_wqe *cqp_wqe;
|
||||||
struct nes_cqp_request *cqp_request;
|
struct nes_cqp_request *cqp_request;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
unsigned long flags;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* Deallocate the window with the adapter */
|
/* 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,"
|
nes_debug(NES_DBG_MR, "Deallocate STag completed, wait_event_timeout ret = %u,"
|
||||||
" CQP Major:Minor codes = 0x%04X:0x%04X.\n",
|
" CQP Major:Minor codes = 0x%04X:0x%04X.\n",
|
||||||
ret, cqp_request->major_code, cqp_request->minor_code);
|
ret, cqp_request->major_code, cqp_request->minor_code);
|
||||||
if ((!ret) || (cqp_request->major_code)) {
|
if (!ret)
|
||||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
err = -ETIME;
|
||||||
if (cqp_request->dynamic) {
|
else if (cqp_request->major_code)
|
||||||
kfree(cqp_request);
|
err = -EIO;
|
||||||
} else {
|
|
||||||
spin_lock_irqsave(&nesdev->cqp.lock, flags);
|
nes_put_cqp_request(nesdev, cqp_request);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
nes_free_resource(nesadapter, nesadapter->allocated_mrs,
|
nes_free_resource(nesadapter, nesadapter->allocated_mrs,
|
||||||
(ibmw->rkey & 0x0fffff00) >> 8);
|
(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);
|
stag, ret, cqp_request->major_code, cqp_request->minor_code);
|
||||||
|
|
||||||
if ((!ret) || (cqp_request->major_code)) {
|
if ((!ret) || (cqp_request->major_code)) {
|
||||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
nes_put_cqp_request(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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ret = (!ret) ? -ETIME : -EIO;
|
ret = (!ret) ? -ETIME : -EIO;
|
||||||
goto failed_leaf_vpbl_pages_alloc;
|
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.lkey = stag;
|
||||||
nesfmr->nesmr.ibfmr.rkey = stag;
|
nesfmr->nesmr.ibfmr.rkey = stag;
|
||||||
nesfmr->attr = *ibfmr_attr;
|
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,
|
nesqp->hwqp.qp_id, ret, nesdev->cqp.sq_head, nesdev->cqp.sq_tail,
|
||||||
cqp_request->major_code, cqp_request->minor_code);
|
cqp_request->major_code, cqp_request->minor_code);
|
||||||
if ((!ret) || (cqp_request->major_code)) {
|
if ((!ret) || (cqp_request->major_code)) {
|
||||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
nes_put_cqp_request(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_free_resource(nesadapter, nesadapter->allocated_qps, qp_num);
|
nes_free_resource(nesadapter, nesadapter->allocated_qps, qp_num);
|
||||||
nes_free_qp_mem(nesdev, nesqp,virt_wqs);
|
nes_free_qp_mem(nesdev, nesqp,virt_wqs);
|
||||||
kfree(nesqp->allocated_buffer);
|
kfree(nesqp->allocated_buffer);
|
||||||
|
@ -1504,18 +1439,10 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd,
|
||||||
} else {
|
} else {
|
||||||
return ERR_PTR(-EIO);
|
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) {
|
if (ibpd->uobject) {
|
||||||
uresp.mmap_sq_db_index = nesqp->mmap_sq_db_index;
|
uresp.mmap_sq_db_index = nesqp->mmap_sq_db_index;
|
||||||
uresp.actual_sq_size = sq_size;
|
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",
|
nes_debug(NES_DBG_CQ, "Create iWARP CQ%u completed, wait_event_timeout ret = %d.\n",
|
||||||
nescq->hw_cq.cq_number, ret);
|
nescq->hw_cq.cq_number, ret);
|
||||||
if ((!ret) || (cqp_request->major_code)) {
|
if ((!ret) || (cqp_request->major_code)) {
|
||||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
nes_put_cqp_request(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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!context)
|
if (!context)
|
||||||
pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem,
|
pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem,
|
||||||
nescq->hw_cq.cq_pbase);
|
nescq->hw_cq.cq_pbase);
|
||||||
nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num);
|
nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num);
|
||||||
kfree(nescq);
|
kfree(nescq);
|
||||||
return ERR_PTR(-EIO);
|
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) {
|
if (context) {
|
||||||
/* free the nespbl */
|
/* 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",
|
" CQP Major:Minor codes = 0x%04X:0x%04X.\n",
|
||||||
nescq->hw_cq.cq_number, ret, cqp_request->major_code,
|
nescq->hw_cq.cq_number, ret, cqp_request->major_code,
|
||||||
cqp_request->minor_code);
|
cqp_request->minor_code);
|
||||||
if ((!ret) || (cqp_request->major_code)) {
|
if (!ret) {
|
||||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
nes_debug(NES_DBG_CQ, "iWARP CQ%u destroy timeout expired\n",
|
||||||
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",
|
|
||||||
nescq->hw_cq.cq_number);
|
nescq->hw_cq.cq_number);
|
||||||
ret = -ETIME;
|
ret = -ETIME;
|
||||||
} else {
|
} else if (cqp_request->major_code) {
|
||||||
nes_debug(NES_DBG_CQ, "iWARP CQ%u destroy failed\n",
|
nes_debug(NES_DBG_CQ, "iWARP CQ%u destroy failed\n",
|
||||||
nescq->hw_cq.cq_number);
|
nescq->hw_cq.cq_number);
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
ret = 0;
|
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)
|
if (nescq->cq_mem_size)
|
||||||
pci_free_consistent(nesdev->pcidev, 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",
|
" CQP Major:Minor codes = 0x%04X:0x%04X.\n",
|
||||||
stag, ret, cqp_request->major_code, cqp_request->minor_code);
|
stag, ret, cqp_request->major_code, cqp_request->minor_code);
|
||||||
major_code = cqp_request->major_code;
|
major_code = cqp_request->major_code;
|
||||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
nes_put_cqp_request(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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return -ETIME;
|
return -ETIME;
|
||||||
else if (major_code)
|
else if (major_code)
|
||||||
|
@ -2771,15 +2655,9 @@ static int nes_dereg_mr(struct ib_mr *ib_mr)
|
||||||
|
|
||||||
major_code = cqp_request->major_code;
|
major_code = cqp_request->major_code;
|
||||||
minor_code = cqp_request->minor_code;
|
minor_code = cqp_request->minor_code;
|
||||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
|
||||||
if (cqp_request->dynamic) {
|
nes_put_cqp_request(nesdev, cqp_request);
|
||||||
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) {
|
if (!ret) {
|
||||||
nes_debug(NES_DBG_MR, "Timeout waiting to destroy STag,"
|
nes_debug(NES_DBG_MR, "Timeout waiting to destroy STag,"
|
||||||
" ib_mr=%p, rkey = 0x%08X\n",
|
" 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_id *cm_id = nesqp->cm_id; */
|
||||||
/* struct iw_cm_event cm_event; */
|
/* struct iw_cm_event cm_event; */
|
||||||
struct nes_cqp_request *cqp_request;
|
struct nes_cqp_request *cqp_request;
|
||||||
unsigned long flags;
|
|
||||||
int ret;
|
int ret;
|
||||||
u16 major_code;
|
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,
|
nesqp->hwqp.qp_id, cqp_request->major_code,
|
||||||
cqp_request->minor_code, next_iwarp_state);
|
cqp_request->minor_code, next_iwarp_state);
|
||||||
}
|
}
|
||||||
if (atomic_dec_and_test(&cqp_request->refcount)) {
|
|
||||||
if (cqp_request->dynamic) {
|
nes_put_cqp_request(nesdev, cqp_request);
|
||||||
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)
|
if (!ret)
|
||||||
return -ETIME;
|
return -ETIME;
|
||||||
else if (major_code)
|
else if (major_code)
|
||||||
|
|
Loading…
Reference in New Issue