mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
IB/mlx5: Push pdn above pagfault_real_mr()
Remove the mlx5_mr_pdn() in pagefault_real_mr() by pushing the pdn up, all the callers use 0 since they don't pass MLX5_PF_FLAGS_ENABLE except the ioctl reg_mr path which can use the ioctl pd. Link: https://patch.msgid.link/r/9-v1-29ebd2c229b5+fd5-ib_mr_pd_jgg@nvidia.com Assisted-by: Codex:gpt-5-5 Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
23caeef1d0
commit
62731d26bd
|
|
@ -1423,7 +1423,7 @@ int mlx5_odp_populate_xlt(void *xlt, size_t idx, size_t nentries,
|
|||
int mlx5_ib_advise_mr_prefetch(struct ib_pd *pd,
|
||||
enum ib_uverbs_advise_mr_advice advice,
|
||||
u32 flags, struct ib_sge *sg_list, u32 num_sge);
|
||||
int mlx5_ib_init_odp_mr(struct mlx5_ib_mr *mr);
|
||||
int mlx5_ib_init_odp_mr(struct mlx5_ib_mr *mr, struct ib_pd *pd);
|
||||
int mlx5_ib_init_dmabuf_mr(struct mlx5_ib_mr *mr);
|
||||
#else /* CONFIG_INFINIBAND_ON_DEMAND_PAGING */
|
||||
static inline int mlx5_ib_odp_init_one(struct mlx5_ib_dev *ibdev) { return 0; }
|
||||
|
|
@ -1452,7 +1452,7 @@ mlx5_ib_advise_mr_prefetch(struct ib_pd *pd,
|
|||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
static inline int mlx5_ib_init_odp_mr(struct mlx5_ib_mr *mr)
|
||||
static inline int mlx5_ib_init_odp_mr(struct mlx5_ib_mr *mr, struct ib_pd *pd)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -842,7 +842,7 @@ static struct ib_mr *create_user_odp_mr(struct ib_pd *pd, u64 start, u64 length,
|
|||
if (err)
|
||||
goto err_dereg_mr;
|
||||
|
||||
err = mlx5_ib_init_odp_mr(mr);
|
||||
err = mlx5_ib_init_odp_mr(mr, pd);
|
||||
if (err)
|
||||
goto err_dereg_mr;
|
||||
return &mr->ibmr;
|
||||
|
|
|
|||
|
|
@ -687,12 +687,16 @@ void mlx5_ib_free_odp_mr(struct mlx5_ib_mr *mr)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* pdn must be valid only when xlt_flags updates the mkey PD. In this path that
|
||||
* is only MLX5_PF_FLAGS_ENABLE. DOWNGRADE and SNAPSHOT leave the PD masked out.
|
||||
*/
|
||||
#define MLX5_PF_FLAGS_DOWNGRADE BIT(1)
|
||||
#define MLX5_PF_FLAGS_SNAPSHOT BIT(2)
|
||||
#define MLX5_PF_FLAGS_ENABLE BIT(3)
|
||||
static int pagefault_real_mr(struct mlx5_ib_mr *mr, struct ib_umem_odp *odp,
|
||||
u64 user_va, size_t bcnt, u32 *bytes_mapped,
|
||||
u32 flags)
|
||||
u32 flags, u32 pdn)
|
||||
{
|
||||
int page_shift, ret, np;
|
||||
bool downgrade = flags & MLX5_PF_FLAGS_DOWNGRADE;
|
||||
|
|
@ -722,7 +726,7 @@ static int pagefault_real_mr(struct mlx5_ib_mr *mr, struct ib_umem_odp *odp,
|
|||
* ib_umem_odp_map_dma_and_lock already checks this.
|
||||
*/
|
||||
ret = mlx5r_umr_update_xlt(mr, start_idx, np, page_shift, xlt_flags,
|
||||
mlx5_mr_pdn(mr));
|
||||
pdn);
|
||||
mutex_unlock(&odp->umem_mutex);
|
||||
|
||||
if (ret < 0) {
|
||||
|
|
@ -788,7 +792,7 @@ static int pagefault_implicit_mr(struct mlx5_ib_mr *imr,
|
|||
user_va;
|
||||
|
||||
ret = pagefault_real_mr(mtt, umem_odp, user_va, len,
|
||||
bytes_mapped, flags);
|
||||
bytes_mapped, flags, 0);
|
||||
|
||||
mlx5r_deref_odp_mkey(&mtt->mmkey);
|
||||
|
||||
|
|
@ -930,19 +934,20 @@ static int pagefault_mr(struct mlx5_ib_mr *mr, u64 io_virt, size_t bcnt,
|
|||
ib_umem_end(odp) - user_va < bcnt))
|
||||
return -EFAULT;
|
||||
return pagefault_real_mr(mr, odp, user_va, bcnt, bytes_mapped,
|
||||
flags);
|
||||
flags, 0);
|
||||
}
|
||||
return pagefault_implicit_mr(mr, odp, io_virt, bcnt, bytes_mapped,
|
||||
flags);
|
||||
}
|
||||
|
||||
int mlx5_ib_init_odp_mr(struct mlx5_ib_mr *mr)
|
||||
int mlx5_ib_init_odp_mr(struct mlx5_ib_mr *mr, struct ib_pd *pd)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = pagefault_real_mr(mr, to_ib_umem_odp(mr->umem), mr->umem->address,
|
||||
mr->umem->length, NULL,
|
||||
MLX5_PF_FLAGS_SNAPSHOT | MLX5_PF_FLAGS_ENABLE);
|
||||
MLX5_PF_FLAGS_SNAPSHOT | MLX5_PF_FLAGS_ENABLE,
|
||||
to_mpd(pd)->pdn);
|
||||
return ret >= 0 ? 0 : ret;
|
||||
}
|
||||
|
||||
|
|
@ -1575,8 +1580,7 @@ static void mlx5_ib_mr_memory_pfault_handler(struct mlx5_ib_dev *dev,
|
|||
ret = pagefault_mr(mr, prefetch_va, prefetch_size, NULL, 0, true);
|
||||
if (ret < 0) {
|
||||
ret = pagefault_mr(mr, pfault->memory.va,
|
||||
pfault->memory.fault_byte_count, NULL, 0,
|
||||
true);
|
||||
pfault->memory.fault_byte_count, NULL, 0, true);
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user