On Mon, 01 Jul 2024 12:19:33 +0100, James Gowans <jgowans@xxxxxxxxxx> wrote: > > From: Marc Zyngier <maz@xxxxxxxxxx> > > Xiang reports that VMs occasionally fail to boot on GICv4.1 systems when > running a preemptible kernel, as it is possible that a vCPU is blocked > without requesting a doorbell interrupt. > > The issue is that any preemption that occurs between vgic_v4_put() and > schedule() on the block path will mark the vPE as nonresident and *not* > request a doorbell irq. This occurs because when the vcpu thread is > resumed on its way to block, vcpu_load() will make the vPE resident > again. Once the vcpu actually blocks, we don't request a doorbell > anymore, and the vcpu won't be woken up on interrupt delivery. > > Fix it by tracking that we're entering WFI, and key the doorbell > request on that flag. This allows us not to make the vPE resident > when going through a preempt/schedule cycle, meaning we don't lose > any state. > > Cc: stable@xxxxxxxxxxxxxxx > Fixes: 8e01d9a396e6 ("KVM: arm64: vgic-v4: Move the GICv4 residency flow to be driven by vcpu_load/put") > Reported-by: Xiang Chen <chenxiang66@xxxxxxxxxxxxx> > Suggested-by: Zenghui Yu <yuzenghui@xxxxxxxxxx> > Tested-by: Xiang Chen <chenxiang66@xxxxxxxxxxxxx> > Co-developed-by: Oliver Upton <oliver.upton@xxxxxxxxx> > Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx> > Acked-by: Zenghui Yu <yuzenghui@xxxxxxxxxx> > Link: https://lore.kernel.org/r/20230713070657.3873244-1-maz@xxxxxxxxxx > Signed-off-by: Oliver Upton <oliver.upton@xxxxxxxxx> > > (cherry picked from commit b321c31c9b7b309dcde5e8854b741c8e6a9a05f0) > > [modified to wrangle the vCPU flags directly instead of going through > the flag helper macros as they have not yet been introduced. Also doing > the flag wranging in the kvm_arch_vcpu_{un}blocking() hooks as the > introduction of kvm_vcpu_wfi has not yet happened. See: > 6109c5a6ab7f ("KVM: arm64: Move vGIC v4 handling for WFI out arch callback hook")] > > Signed-off-by: James Gowans <jgowans@xxxxxxxxxx> Acked-by: Marc Zyngier <maz@xxxxxxxxxx> M. -- Without deviation from the norm, progress is not possible.