Commit 8482ee7e authored by Li Shaohua's avatar Li Shaohua Committed by Greg Kroah-Hartman

[PATCH] PCI: Reorder some initialization code to allow resources to be proper allocated.

On Tuesday, August 31, 2004, Linus Torvalds wrote:
> That list per se obviously looks ok by me, although I'd worry that some
> other fs_initcall depends on the ACPI stuff having been run (ie while the
> abover ordering is great, I worry that some _other_ part doesn't fit in
> the above ordering). Doing a quick check finds "chr_dev_init()", for
> example, which will do fbmem_init(), which might depend on the ACPI/PnP
> stuff having run already.
>
> So it _might_ be safer to make this ordering more explicit, rather than

Yes, I agree. The problem is there isn't a straightforward method for
it. It possibly is hard to get it.

> depending on the different phases of the initcalls. But I'd happily be
> proven wrogn with some simple argument for why this is guaranteed to be
> ok.. For example, maybe ACPI and PnP is linked before chr/mem.c, in which
> case it should all be ok.

Original PCI assign resources code is the last 'subsys_initcall'
according to the makefile, so move some code of it to 'fs_initcall'
(just below 'subsystem_initcall') should be ok. As you said, ACPI and
PnP is linked before chr/mem.c. The method requires all other
'fs_initcall' don't touch PCI resources, since
'pcibios_assign_resources' is a 'fs_initcall' and maybe don't run, but
it looks ok currently. Again, I will be appreciated if we can find a
solution to make the ordering explicit.
Signed-off-by: default avatarGreg Kroah-Hartman <greg@kroah.com>
parent 6e3a0997
......@@ -164,7 +164,7 @@ static void __init pcibios_allocate_resources(int pass)
}
}
static void __init pcibios_assign_resources(void)
static int __init pcibios_assign_resources(void)
{
struct pci_dev *dev = NULL;
int idx;
......@@ -204,6 +204,7 @@ static void __init pcibios_assign_resources(void)
pci_assign_resource(dev, PCI_ROM_RESOURCE);
}
}
return 0;
}
void __init pcibios_resource_survey(void)
......@@ -212,9 +213,14 @@ void __init pcibios_resource_survey(void)
pcibios_allocate_bus_resources(&pci_root_buses);
pcibios_allocate_resources(0);
pcibios_allocate_resources(1);
pcibios_assign_resources();
}
/**
* called in fs_initcall (one below subsys_initcall),
* give a chance for motherboard reserve resources
*/
fs_initcall(pcibios_assign_resources);
int pcibios_enable_resources(struct pci_dev *dev, int mask)
{
u16 cmd, old_cmd;
......
......@@ -170,4 +170,8 @@ static int __init acpi_motherboard_init(void)
return 0;
}
subsys_initcall(acpi_motherboard_init);
/**
* Reserve motherboard resources after PCI claim BARs,
* but before PCI assign resources for uninitialized PCI devices
*/
fs_initcall(acpi_motherboard_init);
......@@ -104,4 +104,8 @@ static int __init pnp_system_init(void)
return pnp_register_driver(&system_pnp_driver);
}
subsys_initcall(pnp_system_init);
/**
* Reserve motherboard resources after PCI claim BARs,
* but before PCI assign resources for uninitialized PCI devices
*/
fs_initcall(pnp_system_init);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment