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:
parent
ae97a3b818
commit
a7653ecdf3
@ -484,6 +484,10 @@ struct vcpu_vmx {
|
|||||||
|
|
||||||
/* Support for a guest hypervisor (nested VMX) */
|
/* Support for a guest hypervisor (nested VMX) */
|
||||||
struct nested_vmx nested;
|
struct nested_vmx nested;
|
||||||
|
|
||||||
|
/* Dynamic PLE window. */
|
||||||
|
int ple_window;
|
||||||
|
bool ple_window_dirty;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum segment_cache_field {
|
enum segment_cache_field {
|
||||||
@ -4402,7 +4406,8 @@ static int vmx_vcpu_setup(struct vcpu_vmx *vmx)
|
|||||||
|
|
||||||
if (ple_gap) {
|
if (ple_gap) {
|
||||||
vmcs_write32(PLE_GAP, 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);
|
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)
|
if (vmx->emulation_required)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (vmx->ple_window_dirty) {
|
||||||
|
vmx->ple_window_dirty = false;
|
||||||
|
vmcs_write32(PLE_WINDOW, vmx->ple_window);
|
||||||
|
}
|
||||||
|
|
||||||
if (vmx->nested.sync_shadow_vmcs) {
|
if (vmx->nested.sync_shadow_vmcs) {
|
||||||
copy_vmcs12_to_shadow(vmx);
|
copy_vmcs12_to_shadow(vmx);
|
||||||
vmx->nested.sync_shadow_vmcs = false;
|
vmx->nested.sync_shadow_vmcs = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user