Re: AVIC related warning in enable_irq_window

From: Suravee Suthikulpanit
Date: Sun May 03 2020 - 15:18:40 EST


Maxim / Paolo,

On 5/2/20 11:43 PM, Maxim Levitsky wrote:
On Sat, 2020-05-02 at 18:42 +0200, Paolo Bonzini wrote:
On 02/05/20 15:58, Maxim Levitsky wrote:
The AVIC is disabled by svm_toggle_avic_for_irq_window, which calls
kvm_request_apicv_update, which broadcasts the KVM_REQ_APICV_UPDATE vcpu request,
however it doesn't broadcast it to CPU on which now we are running, which seems OK,
because the code that handles that broadcast runs on each VCPU entry, thus
when this CPU will enter guest mode it will notice and disable the AVIC.

However later in svm_enable_vintr, there is test 'WARN_ON(kvm_vcpu_apicv_active(&svm->vcpu));'
which is still true on current CPU because of the above.

Good point! We can just remove the WARN_ON I think. Can you send a patch?

svm_set_vintr also has a rather silly

static void svm_set_vintr(struct vcpu_svm *svm)
{
set_intercept(svm, INTERCEPT_VINTR);
if (is_intercept(svm, INTERCEPT_VINTR))
svm_enable_vintr(svm);
}

so I'm thinking of just inlining svm_enable_vintr and renaming
svm_{set,clear}_vintr to svm_{enable,disable}_vintr_window. Would you
like to send two patches for this, the first to remove the WARN_ON and
the second to do the cleanup?

Absolutely! I will send a patch very soon.

I have been debugging this and I have a patch that is supposed to fix this
(instead of removing the WARN ON). Please do not remove the warn on just yet.

Thanks,
Suravee