[ofa-general] RE: [PATCH] RDMA/nes: Encapsulate logic nes_put_cqp_request()
Faisal Latif
flatif at NetEffect.com
Wed Jul 2 15:17:06 PDT 2008
Acked-by: Faisal Latif <flatif at neteffect.com>
Thanks
Faisal
> -----Original Message-----
> From: Roland Dreier [mailto:rdreier at cisco.com]
> Sent: Tuesday, July 01, 2008 11:07 PM
> To: Faisal Latif; Chien Tung; Glenn Streiff
> Cc: general at lists.openfabrics.org
> Subject: [PATCH] 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 at cisco.com>
> ---
> Here's a cleanup I'll queue for 2.6.27 if it's OK with you.
>
> drivers/infiniband/hw/nes/nes.h | 4 +
> drivers/infiniband/hw/nes/nes_hw.c | 60 ++---------
> drivers/infiniband/hw/nes/nes_utils.c | 24 ++++
> drivers/infiniband/hw/nes/nes_verbs.c | 189
+++++--------------------
> -------
> 4 files changed, 66 insertions(+), 211 deletions(-)
>
> diff --git a/drivers/infiniband/hw/nes/nes.h
> b/drivers/infiniband/hw/nes/nes.h
> index 61b46e9..fe88bec 100644
> --- a/drivers/infiniband/hw/nes/nes.h
> +++ b/drivers/infiniband/hw/nes/nes.h
> @@ -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);
> diff --git a/drivers/infiniband/hw/nes/nes_hw.c
> b/drivers/infiniband/hw/nes/nes_hw.c
> index d3278f1..80e4866 100644
> --- a/drivers/infiniband/hw/nes/nes_hw.c
> +++ b/drivers/infiniband/hw/nes/nes_hw.c
> @@ -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);
> }
> }
> diff --git a/drivers/infiniband/hw/nes/nes_utils.c
> b/drivers/infiniband/hw/nes/nes_utils.c
> index fe83d1b..82abe9b 100644
> --- a/drivers/infiniband/hw/nes/nes_utils.c
> +++ b/drivers/infiniband/hw/nes/nes_utils.c
> @@ -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
> diff --git a/drivers/infiniband/hw/nes/nes_verbs.c
> b/drivers/infiniband/hw/nes/nes_verbs.c
> index d617da9..464a98a 100644
> --- a/drivers/infiniband/hw/nes/nes_verbs.c
> +++ b/drivers/infiniband/hw/nes/nes_verbs.c
> @@ -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)
> --
> 1.5.6
More information about the general
mailing list