mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-20 21:51:05 +00:00
powerpc/pci: Fix various pseries PCI hotplug issues
The pseries PCI hotplug code has a number of issues, ranging from incorrect resource setup to crashes, depending on what is added, when, whether it contains a bridge, etc etc.... This fixes a whole bunch of these, while actually simplifying the code a bit, using more generic code in the process and factoring out common code between adding of a PHB, a slot or a device. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
b5ae5f911d
commit
fd6852c8fa
6 changed files with 151 additions and 180 deletions
|
@ -301,51 +301,3 @@ void __init find_and_init_phbs(void)
|
|||
#endif /* CONFIG_PPC32 */
|
||||
}
|
||||
}
|
||||
|
||||
/* RPA-specific bits for removing PHBs */
|
||||
int pcibios_remove_root_bus(struct pci_controller *phb)
|
||||
{
|
||||
struct pci_bus *b = phb->bus;
|
||||
struct resource *res;
|
||||
int rc, i;
|
||||
|
||||
res = b->resource[0];
|
||||
if (!res->flags) {
|
||||
printk(KERN_ERR "%s: no IO resource for PHB %s\n", __func__,
|
||||
b->name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
rc = pcibios_unmap_io_space(b);
|
||||
if (rc) {
|
||||
printk(KERN_ERR "%s: failed to unmap IO on bus %s\n",
|
||||
__func__, b->name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (release_resource(res)) {
|
||||
printk(KERN_ERR "%s: failed to release IO on bus %s\n",
|
||||
__func__, b->name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (i = 1; i < 3; ++i) {
|
||||
res = b->resource[i];
|
||||
if (!res->flags && i == 0) {
|
||||
printk(KERN_ERR "%s: no MEM resource for PHB %s\n",
|
||||
__func__, b->name);
|
||||
return 1;
|
||||
}
|
||||
if (res->flags && release_resource(res)) {
|
||||
printk(KERN_ERR
|
||||
"%s: failed to release IO %d on bus %s\n",
|
||||
__func__, i, b->name);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
pcibios_free_controller(phb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(pcibios_remove_root_bus);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue