diff options
author | Daniel Henrique Barboza | 2022-01-28 13:15:02 +0100 |
---|---|---|
committer | Cédric Le Goater | 2022-01-28 13:15:02 +0100 |
commit | 0c0aac01c49cc159a37841b1954b1938f0582fb4 (patch) | |
tree | a58b42932d0bdff392d89d2d2b23ed56004e207f /target/ppc | |
parent | ppc/xive: check return value of ldq_be_dma() (diff) | |
download | qemu-0c0aac01c49cc159a37841b1954b1938f0582fb4.tar.gz qemu-0c0aac01c49cc159a37841b1954b1938f0582fb4.tar.xz qemu-0c0aac01c49cc159a37841b1954b1938f0582fb4.zip |
target/ppc: fix 'skip KVM' cond in cpu_interrupt_exittb()
cpu_interrupt_exittb() was introduced by commit 044897ef4a22
("target/ppc: Fix system lockups caused by interrupt_request state
corruption") as a way to wrap cpu_interrupt() helper in BQL.
After that, commit 6d38666a8931 ("ppc: Ignore the CPU_INTERRUPT_EXITTB
interrupt with KVM") added a condition to skip this interrupt if we're
running with KVM.
Problem is that the change made by the above commit, testing for
!kvm_enabled() at the start of cpu_interrupt_exittb():
static inline void cpu_interrupt_exittb(CPUState *cs)
{
if (!kvm_enabled()) {
return;
}
(... do cpu_interrupt(cs, CPU_INTERRUPT_EXITTB) ...)
is doing the opposite of what it intended to do. This will return
immediately if not kvm_enabled(), i.e. it's a emulated CPU, and if
kvm_enabled() it will proceed to fire CPU_INTERRUPT_EXITTB.
Fix the 'skip KVM' condition so the function is a no-op when
kvm_enabled().
CC: Greg Kurz <groug@kaod.org>
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/809
Fixes: 6d38666a8931 ("ppc: Ignore the CPU_INTERRUPT_EXITTB interrupt with KVM")
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Reviewed-by: Fabiano Rosas <farosas@linux.ibm.com>
Reviewed-by: Greg Kurz <groug@kaod.org>
Message-Id: <20220121160841.9102-1-danielhb413@gmail.com>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Diffstat (limited to 'target/ppc')
-rw-r--r-- | target/ppc/helper_regs.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/target/ppc/helper_regs.c b/target/ppc/helper_regs.c index 8671b7bb69..7dca585ddd 100644 --- a/target/ppc/helper_regs.c +++ b/target/ppc/helper_regs.c @@ -201,7 +201,11 @@ void cpu_get_tb_cpu_state(CPUPPCState *env, target_ulong *pc, void cpu_interrupt_exittb(CPUState *cs) { - if (!kvm_enabled()) { + /* + * We don't need to worry about translation blocks + * when running with KVM. + */ + if (kvm_enabled()) { return; } |