http://bugzilla.kernel.org/show_bug.cgi?id=9961
------- Comment #19 from [EMAIL PROTECTED] 2008-03-19 14:05 -------
I am still struggling with this. I do not fully understand root cause
yet but I'm betting that the hot-add of a "transparent" p2p bridge
(on Dock II) immediately below yet another "transparent" p2p bridge
(on ThinkPad) which creates a pretty complex cobweb of resource references has
something to do with it.
bus 00 --------------
|
00:1e.0 - ThinkPad resident Intel 82801 Mobile PCI Bridge
| "transparent" via pci_fixup_transparent_bridge()
|
bus 02 --------------
|
02:03.0 - Dock II resident Texas Instruments PCI2032 PCI
| Docking Bridge
| "transparent" due to programming interface == 0x01
|
bus 09 --------------
I have determined why we are not seeing the Oops during boot when
the Dock II already attached to the laptop. It is due to
pcibios_allocate_bus_resources() only being visited during boot.
The boot-time visit to
...
if (!r->start || !pr ||
request_resource(pr, r) < 0) {
printk(KERN_ERR "PCI: Cannot allocate "
"resource region %d "
"of bridge %s\n",
idx, pci_name(dev));
/*
* Something is wrong with the region.
* Invalidate the resource to prevent
* child resource allocations in this
* range.
*/
r->flags = 0;
}
...
in pcibios_allocate_bus_resources() clears the Dock II resource flags
for regions 7, 8, and 9 as evidenced by the following messages which
appear both with and without transparent bridge sizing removed.
PCI: Cannot allocate resource region 7 of bridge 0000:02:03.0
PCI: Cannot allocate resource region 8 of bridge 0000:02:03.0
PCI: Cannot allocate resource region 9 of bridge 0000:02:03.0
With the Dock II bridge resource flags for these regions cleared
the check:
if (!(r->flags) || r->parent)
continue;
in pdev_sort_resources() prevents execution from reaching
the list->next in the later:
struct resource_list *ln = list->next;
where the NULL pointer dereference occurs in the hot-add case
after one trip through the body of the enclosing for loop. In
the hot-add case, pcibios_allocate_bus_resources() is not visited
so the Dock II bridge resource flags are not cleared prior to
the call to pcibios_allocate_bus_resources().
If I am unable to come up with a solution for this that retains
the transparent bridge non-sizing in the next couple of days it
is likely that I will provide a patch that simply restores the
transparent bridge sizing. I believe the resource shortage on
some of our systems that motiviated the transparent bridge
non-sizing change no longer shows up when space is not allocated
by default for expansion ROMs. A later change that removes
default allocation for expansion ROMs is already in mainline.
--
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
acpi-bugzilla mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/acpi-bugzilla