lkml.org 
[lkml]   [2018]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.14 021/161] i40iw: Free IEQ resources
    Date
    From: Mustafa Ismail <mustafa.ismail@intel.com>

    [ Upstream commit f20d429511affab6a2a9129f46042f43e6ffe396 ]

    The iWARP Exception Queue (IEQ) resources are not freed when a QP is
    destroyed. Fix this by freeing IEQ resources when freeing QP resources.

    Fixes: d37498417947 ("i40iw: add files for iwarp interface")
    Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com>
    Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    drivers/infiniband/hw/i40iw/i40iw_puda.c | 3 +--
    drivers/infiniband/hw/i40iw/i40iw_puda.h | 1 +
    drivers/infiniband/hw/i40iw/i40iw_verbs.c | 1 +
    3 files changed, 3 insertions(+), 2 deletions(-)

    diff --git a/drivers/infiniband/hw/i40iw/i40iw_puda.c b/drivers/infiniband/hw/i40iw/i40iw_puda.c
    index 59f70676f0e0..74c7f6879084 100644
    --- a/drivers/infiniband/hw/i40iw/i40iw_puda.c
    +++ b/drivers/infiniband/hw/i40iw/i40iw_puda.c
    @@ -48,7 +48,6 @@ static void i40iw_ieq_tx_compl(struct i40iw_sc_vsi *vsi, void *sqwrid);
    static void i40iw_ilq_putback_rcvbuf(struct i40iw_sc_qp *qp, u32 wqe_idx);
    static enum i40iw_status_code i40iw_puda_replenish_rq(struct i40iw_puda_rsrc
    *rsrc, bool initial);
    -static void i40iw_ieq_cleanup_qp(struct i40iw_puda_rsrc *ieq, struct i40iw_sc_qp *qp);
    /**
    * i40iw_puda_get_listbuf - get buffer from puda list
    * @list: list to use for buffers (ILQ or IEQ)
    @@ -1480,7 +1479,7 @@ static void i40iw_ieq_tx_compl(struct i40iw_sc_vsi *vsi, void *sqwrid)
    * @ieq: ieq resource
    * @qp: all pending fpdu buffers
    */
    -static void i40iw_ieq_cleanup_qp(struct i40iw_puda_rsrc *ieq, struct i40iw_sc_qp *qp)
    +void i40iw_ieq_cleanup_qp(struct i40iw_puda_rsrc *ieq, struct i40iw_sc_qp *qp)
    {
    struct i40iw_puda_buf *buf;
    struct i40iw_pfpdu *pfpdu = &qp->pfpdu;
    diff --git a/drivers/infiniband/hw/i40iw/i40iw_puda.h b/drivers/infiniband/hw/i40iw/i40iw_puda.h
    index dba05ce7d392..ebe37f157d90 100644
    --- a/drivers/infiniband/hw/i40iw/i40iw_puda.h
    +++ b/drivers/infiniband/hw/i40iw/i40iw_puda.h
    @@ -186,4 +186,5 @@ enum i40iw_status_code i40iw_cqp_qp_create_cmd(struct i40iw_sc_dev *dev, struct
    enum i40iw_status_code i40iw_cqp_cq_create_cmd(struct i40iw_sc_dev *dev, struct i40iw_sc_cq *cq);
    void i40iw_cqp_qp_destroy_cmd(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp);
    void i40iw_cqp_cq_destroy_cmd(struct i40iw_sc_dev *dev, struct i40iw_sc_cq *cq);
    +void i40iw_ieq_cleanup_qp(struct i40iw_puda_rsrc *ieq, struct i40iw_sc_qp *qp);
    #endif
    diff --git a/drivers/infiniband/hw/i40iw/i40iw_verbs.c b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
    index 62be0a41ad0b..9e7ae7161d2f 100644
    --- a/drivers/infiniband/hw/i40iw/i40iw_verbs.c
    +++ b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
    @@ -428,6 +428,7 @@ void i40iw_free_qp_resources(struct i40iw_device *iwdev,
    {
    struct i40iw_pbl *iwpbl = &iwqp->iwpbl;

    + i40iw_ieq_cleanup_qp(iwdev->vsi.ieq, &iwqp->sc_qp);
    i40iw_dealloc_push_page(iwdev, &iwqp->sc_qp);
    if (qp_num)
    i40iw_free_resource(iwdev, iwdev->allocated_qps, qp_num);
    --
    2.15.1
    \
     
     \ /
      Last update: 2018-04-09 02:22    [W:4.215 / U:0.288 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site