Skip to content

Commit d34895c

Browse files
l00436852jgunthorpe
authored andcommitted
RDMA/hns: Bugfix for calculation of extended sge
Page alignment is required when setting the number of extended sge according to the hardware's achivement. If the space of needed extended sge is greater than one page, the roundup_pow_of_two() can ensure that. But if the needed extended sge isn't 0 and can not be filled in a whole page, the driver should align it specifically. Fixes: 54d6638 ("RDMA/hns: Optimize WQE buffer size calculating process") Link: https://lore.kernel.org/r/1606558959-48510-3-git-send-email-liweihang@huawei.com Signed-off-by: Yangyang Li <liyangyang20@huawei.com> Signed-off-by: Weihang Li <liweihang@huawei.com> Reviewed-by: Leon Romanovsky <leonro@nvidia.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
1 parent 0fd0175 commit d34895c

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

drivers/infiniband/hw/hns/hns_roce_qp.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,12 @@ static int set_extend_sge_param(struct hns_roce_dev *hr_dev, u32 sq_wqe_cnt,
493493
}
494494

495495
hr_qp->sge.sge_shift = HNS_ROCE_SGE_SHIFT;
496-
hr_qp->sge.sge_cnt = cnt;
496+
497+
/* If the number of extended sge is not zero, they MUST use the
498+
* space of HNS_HW_PAGE_SIZE at least.
499+
*/
500+
hr_qp->sge.sge_cnt = cnt ?
501+
max(cnt, (u32)HNS_HW_PAGE_SIZE / HNS_ROCE_SGE_SIZE) : 0;
497502

498503
return 0;
499504
}

0 commit comments

Comments
 (0)