Skip to content
  • Mark Rutland's avatar
    arm64: use an irq stack pointer · f60fe78f
    Mark Rutland authored
    
    
    We allocate our IRQ stacks using a percpu array. This allows us to generate our
    IRQ stack pointers with adr_this_cpu, but bloats the kernel Image with the boot
    CPU's IRQ stack. Additionally, these are packed with other percpu variables,
    and aren't guaranteed to have guard pages.
    
    When we enable VMAP_STACK we'll want to vmap our IRQ stacks also, in order to
    provide guard pages and to permit more stringent alignment requirements. Doing
    so will require that we use a percpu pointer to each IRQ stack, rather than
    allocating a percpu IRQ stack in the kernel image.
    
    This patch updates our IRQ stack code to use a percpu pointer to the base of
    each IRQ stack. This will allow us to change the way the stack is allocated
    with minimal changes elsewhere. In some cases we may try to backtrace before
    the IRQ stack pointers are initialised, so on_irq_stack() is updated to account
    for this.
    
    In testing with cyclictest, there was no measureable difference between using
    adr_this_cpu (for irq_stack) and ldr_this_cpu (for irq_stack_ptr) in the IRQ
    entry path.
    
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Reviewed-by: default avatarWill Deacon <will.deacon@arm.com>
    Tested-by: default avatarLaura Abbott <labbott@redhat.com>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: James Morse <james.morse@arm.com>
    f60fe78f