lkml.org 
[lkml]   [2015]   [May]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 30/36] IB/mlx5: add a new paramter to mlx5_ib_update_mtt() for ODP with HMM.
    Date
    From: Jérôme Glisse <jglisse@redhat.com>

    When using HMM for ODP it will be usefull to pass the current mirror
    page table iterator for mlx5_ib_update_mtt() function benefit. Add
    void parameter for this.

    Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
    cc: <linux-rdma@vger.kernel.org>
    ---
    drivers/infiniband/hw/mlx5/mlx5_ib.h | 2 +-
    drivers/infiniband/hw/mlx5/mr.c | 4 ++--
    drivers/infiniband/hw/mlx5/odp.c | 8 +++++---
    3 files changed, 8 insertions(+), 6 deletions(-)

    diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h b/drivers/infiniband/hw/mlx5/mlx5_ib.h
    index ec532f0..ec629f2 100644
    --- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
    +++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
    @@ -569,7 +569,7 @@ struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
    u64 virt_addr, int access_flags,
    struct ib_udata *udata);
    int mlx5_ib_update_mtt(struct mlx5_ib_mr *mr, u64 start_page_index,
    - int npages, int zap);
    + int npages, int zap, void *data);
    int mlx5_ib_dereg_mr(struct ib_mr *ibmr);
    int mlx5_ib_destroy_mr(struct ib_mr *ibmr);
    struct ib_mr *mlx5_ib_create_mr(struct ib_pd *pd,
    diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c
    index 51a7775..759ed15 100644
    --- a/drivers/infiniband/hw/mlx5/mr.c
    +++ b/drivers/infiniband/hw/mlx5/mr.c
    @@ -845,7 +845,7 @@ free_mr:

    #ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING
    int mlx5_ib_update_mtt(struct mlx5_ib_mr *mr, u64 start_page_index, int npages,
    - int zap)
    + int zap, void *data)
    {
    struct mlx5_ib_dev *dev = mr->dev;
    struct device *ddev = dev->ib_dev.dma_device;
    @@ -912,7 +912,7 @@ int mlx5_ib_update_mtt(struct mlx5_ib_mr *mr, u64 start_page_index, int npages,
    if (!zap) {
    __mlx5_ib_populate_pas(dev, umem, PAGE_SHIFT,
    start_page_index, npages, pas,
    - MLX5_IB_MTT_PRESENT, NULL);
    + MLX5_IB_MTT_PRESENT, data);
    /* Clear padding after the pages brought from the
    * umem. */
    memset(pas + npages, 0, size - npages * sizeof(u64));
    diff --git a/drivers/infiniband/hw/mlx5/odp.c b/drivers/infiniband/hw/mlx5/odp.c
    index 5099db0..5171959 100644
    --- a/drivers/infiniband/hw/mlx5/odp.c
    +++ b/drivers/infiniband/hw/mlx5/odp.c
    @@ -91,14 +91,15 @@ void mlx5_ib_invalidate_range(struct ib_umem *umem, unsigned long start,

    if (in_block && umr_offset == 0) {
    mlx5_ib_update_mtt(mr, blk_start_idx,
    - idx - blk_start_idx, 1);
    + idx - blk_start_idx, 1,
    + NULL);
    in_block = 0;
    }
    }
    }
    if (in_block)
    mlx5_ib_update_mtt(mr, blk_start_idx, idx - blk_start_idx + 1,
    - 1);
    + 1, NULL);

    /*
    * We are now sure that the device will not access the
    @@ -256,7 +257,8 @@ static int pagefault_single_data_segment(struct mlx5_ib_qp *qp,
    * this MR, since ib_umem_odp_map_dma_pages already
    * checks this.
    */
    - ret = mlx5_ib_update_mtt(mr, start_idx, npages, 0);
    + ret = mlx5_ib_update_mtt(mr, start_idx,
    + npages, 0, NULL);
    } else {
    ret = -EAGAIN;
    }
    --
    1.9.3


    \
     
     \ /
      Last update: 2015-05-21 23:01    [W:6.022 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site