KVM: VMX: make PLE window per-VCPU
Change PLE window into per-VCPU variable, seeded from module parameter, to allow greater flexibility. Brings in a small overhead on every vmentry. Signed-off-by: Radim Krčmář <rkrcmar@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
committed by
Paolo Bonzini
parent
ae97a3b818
commit
a7653ecdf3
@ -484,6 +484,10 @@ struct vcpu_vmx {
|
||||
|
||||
/* Support for a guest hypervisor (nested VMX) */
|
||||
struct nested_vmx nested;
|
||||
|
||||
/* Dynamic PLE window. */
|
||||
int ple_window;
|
||||
bool ple_window_dirty;
|
||||
};
|
||||
|
||||
enum segment_cache_field {
|
||||
@ -4402,7 +4406,8 @@ static int vmx_vcpu_setup(struct vcpu_vmx *vmx)
|
||||
|
||||
if (ple_gap) {
|
||||
vmcs_write32(PLE_GAP, ple_gap);
|
||||
vmcs_write32(PLE_WINDOW, ple_window);
|
||||
vmx->ple_window = ple_window;
|
||||
vmx->ple_window_dirty = true;
|
||||
}
|
||||
|
||||
vmcs_write32(PAGE_FAULT_ERROR_CODE_MASK, 0);
|
||||
@ -7389,6 +7394,11 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
|
||||
if (vmx->emulation_required)
|
||||
return;
|
||||
|
||||
if (vmx->ple_window_dirty) {
|
||||
vmx->ple_window_dirty = false;
|
||||
vmcs_write32(PLE_WINDOW, vmx->ple_window);
|
||||
}
|
||||
|
||||
if (vmx->nested.sync_shadow_vmcs) {
|
||||
copy_vmcs12_to_shadow(vmx);
|
||||
vmx->nested.sync_shadow_vmcs = false;
|
||||
|
Reference in New Issue
Block a user