Loading drivers/infiniband/hw/mlx4/mlx4_ib.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -86,6 +86,7 @@ struct mlx4_ib_mr { struct mlx4_ib_fast_reg_page_list { struct mlx4_ib_fast_reg_page_list { struct ib_fast_reg_page_list ibfrpl; struct ib_fast_reg_page_list ibfrpl; __be64 *mapped_page_list; dma_addr_t map; dma_addr_t map; }; }; Loading drivers/infiniband/hw/mlx4/mr.c +8 −2 Original line number Original line Diff line number Diff line Loading @@ -231,7 +231,11 @@ struct ib_fast_reg_page_list *mlx4_ib_alloc_fast_reg_page_list(struct ib_device if (!mfrpl) if (!mfrpl) return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM); mfrpl->ibfrpl.page_list = dma_alloc_coherent(&dev->dev->pdev->dev, mfrpl->ibfrpl.page_list = kmalloc(size, GFP_KERNEL); if (!mfrpl->ibfrpl.page_list) goto err_free; mfrpl->mapped_page_list = dma_alloc_coherent(&dev->dev->pdev->dev, size, &mfrpl->map, size, &mfrpl->map, GFP_KERNEL); GFP_KERNEL); if (!mfrpl->ibfrpl.page_list) if (!mfrpl->ibfrpl.page_list) Loading @@ -242,6 +246,7 @@ struct ib_fast_reg_page_list *mlx4_ib_alloc_fast_reg_page_list(struct ib_device return &mfrpl->ibfrpl; return &mfrpl->ibfrpl; err_free: err_free: kfree(mfrpl->ibfrpl.page_list); kfree(mfrpl); kfree(mfrpl); return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM); } } Loading @@ -252,8 +257,9 @@ void mlx4_ib_free_fast_reg_page_list(struct ib_fast_reg_page_list *page_list) struct mlx4_ib_fast_reg_page_list *mfrpl = to_mfrpl(page_list); struct mlx4_ib_fast_reg_page_list *mfrpl = to_mfrpl(page_list); int size = page_list->max_page_list_len * sizeof (u64); int size = page_list->max_page_list_len * sizeof (u64); dma_free_coherent(&dev->dev->pdev->dev, size, page_list->page_list, dma_free_coherent(&dev->dev->pdev->dev, size, mfrpl->mapped_page_list, mfrpl->map); mfrpl->map); kfree(mfrpl->ibfrpl.page_list); kfree(mfrpl); kfree(mfrpl); } } Loading drivers/infiniband/hw/mlx4/qp.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -1365,7 +1365,7 @@ static void set_fmr_seg(struct mlx4_wqe_fmr_seg *fseg, struct ib_send_wr *wr) int i; int i; for (i = 0; i < wr->wr.fast_reg.page_list_len; ++i) for (i = 0; i < wr->wr.fast_reg.page_list_len; ++i) wr->wr.fast_reg.page_list->page_list[i] = mfrpl->mapped_page_list[i] = cpu_to_be64(wr->wr.fast_reg.page_list->page_list[i] | cpu_to_be64(wr->wr.fast_reg.page_list->page_list[i] | MLX4_MTT_FLAG_PRESENT); MLX4_MTT_FLAG_PRESENT); Loading Loading
drivers/infiniband/hw/mlx4/mlx4_ib.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -86,6 +86,7 @@ struct mlx4_ib_mr { struct mlx4_ib_fast_reg_page_list { struct mlx4_ib_fast_reg_page_list { struct ib_fast_reg_page_list ibfrpl; struct ib_fast_reg_page_list ibfrpl; __be64 *mapped_page_list; dma_addr_t map; dma_addr_t map; }; }; Loading
drivers/infiniband/hw/mlx4/mr.c +8 −2 Original line number Original line Diff line number Diff line Loading @@ -231,7 +231,11 @@ struct ib_fast_reg_page_list *mlx4_ib_alloc_fast_reg_page_list(struct ib_device if (!mfrpl) if (!mfrpl) return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM); mfrpl->ibfrpl.page_list = dma_alloc_coherent(&dev->dev->pdev->dev, mfrpl->ibfrpl.page_list = kmalloc(size, GFP_KERNEL); if (!mfrpl->ibfrpl.page_list) goto err_free; mfrpl->mapped_page_list = dma_alloc_coherent(&dev->dev->pdev->dev, size, &mfrpl->map, size, &mfrpl->map, GFP_KERNEL); GFP_KERNEL); if (!mfrpl->ibfrpl.page_list) if (!mfrpl->ibfrpl.page_list) Loading @@ -242,6 +246,7 @@ struct ib_fast_reg_page_list *mlx4_ib_alloc_fast_reg_page_list(struct ib_device return &mfrpl->ibfrpl; return &mfrpl->ibfrpl; err_free: err_free: kfree(mfrpl->ibfrpl.page_list); kfree(mfrpl); kfree(mfrpl); return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM); } } Loading @@ -252,8 +257,9 @@ void mlx4_ib_free_fast_reg_page_list(struct ib_fast_reg_page_list *page_list) struct mlx4_ib_fast_reg_page_list *mfrpl = to_mfrpl(page_list); struct mlx4_ib_fast_reg_page_list *mfrpl = to_mfrpl(page_list); int size = page_list->max_page_list_len * sizeof (u64); int size = page_list->max_page_list_len * sizeof (u64); dma_free_coherent(&dev->dev->pdev->dev, size, page_list->page_list, dma_free_coherent(&dev->dev->pdev->dev, size, mfrpl->mapped_page_list, mfrpl->map); mfrpl->map); kfree(mfrpl->ibfrpl.page_list); kfree(mfrpl); kfree(mfrpl); } } Loading
drivers/infiniband/hw/mlx4/qp.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -1365,7 +1365,7 @@ static void set_fmr_seg(struct mlx4_wqe_fmr_seg *fseg, struct ib_send_wr *wr) int i; int i; for (i = 0; i < wr->wr.fast_reg.page_list_len; ++i) for (i = 0; i < wr->wr.fast_reg.page_list_len; ++i) wr->wr.fast_reg.page_list->page_list[i] = mfrpl->mapped_page_list[i] = cpu_to_be64(wr->wr.fast_reg.page_list->page_list[i] | cpu_to_be64(wr->wr.fast_reg.page_list->page_list[i] | MLX4_MTT_FLAG_PRESENT); MLX4_MTT_FLAG_PRESENT); Loading