On 12/11/20 2:31 AM, Claudio Fontana wrote:
> cc->do_interrupt is in theory a TCG callback used in accel/tcg only,
> to prepare the emulated architecture to take an interrupt as defined
> in the hardware specifications,
> 
> but in reality the _do_interrupt style of functions in targets are
> also occasionally reused by KVM to prepare the architecture state in a
> similar way where userspace code has identified that it needs to
> deliver an exception to the guest.
> 
> In the case of ARM, that includes:
> 
> 1) the vcpu thread got a SIGBUS indicating a memory error,
>    and we need to deliver a Synchronous External Abort to the guest to
>    let it know about the error.
> 2) the kernel told us about a debug exception (breakpoint, watchpoint)
>    but it is not for one of QEMU's own gdbstub breakpoints/watchpoints
>    so it must be a breakpoint the guest itself has set up, therefore
>    we need to deliver it to the guest.
> 
> So in order to reuse code, the same arm_do_interrupt function is used.
> This is all fine, but we need to avoid calling it using the callback
> registered in CPUClass, since that one is now TCG-only.
> 
> Fortunately this is easily solved by replacing calls to
> CPUClass::do_interrupt() with explicit calls to arm_do_interrupt().
> 
> Signed-off-by: Claudio Fontana <[email protected]>
> Cc: Peter Maydell <[email protected]>
> Reviewed-by: Alex Bennée <[email protected]>
> Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
> ---
>  target/arm/helper.c | 4 ++++
>  target/arm/kvm64.c  | 6 ++----
>  2 files changed, 6 insertions(+), 4 deletions(-)

Reviewed-by: Richard Henderson <[email protected]>

r~


Reply via email to