• Kai Huang's avatar
    KVM: VMX: Fix commit which broke PML · a3eaa864
    Kai Huang authored
    I found PML was broken since below commit:
    
    	commit feda805f
    	Author: Xiao Guangrong <guangrong.xiao@linux.intel.com>
    	Date:   Wed Sep 9 14:05:55 2015 +0800
    
    	KVM: VMX: unify SECONDARY_VM_EXEC_CONTROL update
    
    	Unify the update in vmx_cpuid_update()
    Signed-off-by: default avatarXiao Guangrong <guangrong.xiao@linux.intel.com>
    	[Rewrite to use vmcs_set_secondary_exec_control. - Paolo]
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    
    The reason is in above commit vmx_cpuid_update calls vmx_secondary_exec_control,
    in which currently SECONDARY_EXEC_ENABLE_PML bit is cleared unconditionally (as
    PML is enabled in creating vcpu). Therefore if vcpu_cpuid_update is called after
    vcpu is created, PML will be disabled unexpectedly while log-dirty code still
    thinks PML is used.
    
    Fix this by clearing SECONDARY_EXEC_ENABLE_PML in vmx_secondary_exec_control
    only when PML is not supported or not enabled (!enable_pml). This is more
    reasonable as PML is currently either always enabled or disabled. With this
    explicit updating SECONDARY_EXEC_ENABLE_PML in vmx_enable{disable}_pml is not
    needed so also rename vmx_enable{disable}_pml to vmx_create{destroy}_pml_buffer.
    
    Fixes: feda805fSigned-off-by: default avatarKai Huang <kai.huang@linux.intel.com>
    [While at it, change a wrong ASSERT to an "if".  The condition can happen
     if creating the VCPU fails with ENOMEM. - Paolo]
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    a3eaa864
vmx.c 306 KB