Message ID | fcdb48612cb4cb777ed33a617b932b054170b074.1553050609.git.sbobroff@linux.ibm.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | success | Successfully applied on branch next (de3c83c2fd2b87cf68214eda76dfa66989d78cb6) |
snowpatch_ozlabs/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 43 lines checked |
On 20/03/2019 13:58, Sam Bobroff wrote: > The pcibios_init() function for 64 bit PowerPC currently calls > pci_bus_add_devices() before pcibios_resource_survey(), which seems > incorrect because it adds devices and attempts to bind their drivers > before allocating their resources (although no problems seem to be > apparent). > > So move the call to pci_bus_add_devices() to after > pcibios_resource_survey(), while extracting call to the > pcibios_fixup() hook so that it remains in the same location. > > This will also allow the ppc_md.pcibios_bus_add_device() hooks to > perform actions that depend on PCI resources, both during rescanning > (where this is already the case) and at boot time, to support future > work. > > Signed-off-by: Sam Bobroff <sbobroff@linux.ibm.com> Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru> > --- > arch/powerpc/kernel/pci-common.c | 4 ---- > arch/powerpc/kernel/pci_32.c | 4 ++++ > arch/powerpc/kernel/pci_64.c | 12 +++++++++--- > 3 files changed, 13 insertions(+), 7 deletions(-) > > diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c > index ff4b7539cbdf..3146eb73e3b3 100644 > --- a/arch/powerpc/kernel/pci-common.c > +++ b/arch/powerpc/kernel/pci-common.c > @@ -1383,10 +1383,6 @@ void __init pcibios_resource_survey(void) > pr_debug("PCI: Assigning unassigned resources...\n"); > pci_assign_unassigned_resources(); > } > - > - /* Call machine dependent fixup */ > - if (ppc_md.pcibios_fixup) > - ppc_md.pcibios_fixup(); > } > > /* This is used by the PCI hotplug driver to allocate resource > diff --git a/arch/powerpc/kernel/pci_32.c b/arch/powerpc/kernel/pci_32.c > index d3f04f2d8249..40aaa1a6e193 100644 > --- a/arch/powerpc/kernel/pci_32.c > +++ b/arch/powerpc/kernel/pci_32.c > @@ -259,6 +259,10 @@ static int __init pcibios_init(void) > /* Call common code to handle resource allocation */ > pcibios_resource_survey(); > > + /* Call machine dependent fixup */ > + if (ppc_md.pcibios_fixup) > + ppc_md.pcibios_fixup(); > + > /* Call machine dependent post-init code */ > if (ppc_md.pcibios_after_init) > ppc_md.pcibios_after_init(); > diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c > index 9d8c10d55407..6f16f30031d7 100644 > --- a/arch/powerpc/kernel/pci_64.c > +++ b/arch/powerpc/kernel/pci_64.c > @@ -58,14 +58,20 @@ static int __init pcibios_init(void) > pci_add_flags(PCI_ENABLE_PROC_DOMAINS | PCI_COMPAT_DOMAIN_0); > > /* Scan all of the recorded PCI controllers. */ > - list_for_each_entry_safe(hose, tmp, &hose_list, list_node) { > + list_for_each_entry_safe(hose, tmp, &hose_list, list_node) > pcibios_scan_phb(hose); > - pci_bus_add_devices(hose->bus); > - } > > /* Call common code to handle resource allocation */ > pcibios_resource_survey(); > > + /* Add devices. */ > + list_for_each_entry_safe(hose, tmp, &hose_list, list_node) > + pci_bus_add_devices(hose->bus); > + > + /* Call machine dependent fixup */ > + if (ppc_md.pcibios_fixup) > + ppc_md.pcibios_fixup(); > + > printk(KERN_DEBUG "PCI: Probing PCI hardware done\n"); > > return 0; >
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index ff4b7539cbdf..3146eb73e3b3 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c @@ -1383,10 +1383,6 @@ void __init pcibios_resource_survey(void) pr_debug("PCI: Assigning unassigned resources...\n"); pci_assign_unassigned_resources(); } - - /* Call machine dependent fixup */ - if (ppc_md.pcibios_fixup) - ppc_md.pcibios_fixup(); } /* This is used by the PCI hotplug driver to allocate resource diff --git a/arch/powerpc/kernel/pci_32.c b/arch/powerpc/kernel/pci_32.c index d3f04f2d8249..40aaa1a6e193 100644 --- a/arch/powerpc/kernel/pci_32.c +++ b/arch/powerpc/kernel/pci_32.c @@ -259,6 +259,10 @@ static int __init pcibios_init(void) /* Call common code to handle resource allocation */ pcibios_resource_survey(); + /* Call machine dependent fixup */ + if (ppc_md.pcibios_fixup) + ppc_md.pcibios_fixup(); + /* Call machine dependent post-init code */ if (ppc_md.pcibios_after_init) ppc_md.pcibios_after_init(); diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c index 9d8c10d55407..6f16f30031d7 100644 --- a/arch/powerpc/kernel/pci_64.c +++ b/arch/powerpc/kernel/pci_64.c @@ -58,14 +58,20 @@ static int __init pcibios_init(void) pci_add_flags(PCI_ENABLE_PROC_DOMAINS | PCI_COMPAT_DOMAIN_0); /* Scan all of the recorded PCI controllers. */ - list_for_each_entry_safe(hose, tmp, &hose_list, list_node) { + list_for_each_entry_safe(hose, tmp, &hose_list, list_node) pcibios_scan_phb(hose); - pci_bus_add_devices(hose->bus); - } /* Call common code to handle resource allocation */ pcibios_resource_survey(); + /* Add devices. */ + list_for_each_entry_safe(hose, tmp, &hose_list, list_node) + pci_bus_add_devices(hose->bus); + + /* Call machine dependent fixup */ + if (ppc_md.pcibios_fixup) + ppc_md.pcibios_fixup(); + printk(KERN_DEBUG "PCI: Probing PCI hardware done\n"); return 0;
The pcibios_init() function for 64 bit PowerPC currently calls pci_bus_add_devices() before pcibios_resource_survey(), which seems incorrect because it adds devices and attempts to bind their drivers before allocating their resources (although no problems seem to be apparent). So move the call to pci_bus_add_devices() to after pcibios_resource_survey(), while extracting call to the pcibios_fixup() hook so that it remains in the same location. This will also allow the ppc_md.pcibios_bus_add_device() hooks to perform actions that depend on PCI resources, both during rescanning (where this is already the case) and at boot time, to support future work. Signed-off-by: Sam Bobroff <sbobroff@linux.ibm.com> --- arch/powerpc/kernel/pci-common.c | 4 ---- arch/powerpc/kernel/pci_32.c | 4 ++++ arch/powerpc/kernel/pci_64.c | 12 +++++++++--- 3 files changed, 13 insertions(+), 7 deletions(-)