Message ID | 1606558959-48510-3-git-send-email-liweihang@huawei.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Jason Gunthorpe |
Headers | show |
Series | RDMA/hns: Fixes for calculation of sge | expand |
On Sat, Nov 28, 2020 at 06:22:38PM +0800, Weihang Li wrote: > From: Yangyang Li <liyangyang20@huawei.com> > > 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: 54d6638765b0 ("RDMA/hns: Optimize WQE buffer size calculating process") > Signed-off-by: Yangyang Li <liyangyang20@huawei.com> > Signed-off-by: Weihang Li <liweihang@huawei.com> > --- > drivers/infiniband/hw/hns/hns_roce_qp.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > Thanks, Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
diff --git a/drivers/infiniband/hw/hns/hns_roce_qp.c b/drivers/infiniband/hw/hns/hns_roce_qp.c index 5e505a3..7321e74 100644 --- a/drivers/infiniband/hw/hns/hns_roce_qp.c +++ b/drivers/infiniband/hw/hns/hns_roce_qp.c @@ -432,7 +432,12 @@ static int set_extend_sge_param(struct hns_roce_dev *hr_dev, u32 sq_wqe_cnt, } hr_qp->sge.sge_shift = HNS_ROCE_SGE_SHIFT; - hr_qp->sge.sge_cnt = cnt; + + /* If the number of extended sge is not zero, they MUST use the + * space of HNS_HW_PAGE_SIZE at least. + */ + hr_qp->sge.sge_cnt = cnt ? + max(cnt, (u32)HNS_HW_PAGE_SIZE / HNS_ROCE_SGE_SIZE) : 0; return 0; }