• Oliver O'Halloran's avatar
    powerpc/eeh: Move EEH initialisation to an arch initcall · 395ee2a2
    Oliver O'Halloran authored
    The initialisation of EEH mostly happens in a core_initcall_sync initcall,
    followed by registering a bus notifier later on in an arch_initcall.
    Anything involving initcall dependecies is mostly incomprehensible unless
    you've spent a while staring at code so here's the full sequence:
    
    ppc_md.setup_arch       <-- pci_controllers are created here
    
    ...time passes...
    
    core_initcall           <-- pci_dns are created from DT nodes
    core_initcall_sync      <-- platforms call eeh_init()
    postcore_initcall       <-- PCI bus type is registered
    postcore_initcall_sync
    arch_initcall           <-- EEH pci_bus notifier registered
    subsys_initcall         <-- PHBs are scanned here
    
    There's no real requirement to do the EEH setup at the core_initcall_sync
    level. It just needs to be done after pci_dn's are created and before we
    start scanning PHBs. Simplify the flow a bit by moving the platform EEH
    inititalisation to an arch_initcall so we can fold the bus notifier
    registration into eeh_init().
    Signed-off-by: default avatarOliver O'Halloran <oohall@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20200918093050.37344-5-oohall@gmail.com
    395ee2a2
eeh.c 48.9 KB