提交 2301ed80 编写于 作者: X Xiongfeng Wang 提交者: Zheng Zengkai

pci: do not save 'PCI_BRIDGE_CTL_BUS_RESET'

hulk inclusion
category: bugfix
bugzilla: 20702,https://gitee.com/openeuler/kernel/issues/I4OG3O?from=project-issue
CVE: NA
---------------------------

When I inject a PCIE Fatal error into a mellanox netdevice, 'dmesg'
shows the device is recovered successfully, but 'lspci' didn't show the
device. I checked the configuration space of the slot where the
netdevice is inserted and found out the bit 'PCI_BRIDGE_CTL_BUS_RESET'
is set. Later, I found out it is because this bit is saved in
'saved_config_space' of 'struct pci_dev' when 'pci_pm_runtime_suspend()'
is called. And 'PCI_BRIDGE_CTL_BUS_RESET' is set every time we restore
the configuration sapce.

This patch avoid saving the bit 'PCI_BRIDGE_CTL_BUS_RESET' when we save
the configuration space of a bridge.
Signed-off-by: NXiongfeng Wang <wangxiongfeng2@huawei.com>
Reviewed-by: NHanjun Guo <guohanjun@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: NJialin Zhang <zhangjialin11@huawei.com>
Reviewed-by: NXiongfeng Wang <wangxiongfeng2@huawei.com>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
上级 0aba83e0
...@@ -1553,6 +1553,9 @@ int pci_save_state(struct pci_dev *dev) ...@@ -1553,6 +1553,9 @@ int pci_save_state(struct pci_dev *dev)
pci_dbg(dev, "saving config space at offset %#x (reading %#x)\n", pci_dbg(dev, "saving config space at offset %#x (reading %#x)\n",
i * 4, dev->saved_config_space[i]); i * 4, dev->saved_config_space[i]);
} }
if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE)
dev->saved_config_space[PCI_BRIDGE_CONTROL / 4] &=
~(PCI_BRIDGE_CTL_BUS_RESET << 16);
dev->state_saved = true; dev->state_saved = true;
i = pci_save_pcie_state(dev); i = pci_save_pcie_state(dev);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册