Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

KVM: PPC: mmio: Return to guest after emulation failure

If MMIO emulation fails we don't want to crash the whole guest by
returning to userspace.

The original commit bbf45ba57eae ("KVM: ppc: PowerPC 440 KVM
implementation") added a todo:

/* XXX Deliver Program interrupt to guest. */

and later the commit d69614a295ae ("KVM: PPC: Separate loadstore
emulation from priv emulation") added the Program interrupt injection
but in another file, so I'm assuming it was missed that this block
needed to be altered.

Also change the message to a ratelimited one since we're letting the
guest run and it could flood the host logs.

Signed-off-by: Fabiano Rosas <farosas@linux.ibm.com>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220125215655.1026224-5-farosas@linux.ibm.com

authored by

Fabiano Rosas and committed by
Michael Ellerman
349fbfe9 3f831504

+3 -3
+3 -3
arch/powerpc/kvm/powerpc.c
··· 307 307 u32 last_inst; 308 308 309 309 kvmppc_get_last_inst(vcpu, INST_GENERIC, &last_inst); 310 - /* XXX Deliver Program interrupt to guest. */ 311 - pr_emerg("%s: emulation failed (%08x)\n", __func__, last_inst); 312 - r = RESUME_HOST; 310 + kvm_debug_ratelimited("Guest access to device memory using unsupported instruction (opcode: %#08x)\n", 311 + last_inst); 312 + r = RESUME_GUEST; 313 313 break; 314 314 } 315 315 default: