[RFC PATCH v2 0/7] Pseudo-NMI for arm64 using ICC_PMR_EL1 (GICv3)

Jon Masters jonathan at jonmasters.org
Thu Sep 17 22:11:46 PDT 2015


(Apologies for top posting)

I think there is a need to connect a few dots on this next week during Connect. Some other conversations have discussed alternative implementations elsewhere. I will assist.

-- 
Computer Architect | Sent from my 64-bit #ARM Powered phone

> On Sep 14, 2015, at 06:26, Daniel Thompson <daniel.thompson at linaro.org> wrote:
> 
> This patchset provides a pseudo-NMI for arm64 kernels by reimplementing
> the irqflags macros to modify the GIC PMR (the priority mask register is
> accessible as a system register on GICv3 and later) rather than the
> PSR. The patchset includes an implementation of
> arch_trigger_all_cpu_backtrace() for arm64 allowing the new code to be
> exercised.
> 
> The code works-for-me (tm) and is much more "real" than the last time I
> shared these patches. However there remain a couple of limitations and
> caveats:
> 
> 1. Requires GICv3+ hardware to be effective. The alternatives runtime
>    patching system is employed so systems with earlier GIC architectures
>    are still bootable but will not benefit from NMI simulation.
> 
> 2. Currently hardcoded to use ICC_PMR_EL1. Extra work might be needed
>    on the alternatives system so we can peacefully coexist with ARMv8.1
>    KVM support (when kernel will be running at EL2).
> 
> 3. FVP needs a bit of hacking to be able to run <SysRq-L> from an ISR.
>    That's a shame because <SysRq-L> is a great way to observe an NMI
>    preempting an IRQ handler. Testers are welcome to ping me offline
>    and I can share the hacks (and DTs) I have been using to test with.
> 
> 4. Testing for non regression on a GICv2 system will require this patch
>    to avoid crashes during <SysRq-L>:
>    http://article.gmane.org/gmane.linux.kernel/2037558
> 
> v2:
> 
> * Removed the isb instructions. The PMR is self-synchronizing so
>   these are not needed (Dave Martin)
> 
> * Use alternative runtime patching to allow the same kernel binary
>   to boot systems with and without GICv3+ (Dave Martin).
> 
> * Added code to properly distinguish between NMI and normal IRQ and to
>   call into NMI handling code where needed.
> 
> * Replaced the IPI backtrace logic with a newer version (from Russell
>   King).
> 
> 
> Daniel Thompson (7):
>  irqchip: gic-v3: Reset BPR during initialization
>  arm64: Add support for on-demand backtrace of other CPUs
>  arm64: alternative: Apply alternatives early in boot process
>  arm64: irqflags: Reorder the fiq & async macros
>  arm64: irqflags: Use ICC sysregs to implement IRQ masking
>  arm64: Implement IPI_CPU_BACKTRACE using pseudo-NMIs
>  arm64: irqflags: Automatically identify I bit mis-management
> 
> arch/arm64/Kconfig                   |  15 ++++
> arch/arm64/include/asm/alternative.h |   1 +
> arch/arm64/include/asm/assembler.h   |  56 ++++++++++++-
> arch/arm64/include/asm/hardirq.h     |   2 +-
> arch/arm64/include/asm/irq.h         |   3 +
> arch/arm64/include/asm/irqflags.h    | 154 +++++++++++++++++++++++++++++++++--
> arch/arm64/include/asm/ptrace.h      |  18 ++++
> arch/arm64/include/asm/smp.h         |   2 +
> arch/arm64/kernel/alternative.c      |  15 ++++
> arch/arm64/kernel/entry.S            | 149 +++++++++++++++++++++++++++------
> arch/arm64/kernel/head.S             |  35 ++++++++
> arch/arm64/kernel/setup.c            |  13 +++
> arch/arm64/kernel/smp.c              |  44 ++++++++++
> arch/arm64/mm/proc.S                 |  23 ++++++
> drivers/irqchip/irq-gic-v3.c         | 117 +++++++++++++++++++++++++-
> include/linux/irqchip/arm-gic-v3.h   |  10 +++
> include/linux/irqchip/arm-gic.h      |   2 +-
> lib/nmi_backtrace.c                  |   8 +-
> 18 files changed, 629 insertions(+), 38 deletions(-)
> 
> --
> 2.4.3
> 
> _______________________________________________
> linaro-kernel mailing list
> linaro-kernel at lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/linaro-kernel



More information about the linux-arm-kernel mailing list