RDMA/hns: Bugfix for filling the sge of srq
authorLijun Ou <oulijun@huawei.com>
Fri, 31 May 2019 10:28:03 +0000 (18:28 +0800)
committerJason Gunthorpe <jgg@mellanox.com>
Fri, 7 Jun 2019 18:01:05 +0000 (15:01 -0300)
When user post recv a srq with multiple sges, the hardware will get the
last correct sge and count the sge numbers according to the specific
identifier with lkey. For example, when the driver fills the sges with
every wr less than the max sge that the user configured when creating srq,
the hardware will stop getting the sge according to the specific lkey in
the sge. However, it will always end with the first sge in the current
post srq recv interface implementation.

Fixes: c7bcb13442e1 ("RDMA/hns: Add SRQ support for hip08 kernel mode")
Signed-off-by: Lijun Ou <oulijun@huawei.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/hns/hns_roce_hw_v2.c

index ac017c24b200f902475a35fde14ac33c9c5d91e6..2d27dc91a823be94caf8eb7ea5c63db00896b77e 100644 (file)
@@ -6048,9 +6048,9 @@ static int hns_roce_v2_post_srq_recv(struct ib_srq *ibsrq,
                }
 
                if (i < srq->max_gs) {
-                       dseg->len = 0;
-                       dseg->lkey = cpu_to_le32(0x100);
-                       dseg->addr = 0;
+                       dseg[i].len = 0;
+                       dseg[i].lkey = cpu_to_le32(0x100);
+                       dseg[i].addr = 0;
                }
 
                srq->wrid[wqe_idx] = wr->wr_id;