Hi Russell, On Fri, Jan 25, 2019 at 09:03:57PM +0000, Russell King wrote: > Executing loops such as: > > while (1) > cpu_relax(); > > with interrupts disabled results in a livelock of the entire system, > as other CPUs are prevented making progress. This is most noticable > as a failure of crashdump kexec, which stops just after issuing: > > Loading crashdump kernel... > > to the system console. A workaround for this is to use 10 nops in > cpu_relax(). > > We also use wfe() in while (1) loops to avoid burning cycles in a > tight loop, giving the CPU a hint that we're not doing anything > useful. > > Signed-off-by: Russell King <rmk+kernel@xxxxxxxxxxxxxxx> > --- > It's been a while since this was posted, Will's suggestion was to use > 10 nops in cpu_relax() last time around. I still prefer wfe() in > these infinite-not-doing-anything-ever loops. > > arch/arm/include/asm/barrier.h | 2 ++ > arch/arm/include/asm/processor.h | 6 +++++- > arch/arm/kernel/machine_kexec.c | 5 ++++- > arch/arm/kernel/smp.c | 4 +++- > arch/arm/mach-omap2/prm_common.c | 4 +++- > 5 files changed, 17 insertions(+), 4 deletions(-) Thanks, this looks good to me and your explanation later in the thread makes a lot of sense: Acked-by: Will Deacon <will.deacon@xxxxxxx> Feel free to put some of the erratum writeup that I shared in the commit message, if you like. Will