Patch "mlxsw: pci: Lock configuration space of upstream bridge during reset" has been added to the 6.10-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

    mlxsw: pci: Lock configuration space of upstream bridge during reset

to the 6.10-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:
     mlxsw-pci-lock-configuration-space-of-upstream-bridg.patch
and it can be found in the queue-6.10 subdirectory.

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



commit 54c51fb53554f5c2a50bd288002f8407f33ff2aa
Author: Ido Schimmel <idosch@xxxxxxxxxx>
Date:   Mon Jul 8 16:23:42 2024 +0200

    mlxsw: pci: Lock configuration space of upstream bridge during reset
    
    [ Upstream commit 0970836c348b6bc2ea77ce4348a136d6febfd440 ]
    
    The driver triggers a "Secondary Bus Reset" (SBR) by calling
    __pci_reset_function_locked() which asserts the SBR bit in the "Bridge
    Control Register" in the configuration space of the upstream bridge for
    2ms. This is done without locking the configuration space of the
    upstream bridge port, allowing user space to access it concurrently.
    
    Linux 6.11 will start warning about such unlocked resets [1][2]:
    
    pcieport 0000:00:01.0: unlocked secondary bus reset via: pci_reset_bus_function+0x51c/0x6a0
    
    Avoid the warning and the concurrent access by locking the configuration
    space of the upstream bridge prior to the reset and unlocking it
    afterwards.
    
    [1] https://lore.kernel.org/all/171711746953.1628941.4692125082286867825.stgit@xxxxxxxxxxxxxxxxxxxxxxxxx/
    [2] https://lore.kernel.org/all/20240531213150.GA610983@bhelgaas/
    
    Signed-off-by: Ido Schimmel <idosch@xxxxxxxxxx>
    Signed-off-by: Petr Machata <petrm@xxxxxxxxxx>
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@xxxxxxxxx>
    Link: https://patch.msgid.link/9937b0afdb50f2f2825945393c94c093c04a5897.1720447210.git.petrm@xxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c
index c0ced4d315f3d..d92f640bae575 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/pci.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c
@@ -1599,6 +1599,7 @@ static int mlxsw_pci_reset_at_pci_disable(struct mlxsw_pci *mlxsw_pci,
 {
 	struct pci_dev *pdev = mlxsw_pci->pdev;
 	char mrsr_pl[MLXSW_REG_MRSR_LEN];
+	struct pci_dev *bridge;
 	int err;
 
 	if (!pci_reset_sbr_supported) {
@@ -1615,6 +1616,9 @@ static int mlxsw_pci_reset_at_pci_disable(struct mlxsw_pci *mlxsw_pci,
 sbr:
 	device_lock_assert(&pdev->dev);
 
+	bridge = pci_upstream_bridge(pdev);
+	if (bridge)
+		pci_cfg_access_lock(bridge);
 	pci_cfg_access_lock(pdev);
 	pci_save_state(pdev);
 
@@ -1624,6 +1628,8 @@ static int mlxsw_pci_reset_at_pci_disable(struct mlxsw_pci *mlxsw_pci,
 
 	pci_restore_state(pdev);
 	pci_cfg_access_unlock(pdev);
+	if (bridge)
+		pci_cfg_access_unlock(bridge);
 
 	return err;
 }




[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