Delete the CIS resource after releasing it. This is needed when the CIS is

stored in a BAR since the CIS BAR is mapped before the PCI bus driver
enumerates all the BARs.  Without this change, the PCI bus driver would
attempt to initialize a BAR that was already allocated resulting in a panic.
This commit is contained in:
John Baldwin 2009-12-30 20:49:13 +00:00
parent 4e8790e943
commit 767dff0ac9
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=201280

View File

@ -430,6 +430,7 @@ cardbus_read_tuple_finish(device_t cbdev, device_t child, int rid,
{
if (res != CIS_CONFIG_SPACE) {
bus_release_resource(child, SYS_RES_MEMORY, rid, res);
bus_delete_resource(child, SYS_RES_MEMORY, rid);
}
}
@ -492,8 +493,8 @@ cardbus_read_tuple_init(device_t cbdev, device_t child, uint32_t *start,
device_printf(cbdev, "Bad header in rom %d: "
"[%x] %04x\n", romnum, imagebase +
CARDBUS_EXROM_SIGNATURE, romsig);
bus_release_resource(child, SYS_RES_MEMORY,
*rid, res);
cardbus_read_tuple_finish(cbdev, child, *rid,
res);
*rid = 0;
return (NULL);
}