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

Reply via email to