|
@@ -1121,8 +1121,9 @@ static struct mlx5_ib_mr *reg_create(struct ib_mr *ibmr, struct ib_pd *pd,
|
|
|
goto err_1;
|
|
|
}
|
|
|
pas = (__be64 *)MLX5_ADDR_OF(create_mkey_in, in, klm_pas_mtt);
|
|
|
- mlx5_ib_populate_pas(dev, umem, page_shift, pas,
|
|
|
- pg_cap ? MLX5_IB_MTT_PRESENT : 0);
|
|
|
+ if (!(access_flags & IB_ACCESS_ON_DEMAND))
|
|
|
+ mlx5_ib_populate_pas(dev, umem, page_shift, pas,
|
|
|
+ pg_cap ? MLX5_IB_MTT_PRESENT : 0);
|
|
|
|
|
|
/* The pg_access bit allows setting the access flags
|
|
|
* in the page list submitted with the command. */
|
|
@@ -1210,7 +1211,8 @@ struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
|
|
|
mlx5_ib_dbg(dev, "cache empty for order %d", order);
|
|
|
mr = NULL;
|
|
|
}
|
|
|
- } else if (access_flags & IB_ACCESS_ON_DEMAND) {
|
|
|
+ } else if (access_flags & IB_ACCESS_ON_DEMAND &&
|
|
|
+ !MLX5_CAP_GEN(dev->mdev, umr_extended_translation_offset)) {
|
|
|
err = -EINVAL;
|
|
|
pr_err("Got MR registration for ODP MR > 512MB, not supported for Connect-IB");
|
|
|
goto error;
|