|
@@ -304,29 +304,6 @@ static int mlx4_HW2SW_MPT(struct mlx4_dev *dev, struct mlx4_cmd_mailbox *mailbox
|
|
MLX4_CMD_TIME_CLASS_B, MLX4_CMD_WRAPPED);
|
|
MLX4_CMD_TIME_CLASS_B, MLX4_CMD_WRAPPED);
|
|
}
|
|
}
|
|
|
|
|
|
-int mlx4_mr_reserve_range(struct mlx4_dev *dev, int cnt, int align,
|
|
|
|
- u32 *base_mridx)
|
|
|
|
-{
|
|
|
|
- struct mlx4_priv *priv = mlx4_priv(dev);
|
|
|
|
- u32 mridx;
|
|
|
|
-
|
|
|
|
- mridx = mlx4_bitmap_alloc_range(&priv->mr_table.mpt_bitmap, cnt, align);
|
|
|
|
- if (mridx == -1)
|
|
|
|
- return -ENOMEM;
|
|
|
|
-
|
|
|
|
- *base_mridx = mridx;
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
-}
|
|
|
|
-EXPORT_SYMBOL_GPL(mlx4_mr_reserve_range);
|
|
|
|
-
|
|
|
|
-void mlx4_mr_release_range(struct mlx4_dev *dev, u32 base_mridx, int cnt)
|
|
|
|
-{
|
|
|
|
- struct mlx4_priv *priv = mlx4_priv(dev);
|
|
|
|
- mlx4_bitmap_free_range(&priv->mr_table.mpt_bitmap, base_mridx, cnt);
|
|
|
|
-}
|
|
|
|
-EXPORT_SYMBOL_GPL(mlx4_mr_release_range);
|
|
|
|
-
|
|
|
|
int mlx4_mr_alloc_reserved(struct mlx4_dev *dev, u32 mridx, u32 pd,
|
|
int mlx4_mr_alloc_reserved(struct mlx4_dev *dev, u32 mridx, u32 pd,
|
|
u64 iova, u64 size, u32 access, int npages,
|
|
u64 iova, u64 size, u32 access, int npages,
|
|
int page_shift, struct mlx4_mr *mr)
|
|
int page_shift, struct mlx4_mr *mr)
|
|
@@ -852,46 +829,6 @@ err_free:
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(mlx4_fmr_alloc);
|
|
EXPORT_SYMBOL_GPL(mlx4_fmr_alloc);
|
|
|
|
|
|
-int mlx4_fmr_alloc_reserved(struct mlx4_dev *dev, u32 mridx,
|
|
|
|
- u32 pd, u32 access, int max_pages,
|
|
|
|
- int max_maps, u8 page_shift, struct mlx4_fmr *fmr)
|
|
|
|
-{
|
|
|
|
- struct mlx4_priv *priv = mlx4_priv(dev);
|
|
|
|
- int err = -ENOMEM;
|
|
|
|
-
|
|
|
|
- if (page_shift < (ffs(dev->caps.page_size_cap) - 1) || page_shift >= 32)
|
|
|
|
- return -EINVAL;
|
|
|
|
-
|
|
|
|
- /* All MTTs must fit in the same page */
|
|
|
|
- if (max_pages * sizeof *fmr->mtts > PAGE_SIZE)
|
|
|
|
- return -EINVAL;
|
|
|
|
-
|
|
|
|
- fmr->page_shift = page_shift;
|
|
|
|
- fmr->max_pages = max_pages;
|
|
|
|
- fmr->max_maps = max_maps;
|
|
|
|
- fmr->maps = 0;
|
|
|
|
-
|
|
|
|
- err = mlx4_mr_alloc_reserved(dev, mridx, pd, 0, 0, access, max_pages,
|
|
|
|
- page_shift, &fmr->mr);
|
|
|
|
- if (err)
|
|
|
|
- return err;
|
|
|
|
-
|
|
|
|
- fmr->mtts = mlx4_table_find(&priv->mr_table.mtt_table,
|
|
|
|
- fmr->mr.mtt.offset,
|
|
|
|
- &fmr->dma_handle);
|
|
|
|
- if (!fmr->mtts) {
|
|
|
|
- err = -ENOMEM;
|
|
|
|
- goto err_free;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
-err_free:
|
|
|
|
- mlx4_mr_free_reserved(dev, &fmr->mr);
|
|
|
|
- return err;
|
|
|
|
-}
|
|
|
|
-EXPORT_SYMBOL_GPL(mlx4_fmr_alloc_reserved);
|
|
|
|
-
|
|
|
|
int mlx4_fmr_enable(struct mlx4_dev *dev, struct mlx4_fmr *fmr)
|
|
int mlx4_fmr_enable(struct mlx4_dev *dev, struct mlx4_fmr *fmr)
|
|
{
|
|
{
|
|
struct mlx4_priv *priv = mlx4_priv(dev);
|
|
struct mlx4_priv *priv = mlx4_priv(dev);
|
|
@@ -954,18 +891,6 @@ int mlx4_fmr_free(struct mlx4_dev *dev, struct mlx4_fmr *fmr)
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(mlx4_fmr_free);
|
|
EXPORT_SYMBOL_GPL(mlx4_fmr_free);
|
|
|
|
|
|
-int mlx4_fmr_free_reserved(struct mlx4_dev *dev, struct mlx4_fmr *fmr)
|
|
|
|
-{
|
|
|
|
- if (fmr->maps)
|
|
|
|
- return -EBUSY;
|
|
|
|
-
|
|
|
|
- mlx4_mr_free_reserved(dev, &fmr->mr);
|
|
|
|
- fmr->mr.enabled = MLX4_MR_DISABLED;
|
|
|
|
-
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-EXPORT_SYMBOL_GPL(mlx4_fmr_free_reserved);
|
|
|
|
-
|
|
|
|
int mlx4_SYNC_TPT(struct mlx4_dev *dev)
|
|
int mlx4_SYNC_TPT(struct mlx4_dev *dev)
|
|
{
|
|
{
|
|
return mlx4_cmd(dev, 0, 0, 0, MLX4_CMD_SYNC_TPT, 1000,
|
|
return mlx4_cmd(dev, 0, 0, 0, MLX4_CMD_SYNC_TPT, 1000,
|