linux_dsm_epyc7002/arch/arm64
Will Deacon f6cc0c5016 arm64: Avoid calling stop_machine() when patching jump labels
Patching a jump label involves patching a single instruction at a time,
swizzling between a branch and a NOP. The architecture treats these
instructions specially, so a concurrently executing CPU is guaranteed to
see either the NOP or the branch, rather than an amalgamation of the two
instruction encodings.

However, in order to guarantee that the new instruction is visible, it
is necessary to send an IPI to the concurrently executing CPU so that it
discards any previously fetched instructions from its pipeline. This
operation therefore cannot be completed from a context with IRQs
disabled, but this is exactly what happens on the jump label path where
the hotplug lock is held and irqs are subsequently disabled by
stop_machine_cpuslocked(). This results in a deadlock during boot on
Hikey-960.

Due to the architectural guarantees around patching NOPs and branches,
we don't actually need to stop_machine() at all on the jump label path,
so we can avoid the deadlock by using the "nosync" variant of our
instruction patching routine.

Fixes: 693350a799 ("arm64: insn: Don't fallback on nosync path for general insn patching")
Reported-by: Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>
Reported-by: John Stultz <john.stultz@linaro.org>
Tested-by: Valentin Schneider <valentin.schneider@arm.com>
Tested-by: Tuomas Tynkkynen <tuomas@tuxera.com>
Tested-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2018-08-17 10:26:44 +01:00
..
boot ARM64: hisi fixes for 4.18 2018-06-29 14:06:49 -07:00
configs arm64: defconfig: renormalize based on recent additions 2018-06-23 10:24:25 -07:00
crypto crypto: arm64/aes-blk - fix and move skcipher_walk_done out of kernel_neon_begin, _end 2018-06-15 23:06:46 +08:00
include arm64: drop unused kernel_neon_begin_partial() macro 2018-07-31 10:13:50 +01:00
kernel arm64: Avoid calling stop_machine() when patching jump labels 2018-08-17 10:26:44 +01:00
kvm arm64: Add support for STACKLEAK gcc plugin 2018-07-26 11:36:34 +01:00
lib arm64: export tishift functions to modules 2018-05-21 19:00:48 +01:00
mm arm64: mm: Export __sync_icache_dcache() for xen-privcmd 2018-07-27 13:12:15 +01:00
net bpf, arm64: save 4 bytes in prologue when ebpf insns came from cbpf 2018-05-14 19:11:45 -07:00
xen
Kconfig arm64: Add support for STACKLEAK gcc plugin 2018-07-26 11:36:34 +01:00
Kconfig.debug
Kconfig.platforms arm64: dts: renesas: Add Renesas R8A77990 Kconfig support 2018-05-16 10:44:01 +02:00
Makefile arm64: build with baremetal linker target instead of Linux when available 2018-07-23 15:30:19 +01:00