Quoting Nico Boehr (2022-10-05 14:20:50) > To determine whether the guest has caused an external interruption loop > upon code 20 (external interrupt) intercepts, the ext_new_psw needs to > be inspected to see whether external interrupts are enabled. > > Under non-PV, ext_new_psw can simply be taken from guest lowcore. Under > PV, KVM can only access the encrypted guest lowcore and hence the > ext_new_psw must not be taken from guest lowcore. > > handle_external_interrupt() incorrectly did that and hence was not able > to reliably tell whether an external interruption loop is happening or > not. False negatives cause spurious failures of my kvm-unit-test > for extint loops[1] under PV. > > Since code 20 is only caused under PV if and only if the guest's > ext_new_psw is enabled for external interrupts, false positive detection > of a external interruption loop can not happen. > > Fix this issue by instead looking at the guest PSW in the state > description. Since the PSW swap for external interrupt is done by the > ultravisor before the intercept is caused, this reliably tells whether > the guest is enabled for external interrupts in the ext_new_psw. > > Also update the comments to explain better what is happening. > > [1] https://lore.kernel.org/kvm/20220812062151.1980937-4-nrb@xxxxxxxxxxxxx/ Polite Ping.