mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-12 04:15:21 +02:00
RDMA/hns: Fix missing pagesize and alignment check in FRMR
[ Upstream commitd387d4b54e
] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
f098ad96eb
commit
4d480e45cb
|
@ -82,6 +82,7 @@
|
|||
#define MR_TYPE_DMA 0x03
|
||||
|
||||
#define HNS_ROCE_FRMR_MAX_PA 512
|
||||
#define HNS_ROCE_FRMR_ALIGN_SIZE 128
|
||||
|
||||
#define PKEY_ID 0xffff
|
||||
#define NODE_DESC_SIZE 64
|
||||
|
@ -183,6 +184,9 @@ enum {
|
|||
#define HNS_HW_PAGE_SHIFT 12
|
||||
#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 {
|
||||
u64 pfn;
|
||||
unsigned long index;
|
||||
|
|
|
@ -423,6 +423,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;
|
||||
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->page_list = kvcalloc(mr->pbl_mtr.hem_cfg.buf_pg_count,
|
||||
sizeof(dma_addr_t), GFP_KERNEL);
|
||||
|
|
Loading…
Reference in New Issue
Block a user