On Tue, 30 Sep 2008, Rene Herman wrote:Oh, ok. Looking at it, it does seem that we actually _insert_ the PCI resources too late. We do it in pcibios_allocate_resources(), and there we even take care to look at whether it was enabled or disabled (we prioritize enabled resources, so that a disabled one will never be requested before an enabled one and if they clash, it's always the disabled one that loses the resource). But pcibios_allocate_resources() is called from pcibios_resource_survey(), which is called from pcibios_init(), which in turn is caled from pci_subsys_init() that is a "subsys_initcall()". In contrast, the PnP fixup thing is called from pnp_fixup_device, called from __pnp_add_device(), called from pnp_add_device() (and pnp_add_card(), but that should be later), and those in turn from pnpacpi_add_device and pnpacpi_init(). And pnpacpi_init is _also_ a subsys_initcall, but arch/x86/pci/built-in.o gets linked in _after_ drivers/built-in.o. That, in turn, is because it's marked as a "driver" in the x86 Makefile, and the main Makefile actually ends up forcing "drivers-y" to have drivers/ first. Just for fun, does this patch make a difference and allow you to just take the "is it registered" thing into account? It's a scary change right now, and I wouldn't commit it as is (I think that for 2.6.27 the thing to do is to just do the minimal "zero means disabled" thing), but having some random driver level initialize before the core architecture-specific PCI code does smell. So something like this sounds conceptually right anyway. Linus --- arch/x86/Makefile | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/arch/x86/Makefile b/arch/x86/Makefile index f5631da..97d0e86 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile @@ -159,7 +159,7 @@ core-$(CONFIG_IA32_EMULATION) += arch/x86/ia32/ # drivers-y are linked after core-y drivers-$(CONFIG_MATH_EMULATION) += arch/x86/math-emu/ -drivers-$(CONFIG_PCI) += arch/x86/pci/ +core-$(CONFIG_PCI) += arch/x86/pci/ # must be linked after kernel/ drivers-$(CONFIG_OPROFILE) += arch/x86/oprofile/ --
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
| david | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| David Woodhouse | [PATCH 1/3] firmware: allow firmware files to be built into kernel image |
| Peter Zijlstra | [PATCH 00/23] per device dirty throttling -v8 |
git: | |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| Josip Rodin | bnx2_poll panicking kernel |
| Patrick McHardy | Re: [GIT]: Networking |
