mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-21 06:50:25 +00:00
RDMA/hns: Fix missing pagesize and alignment check in FRMR
The offset requires 128B alignment and the page size ranges from
4K to 128M.
Fixes: 68a997c5d2
("RDMA/hns: Add FRMR support for hip08")
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
Link: https://lore.kernel.org/r/20240710133705.896445-5-huangjunxian6@hisilicon.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
parent
543fb987bd
commit
d387d4b54e
2 changed files with 9 additions and 0 deletions
|
@ -83,6 +83,7 @@
|
||||||
#define MR_TYPE_DMA 0x03
|
#define MR_TYPE_DMA 0x03
|
||||||
|
|
||||||
#define HNS_ROCE_FRMR_MAX_PA 512
|
#define HNS_ROCE_FRMR_MAX_PA 512
|
||||||
|
#define HNS_ROCE_FRMR_ALIGN_SIZE 128
|
||||||
|
|
||||||
#define PKEY_ID 0xffff
|
#define PKEY_ID 0xffff
|
||||||
#define NODE_DESC_SIZE 64
|
#define NODE_DESC_SIZE 64
|
||||||
|
@ -189,6 +190,9 @@ enum {
|
||||||
#define HNS_HW_PAGE_SHIFT 12
|
#define HNS_HW_PAGE_SHIFT 12
|
||||||
#define HNS_HW_PAGE_SIZE (1 << HNS_HW_PAGE_SHIFT)
|
#define HNS_HW_PAGE_SIZE (1 << HNS_HW_PAGE_SHIFT)
|
||||||
|
|
||||||
|
#define HNS_HW_MAX_PAGE_SHIFT 27
|
||||||
|
#define HNS_HW_MAX_PAGE_SIZE (1 << HNS_HW_MAX_PAGE_SHIFT)
|
||||||
|
|
||||||
struct hns_roce_uar {
|
struct hns_roce_uar {
|
||||||
u64 pfn;
|
u64 pfn;
|
||||||
unsigned long index;
|
unsigned long index;
|
||||||
|
|
|
@ -443,6 +443,11 @@ int hns_roce_map_mr_sg(struct ib_mr *ibmr, struct scatterlist *sg, int sg_nents,
|
||||||
struct hns_roce_mtr *mtr = &mr->pbl_mtr;
|
struct hns_roce_mtr *mtr = &mr->pbl_mtr;
|
||||||
int ret, sg_num = 0;
|
int ret, sg_num = 0;
|
||||||
|
|
||||||
|
if (!IS_ALIGNED(*sg_offset, HNS_ROCE_FRMR_ALIGN_SIZE) ||
|
||||||
|
ibmr->page_size < HNS_HW_PAGE_SIZE ||
|
||||||
|
ibmr->page_size > HNS_HW_MAX_PAGE_SIZE)
|
||||||
|
return sg_num;
|
||||||
|
|
||||||
mr->npages = 0;
|
mr->npages = 0;
|
||||||
mr->page_list = kvcalloc(mr->pbl_mtr.hem_cfg.buf_pg_count,
|
mr->page_list = kvcalloc(mr->pbl_mtr.hem_cfg.buf_pg_count,
|
||||||
sizeof(dma_addr_t), GFP_KERNEL);
|
sizeof(dma_addr_t), GFP_KERNEL);
|
||||||
|
|
Loading…
Add table
Reference in a new issue