This is a slightly more polished and tested version. 64e seems to work okay even with context tracking, and 32s at least boots.
This moves quite a bit more code and C function calls out from asm to C, it tightens up context tracking significantly on 64s, and generally moves things closer to the generic entry code. Thanks, Nick Nicholas Piggin (18): powerpc/64s: move the last of the page fault handling logic to C powerpc: remove arguments from fault handler functions powerpc: bad_page_fault, do_break get registers from regs powerpc: interrupt handler wrapper functions powerpc: add interrupt wrapper entry / exit stub functions powerpc: add interrupt_cond_local_irq_enable helper powerpc/64: context tracking remove _TIF_NOHZ powerpc/64: context tracking move to interrupt wrappers powerpc/64: add context tracking to asynchronous interrupts powerpc/64s: move context tracking exit to interrupt exit path powerpc/64s: reconcile interrupts in C powerpc/64: move account_stolen_time into its own function powerpc/64: entry cpu time accounting in C powerpc: move NMI entry/exit code into wrapper powerpc/64s: move NMI soft-mask handling to C powerpc/64s: runlatch interrupt handling in C powerpc/64s: power4 nap fixup in C powerpc/64s: move power4 idle entirely to C arch/Kconfig | 6 - arch/powerpc/Kconfig | 1 - arch/powerpc/include/asm/asm-prototypes.h | 29 -- arch/powerpc/include/asm/bug.h | 4 +- arch/powerpc/include/asm/cputime.h | 15 + arch/powerpc/include/asm/debug.h | 3 +- arch/powerpc/include/asm/hw_irq.h | 9 - arch/powerpc/include/asm/interrupt.h | 375 +++++++++++++++++++++ arch/powerpc/include/asm/ppc_asm.h | 24 -- arch/powerpc/include/asm/processor.h | 1 + arch/powerpc/include/asm/thread_info.h | 10 +- arch/powerpc/include/asm/time.h | 2 + arch/powerpc/kernel/dbell.c | 3 +- arch/powerpc/kernel/entry_32.S | 14 +- arch/powerpc/kernel/exceptions-64e.S | 6 +- arch/powerpc/kernel/exceptions-64s.S | 307 ++--------------- arch/powerpc/kernel/head_40x.S | 10 +- arch/powerpc/kernel/head_8xx.S | 11 +- arch/powerpc/kernel/head_book3s_32.S | 6 +- arch/powerpc/kernel/head_booke.h | 4 +- arch/powerpc/kernel/idle.c | 25 +- arch/powerpc/kernel/idle_book3s.S | 18 - arch/powerpc/kernel/irq.c | 3 +- arch/powerpc/kernel/mce.c | 16 +- arch/powerpc/kernel/process.c | 7 +- arch/powerpc/kernel/ptrace/ptrace.c | 4 - arch/powerpc/kernel/signal.c | 4 - arch/powerpc/kernel/syscall_64.c | 30 +- arch/powerpc/kernel/tau_6xx.c | 2 +- arch/powerpc/kernel/time.c | 3 +- arch/powerpc/kernel/traps.c | 200 +++++------ arch/powerpc/kernel/watchdog.c | 15 +- arch/powerpc/kvm/book3s_hv.c | 1 + arch/powerpc/kvm/book3s_hv_builtin.c | 1 + arch/powerpc/mm/book3s64/hash_utils.c | 82 +++-- arch/powerpc/mm/book3s64/slb.c | 12 +- arch/powerpc/mm/fault.c | 80 ++++- arch/powerpc/platforms/8xx/machine_check.c | 2 +- arch/powerpc/platforms/powernv/idle.c | 1 + 39 files changed, 719 insertions(+), 627 deletions(-) create mode 100644 arch/powerpc/include/asm/interrupt.h -- 2.23.0