mirror of
https://github.com/ipxe/ipxe
synced 2026-04-16 03:00:10 +03:00
[pci] Cache ECAM mapping errors
When an error occurs during ECAM configuration space mapping, preserve the error within the existing cached mapping (instead of invalidating the cached mapping) in order to avoid flooding the debug log with repeated identical mapping errors. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -127,7 +127,7 @@ static int ecam_access ( struct pci_device *pci ) {
|
||||
|
||||
/* Reuse mapping if possible */
|
||||
if ( ( pci->busdevfn - ecam.range.start ) < ecam.range.count )
|
||||
return 0;
|
||||
return ecam.rc;
|
||||
|
||||
/* Clear any existing mapping */
|
||||
if ( ecam.regs ) {
|
||||
@@ -145,6 +145,7 @@ static int ecam_access ( struct pci_device *pci ) {
|
||||
if ( ecam.range.start > pci->busdevfn ) {
|
||||
DBGC ( &ecam, "ECAM found no allocation for " PCI_FMT "\n",
|
||||
PCI_ARGS ( pci ) );
|
||||
rc = -ENOENT;
|
||||
goto err_find;
|
||||
}
|
||||
|
||||
@@ -165,12 +166,13 @@ static int ecam_access ( struct pci_device *pci ) {
|
||||
DBGC ( &ecam, "ECAM %04x:[%02x-%02x] mapped [%08llx,%08llx) -> %p\n",
|
||||
le16_to_cpu ( ecam.alloc.segment ), ecam.alloc.start,
|
||||
ecam.alloc.end, base, ( base + len ), ecam.regs );
|
||||
ecam.rc = 0;
|
||||
return 0;
|
||||
|
||||
iounmap ( ecam.regs );
|
||||
err_ioremap:
|
||||
err_find:
|
||||
ecam.range.count = 0;
|
||||
ecam.rc = rc;
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user