Re: The vcpu won't be wakened for a long time

From: Sean Christopherson
Date: Tue Dec 14 2021 - 12:36:28 EST


On Tue, Dec 14, 2021, Longpeng (Mike, Cloud Infrastructure Service Product Dept.) wrote:
> Hi guys,
>
> We find a problem in kvm_vcpu_block().
>
> The testcase is:
> - VM configured with 1 vcpu and 1 VF (using vfio-pci passthrough)
> - the vfio interrupt and the vcpu are bound to the same pcpu
> - using remapped mode IRTE, NOT posted mode

What exactly is configured to force remapped mode?

> The bug was triggered when the vcpu executed HLT instruction:
>
> kvm_vcpu_block:
> prepare_to_rcuwait(&vcpu->wait);
> for (;;) {
> set_current_state(TASK_INTERRUPTIBLE);
>
> if (kvm_vcpu_check_block(vcpu) < 0)
> break;
> <------------ (*)
> waited = true;
> schedule();
> }
> finish_rcuwait(&vcpu->wait);
>
> The vcpu will go to sleep even if an interrupt from the VF is fired at (*) and
> the PIR and ON bit will be set ( in vmx_deliver_posted_interrupt ), so the vcpu
> won't be wakened by subsequent interrupts.
>
> Any suggestions ? Thanks.

What kernel version? There have been a variety of fixes/changes in the area in
recent kernels.