From: Mike Marciniszyn mike.marciniszyn@intel.com
[ Upstream commit 0a5ec366de7e94192669ba08de6ed336607fd282 ]
The SQ is shared for between kernel and used by storing the kernel page pointer and passing that to a kmap_atomic().
This then requires that the alignment is PAGE_SIZE aligned.
Fix by adding an iWarp specific alignment check.
The patch needed to be reworked because the separate routines present upstream are not there in older irdma drivers.
Fixes: e965ef0e7b2c ("RDMA/irdma: Split QP handler into irdma_reg_user_mr_type_qp") Link: https://lore.kernel.org/r/20231129202143.1434-3-shiraz.saleem@intel.com Signed-off-by: Mike Marciniszyn mike.marciniszyn@intel.com Signed-off-by: Shiraz Saleem shiraz.saleem@intel.com Signed-off-by: Jason Gunthorpe jgg@nvidia.com --- drivers/infiniband/hw/irdma/verbs.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/drivers/infiniband/hw/irdma/verbs.c b/drivers/infiniband/hw/irdma/verbs.c index 447e1bcc82a3..3c437c8070b6 100644 --- a/drivers/infiniband/hw/irdma/verbs.c +++ b/drivers/infiniband/hw/irdma/verbs.c @@ -2845,6 +2845,13 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
switch (req.reg_type) { case IRDMA_MEMREG_TYPE_QP: + /* iWarp: Catch page not starting on OS page boundary */ + if (!rdma_protocol_roce(&iwdev->ibdev, 1) && + ib_umem_offset(iwmr->region)) { + err = -EINVAL; + goto error; + } + total = req.sq_pages + req.rq_pages + shadow_pgcnt; if (total > iwmr->page_cnt) { err = -EINVAL;
From: Mike Marciniszyn mike.marciniszyn@intel.com
[ Upstream commit 03769f72d66edab82484449ed594cb6b00ae0223 ]
Virtual QP and CQ require a 4K HW page size but the driver passes PAGE_SIZE to ib_umem_find_best_pgsz() instead.
Fix this by using the appropriate 4k value in the bitmap passed to ib_umem_find_best_pgsz().
Patch reworked to handle the different pre-split context.
Fixes: 693a5386eff0 ("RDMA/irdma: Split mr alloc and free into new functions") Link: https://lore.kernel.org/r/20231129202143.1434-4-shiraz.saleem@intel.com Signed-off-by: Mike Marciniszyn mike.marciniszyn@intel.com Signed-off-by: Shiraz Saleem shiraz.saleem@intel.com Signed-off-by: Jason Gunthorpe jgg@nvidia.com --- drivers/infiniband/hw/irdma/verbs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/infiniband/hw/irdma/verbs.c b/drivers/infiniband/hw/irdma/verbs.c index 3c437c8070b6..01faec6ea528 100644 --- a/drivers/infiniband/hw/irdma/verbs.c +++ b/drivers/infiniband/hw/irdma/verbs.c @@ -2825,7 +2825,7 @@ static struct ib_mr *irdma_reg_user_mr(struct ib_pd *pd, u64 start, u64 len, iwmr->ibmr.pd = pd; iwmr->ibmr.device = pd->device; iwmr->ibmr.iova = virt; - iwmr->page_size = PAGE_SIZE; + iwmr->page_size = SZ_4K;
if (req.reg_type == IRDMA_MEMREG_TYPE_MEM) { iwmr->page_size = ib_umem_find_best_pgsz(region,
On Wed, Feb 07, 2024 at 10:32:39AM -0600, Shiraz Saleem wrote:
From: Mike Marciniszyn mike.marciniszyn@intel.com
[ Upstream commit 0a5ec366de7e94192669ba08de6ed336607fd282 ]
The SQ is shared for between kernel and used by storing the kernel page pointer and passing that to a kmap_atomic().
This then requires that the alignment is PAGE_SIZE aligned.
Fix by adding an iWarp specific alignment check.
The patch needed to be reworked because the separate routines present upstream are not there in older irdma drivers.
Fixes: e965ef0e7b2c ("RDMA/irdma: Split QP handler into irdma_reg_user_mr_type_qp")
Is this fixes tag incorrect? there's no e965ef0e7b2c in 6.1.
Fixes: e965ef0e7b2c ("RDMA/irdma: Split QP handler into irdma_reg_user_mr_type_qp")
Is this fixes tag incorrect? there's no e965ef0e7b2c in 6.1.
The fixes was correct for upstream. The context change forced the re-port of patch and the Fixes is not appropriate for the older context.
You can drop if you want.
Mike
On Mon, Feb 12, 2024 at 01:02:52PM +0000, Marciniszyn, Mike wrote:
Fixes: e965ef0e7b2c ("RDMA/irdma: Split QP handler into irdma_reg_user_mr_type_qp")
Is this fixes tag incorrect? there's no e965ef0e7b2c in 6.1.
The fixes was correct for upstream. The context change forced the re-port of patch and the Fixes is not appropriate for the older context.
I do not understand, what context change?
You can drop if you want.
Is it needed for 6.1.y or not?
confused,
greg k-h
Is it needed for 6.1.y or not?
confused,
It is needed.
Its just the Fixes: tag is incorrect because 6.1.y branch lacks the commit indicated in the Fixes: tag.
The upstream version split a large routine up for clarity. The 6.1.y branch contains the pre-split code so the patch needed to be ported into the old larger routine.
Mike
On Tue, Feb 13, 2024 at 04:20:21PM +0000, Marciniszyn, Mike wrote:
Is it needed for 6.1.y or not?
confused,
It is needed.
Its just the Fixes: tag is incorrect because 6.1.y branch lacks the commit indicated in the Fixes: tag.
The upstream version split a large routine up for clarity. The 6.1.y branch contains the pre-split code so the patch needed to be ported into the old larger routine.
Now queued up, thanks.
greg k-h
linux-stable-mirror@lists.linaro.org