@@ -700,8 +700,12 @@ int pci_mmconfig_insert(struct device *dev, u16 seg, u8 start, u8 end,
if (!(pci_probe & PCI_PROBE_MMCONF) || pci_mmcfg_arch_init_failed)
return -ENODEV;
- if (start > end)
+ if (start > end || !addr) {
+ dev_warn(dev, FW_INFO
+ "Invalid address to add MMCONFIG start %02x end %02x addr %pR\n",
+ start, end, addr);
return -EINVAL;
+ }
mutex_lock(&pci_mmcfg_lock);
cfg = pci_mmconfig_lookup(seg, start);
@@ -716,11 +720,6 @@ int pci_mmconfig_insert(struct device *dev, u16 seg, u8 start, u8 end,
return -EEXIST;
}
- if (!addr) {
- mutex_unlock(&pci_mmcfg_lock);
- return -EINVAL;
- }
-
rc = -EBUSY;
cfg = pci_mmconfig_alloc(seg, start, end, addr);
if (cfg == NULL) {
V2: Corrected code style and tested for Linux v 3.11-rc2 V3: Fix the no space betwween words typo and keep the string in one line. Signed-off-by: ethan.zhao <ethan.kernel@gmail.com> --- arch/x86/pci/mmconfig-shared.c | 11 +++++------ 1 files changed, 5 insertions(+), 6 deletions(-)