diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2023-11-21 19:36:41 +0100 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2023-12-05 17:56:56 +0100 |
commit | f284dff47b6d00efe1f774d25e9d74874e78c600 (patch) | |
tree | 81b37eb0e71154d18bfbb13f95ce8141996dc3b8 /arch/x86/pci | |
parent | x86/pci: Rename pci_mmcfg_check_reserved() to pci_mmcfg_reserved() (diff) | |
download | linux-f284dff47b6d00efe1f774d25e9d74874e78c600.tar.xz linux-f284dff47b6d00efe1f774d25e9d74874e78c600.zip |
x86/pci: Comment pci_mmconfig_insert() obscure MCFG dependency
In pci_mmconfig_insert(), there's no reference to "addr" between locking
pci_mmcfg_lock and testing "addr", so it *looks* like we should move the
test before the lock.
But 07f9b61c3915 ("x86/PCI: MMCONFIG: Check earlier for MMCONFIG region at
address zero") did that, which broke things by returning -EINVAL when
"addr" is zero instead of -EEXIST.
So 07f9b61c3915 was reverted by 67d470e0e171 ("Revert "x86/PCI: MMCONFIG:
Check earlier for MMCONFIG region at address zero"").
Add a comment about this issue to prevent it from happening again.
Link: https://lore.kernel.org/r/20231121183643.249006-8-helgaas@kernel.org
Tested-by: Tomasz Pala <gotar@polanet.pl>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'arch/x86/pci')
-rw-r--r-- | arch/x86/pci/mmconfig-shared.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig-shared.c index b36c10e86505..459e95782bb1 100644 --- a/arch/x86/pci/mmconfig-shared.c +++ b/arch/x86/pci/mmconfig-shared.c @@ -786,6 +786,10 @@ int pci_mmconfig_insert(struct device *dev, u16 seg, u8 start, u8 end, return -EEXIST; } + /* + * Don't move earlier; we must return -EEXIST, not -EINVAL, if + * pci_mmconfig_lookup() finds something + */ if (!addr) { mutex_unlock(&pci_mmcfg_lock); return -EINVAL; |