lkml.org 
[lkml]   [2019]   [May]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 12/42] IB/hfi1: Eliminate opcode tests on mr deref
    Date
    [ Upstream commit a8639a79e85c18c16c10089edd589c7948f19bbd ]

    When an old ack_queue entry is used to store an incoming request, it may
    need to clean up the old entry if it is still referencing the
    MR. Originally only RDMA READ request needed to reference MR on the
    responder side and therefore the opcode was tested when cleaning up the
    old entry. The introduction of tid rdma specific operations in the
    ack_queue makes the specific opcode tests wrong. Multiple opcodes (RDMA
    READ, TID RDMA READ, and TID RDMA WRITE) may need MR ref cleanup.

    Remove the opcode specific tests associated with the ack_queue.

    Fixes: f48ad614c100 ("IB/hfi1: Move driver out of staging")
    Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
    Signed-off-by: Kaike Wan <kaike.wan@intel.com>
    Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/infiniband/hw/hfi1/rc.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/infiniband/hw/hfi1/rc.c b/drivers/infiniband/hw/hfi1/rc.c
    index d3b8cb92fd6d6..28eb7003c297e 100644
    --- a/drivers/infiniband/hw/hfi1/rc.c
    +++ b/drivers/infiniband/hw/hfi1/rc.c
    @@ -2309,7 +2309,7 @@ void hfi1_rc_rcv(struct hfi1_packet *packet)
    update_ack_queue(qp, next);
    }
    e = &qp->s_ack_queue[qp->r_head_ack_queue];
    - if (e->opcode == OP(RDMA_READ_REQUEST) && e->rdma_sge.mr) {
    + if (e->rdma_sge.mr) {
    rvt_put_mr(e->rdma_sge.mr);
    e->rdma_sge.mr = NULL;
    }
    @@ -2383,7 +2383,7 @@ void hfi1_rc_rcv(struct hfi1_packet *packet)
    update_ack_queue(qp, next);
    }
    e = &qp->s_ack_queue[qp->r_head_ack_queue];
    - if (e->opcode == OP(RDMA_READ_REQUEST) && e->rdma_sge.mr) {
    + if (e->rdma_sge.mr) {
    rvt_put_mr(e->rdma_sge.mr);
    e->rdma_sge.mr = NULL;
    }
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-05-09 21:09    [W:7.224 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site