On 20 March 2018 at 06:12, Victor Kamensky <kamen...@cisco.com> wrote: > In OE project 4.15 linux kernel boot hang was observed under > single cpu aarch64 qemu. Kernel code was in a loop waiting for > vtimer arrival, spinning in TC generated blocks, while interrupt > was pending unprocessed. This happened because when qemu tried to > handle vtimer interrupt target had interrupts disabled, as > result flag indicating TCG exit, cpu->icount_decr.u16.high, > was cleared but arm_cpu_exec_interrupt function did not call > arm_cpu_do_interrupt to process interrupt. Latter when target > reenabled interrupts, it happened without exit into main loop, so > following code that waited for result of interrupt execution > run in infinite loop. > > To solve the problem instructions that operate on CPU sys state > (i.e enable/disable interrupt), and marked as DISAS_UPDATE, > should be considered as DISAS_EXIT variant, and should be > forced to exit back to main loop so qemu will have a chance > processing pending CPU state updates, including pending > interrupts. > > This change brings consistency with how DISAS_UPDATE is treated > in aarch32 case. > > CC: Peter Maydell <peter.mayd...@linaro.org> > CC: Alex Bennée <alex.ben...@linaro.org> > CC: qemu-sta...@nongnu.org > Suggested-by: Peter Maydell <peter.mayd...@linaro.org> > Signed-off-by: Victor Kamensky <kamen...@cisco.com> > Reviewed-by: Richard Henderson <richard.hender...@linaro.org>
Applied to target-arm.next, thanks. -- PMM