• Sebastien Dugue's avatar
    powerpc: Separate the irq radix tree insertion and lookup · 967e012e
    Sebastien Dugue authored
    irq_radix_revmap() currently serves 2 purposes, irq mapping lookup
    and insertion which happen in interrupt and process context respectively.
    
    Separate the function into its 2 components, one for lookup only and one
    for insertion only.
    
    Fix the only user of the revmap tree (XICS) to use the new functions.
    
    Also, move the insertion into the radix tree of those irqs that were
    requested before it was initialized at said tree initialization.
    
    Mutual exclusion between the tree initialization and readers/writers is
    handled via a state variable (revmap_trees_allocated) set to 1 when the tree
    has been initialized and set to 2 after the already requested irqs have been
    inserted in the tree by the init path. This state is checked before any reader
    or writer access just like we used to check for tree.gfp_mask != 0 before.
    
    Finally, now that we're not any longer inserting nodes into the radix-tree
    in interrupt context, turn the GFP_ATOMIC allocations into GFP_KERNEL ones.
    Signed-off-by: default avatarSebastien Dugue <sebastien.dugue@bull.net>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Michael Ellerman <michael@ellerman.id.au>
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    967e012e
irq.c 27.7 KB