Merge "pci: pci-msm: Prevent double free of default state"

This commit is contained in:
qctecmdr 2021-07-30 18:12:05 -07:00 • committed by Gerrit - the friendly Code Review server
commit 573b7aef75

View file

@ -7275,24 +7275,37 @@ static int msm_pcie_pm_suspend(struct pci_dev *dev,
if (dev) {
if (msm_pcie_confirm_linkup(pcie_dev, true, true, dev)) {
PCIE_DBG(pcie_dev, "PCIe: RC%d: save config space\n",
pcie_dev->rc_idx);
ret = pci_save_state(dev);
if (ret) {
PCIE_ERR(pcie_dev,
"PCIe: RC%d: fail to save state of RC%d:%d.\n",
"PCIe: RC%d: fail to save state:%d.\n",
pcie_dev->rc_idx, ret);
pcie_dev->suspending = false;
return ret;
}
pcie_dev->saved_state = pci_store_saved_state(dev);
} else {
pci_load_and_free_saved_state(dev,
&pcie_dev->saved_state);
pcie_dev->saved_state = pcie_dev->default_state;
kfree(pcie_dev->saved_state);
pcie_dev->saved_state = NULL;
PCIE_DBG(pcie_dev,
"PCIe: RC%d: saved default config space\n",
"PCIe: RC%d: load default config space\n",
pcie_dev->rc_idx);
ret = pci_load_saved_state(dev, pcie_dev->default_state);
if (ret) {
PCIE_ERR(pcie_dev,
"PCIe: RC%d: fail to load default state:%d.\n",
pcie_dev->rc_idx, ret);
pcie_dev->suspending = false;
return ret;
}
}
PCIE_DBG(pcie_dev, "PCIe: RC%d: store saved state\n",
pcie_dev->rc_idx);
pcie_dev->saved_state = pci_store_saved_state(dev);
}
spin_lock_irqsave(&pcie_dev->cfg_lock,