@@ -2877,8 +2895,10 @@ static int clgi_interception(struct vcpu_svm
*svm)
disable_gif(svm);
/* After a CLGI no interrupts should come */
- svm_clear_vintr(svm);
- svm->vmcb->control.int_ctl &= ~V_IRQ_MASK;
+ if (!svm_vcpu_avic_enabled(svm)) {
+ svm_clear_vintr(svm);
+ svm->vmcb->control.int_ctl &= ~V_IRQ_MASK;
+ }
This is for nested virtualization. Unless you support nested AVIC, the
L2 guest should run without AVIC (i.e. IsRunning should be false) and
use the old VINTR mechanism.
I see. I am not planning to supported nested AVIC at the L2 level for
the moment. If it is alright, I would like to get the basic AVIC and
IOMMU in first (unless you have a different opinion).
In that case, I think I should also make sure to not expose AVIC CPUID
to the guest VM.