IB/mlx5: Call io_stop_wc() after writing to WC MMIO
authorJason Gunthorpe <jgg@nvidia.com>
Fri, 29 Jul 2022 16:33:38 +0000 (13:33 -0300)
committerLeon Romanovsky <leonro@nvidia.com>
Tue, 16 Aug 2022 12:08:31 +0000 (15:08 +0300)
This new function is defined only on ARM and serves to guarantee a barrier
in the WC operation. The barrier means that another run of this loop will
not combine with the stores this loop created.

On x86 this is happening implicitly because of the spin_unlock().

Link: https://lore.kernel.org/r/0-v1-c5dade92f363+11-mlx5_io_stop_wc_jgg@nvidia.com
Suggested-by: Pavel Shamis <Pavel.Shamis@arm.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/mlx5/mem.c

index 6191aa833ac2b1ad8796dd618fa9a630eb552440..6b29e9ca323ea43b794c7f88cdc63f7ee51d6ae8 100644 (file)
@@ -152,6 +152,7 @@ static int post_send_nop(struct mlx5_ib_dev *dev, struct ib_qp *ibqp, u64 wr_id,
        for (i = 0; i < 8; i++)
                mlx5_write64(&mmio_wqe[i * 2],
                             bf->bfreg->map + bf->offset + i * 8);
+       io_stop_wc();
 
        bf->offset ^= bf->buf_size;