IB/mlx5: Ensure proper synchronization accessing memory
Call mlx5_ib_populate_pas() before mapping the DMA buffer to ensure the hardware reads the values written by the CPU. Found by: Haggai Eran <haggaie@mellanox.com> Signed-off-by: Eli Cohen <eli@mellanox.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
@@ -680,6 +680,10 @@ static struct mlx5_ib_mr *reg_umr(struct ib_pd *pd, struct ib_umem *umem,
|
|||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mlx5_ib_populate_pas(dev, umem, page_shift,
|
||||||
|
mr_align(mr->pas, MLX5_UMR_ALIGN), 1);
|
||||||
|
|
||||||
mr->dma = dma_map_single(ddev, mr_align(mr->pas, MLX5_UMR_ALIGN), size,
|
mr->dma = dma_map_single(ddev, mr_align(mr->pas, MLX5_UMR_ALIGN), size,
|
||||||
DMA_TO_DEVICE);
|
DMA_TO_DEVICE);
|
||||||
if (dma_mapping_error(ddev, mr->dma)) {
|
if (dma_mapping_error(ddev, mr->dma)) {
|
||||||
@@ -688,9 +692,6 @@ static struct mlx5_ib_mr *reg_umr(struct ib_pd *pd, struct ib_umem *umem,
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
mlx5_ib_populate_pas(dev, umem, page_shift,
|
|
||||||
mr_align(mr->pas, MLX5_UMR_ALIGN), 1);
|
|
||||||
|
|
||||||
memset(&wr, 0, sizeof(wr));
|
memset(&wr, 0, sizeof(wr));
|
||||||
wr.wr_id = (u64)(unsigned long)mr;
|
wr.wr_id = (u64)(unsigned long)mr;
|
||||||
prep_umr_reg_wqe(pd, &wr, &sg, mr->dma, npages, mr->mmr.key, page_shift, virt_addr, len, access_flags);
|
prep_umr_reg_wqe(pd, &wr, &sg, mr->dma, npages, mr->mmr.key, page_shift, virt_addr, len, access_flags);
|
||||||
|
Reference in New Issue
Block a user