Patch "RDMA/mlx5: Check pcie_relaxed_ordering_enabled() in UMR" has been added to the 6.3-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    RDMA/mlx5: Check pcie_relaxed_ordering_enabled() in UMR

to the 6.3-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     rdma-mlx5-check-pcie_relaxed_ordering_enabled-in-umr.patch
and it can be found in the queue-6.3 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 82f1b04f67d41360ddddc93437eb41ea81fc80a7
Author: Avihai Horon <avihaih@xxxxxxxxxx>
Date:   Mon Apr 10 16:07:51 2023 +0300

    RDMA/mlx5: Check pcie_relaxed_ordering_enabled() in UMR
    
    [ Upstream commit d43b020b0f82c088ef8ff3196ef00575a97d200e ]
    
    relaxed_ordering_read HCA capability is set if both the device supports
    relaxed ordering (RO) read and RO is set in PCI config space.
    
    RO in PCI config space can change during runtime. This will change the
    value of relaxed_ordering_read HCA capability in FW, but the driver will
    not see it since it queries the capabilities only once.
    
    This can lead to the following scenario:
    1. RO in PCI config space is enabled.
    2. User creates MKey without RO.
    3. RO in PCI config space is disabled.
       As a result, relaxed_ordering_read HCA capability is turned off in FW
       but remains on in driver copy of the capabilities.
    4. User requests to reconfig the MKey with RO via UMR.
    5. Driver will try to reconfig the MKey with RO read although it
       shouldn't (as relaxed_ordering_read HCA capability is really off).
    
    To fix this, check pcie_relaxed_ordering_enabled() before setting RO
    read in UMR.
    
    Fixes: 896ec9735336 ("RDMA/mlx5: Set mkey relaxed ordering by UMR with ConnectX-7")
    Signed-off-by: Avihai Horon <avihaih@xxxxxxxxxx>
    Reviewed-by: Shay Drory <shayd@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/8d39eb8317e7bed1a354311a20ae707788fd94ed.1681131553.git.leon@xxxxxxxxxx
    Reviewed-by: Jacob Keller <jacob.e.keller@xxxxxxxxx>
    Signed-off-by: Leon Romanovsky <leon@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/infiniband/hw/mlx5/umr.c b/drivers/infiniband/hw/mlx5/umr.c
index 55f4e048d9474..c9e176e8ced46 100644
--- a/drivers/infiniband/hw/mlx5/umr.c
+++ b/drivers/infiniband/hw/mlx5/umr.c
@@ -380,6 +380,9 @@ static void mlx5r_umr_set_access_flags(struct mlx5_ib_dev *dev,
 				       struct mlx5_mkey_seg *seg,
 				       unsigned int access_flags)
 {
+	bool ro_read = (access_flags & IB_ACCESS_RELAXED_ORDERING) &&
+		       pcie_relaxed_ordering_enabled(dev->mdev->pdev);
+
 	MLX5_SET(mkc, seg, a, !!(access_flags & IB_ACCESS_REMOTE_ATOMIC));
 	MLX5_SET(mkc, seg, rw, !!(access_flags & IB_ACCESS_REMOTE_WRITE));
 	MLX5_SET(mkc, seg, rr, !!(access_flags & IB_ACCESS_REMOTE_READ));
@@ -387,8 +390,7 @@ static void mlx5r_umr_set_access_flags(struct mlx5_ib_dev *dev,
 	MLX5_SET(mkc, seg, lr, 1);
 	MLX5_SET(mkc, seg, relaxed_ordering_write,
 		 !!(access_flags & IB_ACCESS_RELAXED_ORDERING));
-	MLX5_SET(mkc, seg, relaxed_ordering_read,
-		 !!(access_flags & IB_ACCESS_RELAXED_ORDERING));
+	MLX5_SET(mkc, seg, relaxed_ordering_read, ro_read);
 }
 
 int mlx5r_umr_rereg_pd_access(struct mlx5_ib_mr *mr, struct ib_pd *pd,



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux