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~
