diff --git a/drivers/pci/controller/pci-msm.c b/drivers/pci/controller/pci-msm.c index e58be80b51b2..ce014787acbe 100644 --- a/drivers/pci/controller/pci-msm.c +++ b/drivers/pci/controller/pci-msm.c @@ -7898,6 +7898,7 @@ int msm_pcie_pm_control(enum msm_pcie_pm_opt pm_opt, u32 busnr, void *user, break; } + mutex_lock(&pcie_dev->recovery_lock); mutex_lock(&pcie_dev->enumerate_lock); /* @@ -7928,12 +7929,12 @@ int msm_pcie_pm_control(enum msm_pcie_pm_opt pm_opt, u32 busnr, void *user, "PCIe: RC%d: request to suspend the link is rejected\n", pcie_dev->rc_idx); mutex_unlock(&pcie_dev->enumerate_lock); + mutex_unlock(&pcie_dev->recovery_lock); break; } pcie_dev->user_suspend = true; - mutex_lock(&pcie_dev->recovery_lock); ret = msm_pcie_pm_suspend(dev, user, data, options); if (ret) { @@ -7949,9 +7950,9 @@ int msm_pcie_pm_control(enum msm_pcie_pm_opt pm_opt, u32 busnr, void *user, } } - mutex_unlock(&pcie_dev->recovery_lock); - mutex_unlock(&pcie_dev->enumerate_lock); + + mutex_unlock(&pcie_dev->recovery_lock); break; case MSM_PCIE_RESUME: PCIE_DBG(pcie_dev, @@ -7964,6 +7965,8 @@ int msm_pcie_pm_control(enum msm_pcie_pm_opt pm_opt, u32 busnr, void *user, break; } + mutex_lock(&pcie_dev->recovery_lock); + /* when link was suspended and link resume is requested */ mutex_lock(&pcie_dev->enumerate_lock); list_for_each_entry(dev_info_itr, &pcie_dev->susp_ep_list, @@ -7990,10 +7993,10 @@ int msm_pcie_pm_control(enum msm_pcie_pm_opt pm_opt, u32 busnr, void *user, PCIE_ERR(pcie_dev, "PCIe: RC%d: requested to resume when link is already powered on.\n", pcie_dev->rc_idx); + mutex_unlock(&pcie_dev->recovery_lock); break; } - mutex_lock(&pcie_dev->recovery_lock); ret = msm_pcie_pm_resume(dev, user, data, options); if (ret) { PCIE_ERR(pcie_dev,