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: 54d6638765
("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>
This commit is contained in:
parent
0fd0175e30
commit
d34895c319
|
@ -493,7 +493,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_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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue