mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-30 08:02:30 +00:00
KVM: SVM: Fix disable pause loop exit/pause filtering capability on SVM
'Commit8566ac8b8e
("KVM: SVM: Implement pause loop exit logic in SVM")' drops disable pause loop exit/pause filtering capability completely, I guess it is a merge fault by Radim since disable vmexits capabilities and pause loop exit for SVM patchsets are merged at the same time. This patch reintroduces the disable pause loop exit/pause filtering capability support. Reported-by: Haiwei Li <lihaiwei@tencent.com> Tested-by: Haiwei Li <lihaiwei@tencent.com> Fixes:8566ac8b
("KVM: SVM: Implement pause loop exit logic in SVM") Signed-off-by: Wanpeng Li <wanpengli@tencent.com> Message-Id: <1596165141-28874-3-git-send-email-wanpengli@tencent.com> Cc: stable@vger.kernel.org Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
d2286ba7d5
commit
830f01b089
1 changed files with 6 additions and 3 deletions
|
@ -1090,7 +1090,7 @@ static void init_vmcb(struct vcpu_svm *svm)
|
|||
svm->nested.vmcb = 0;
|
||||
svm->vcpu.arch.hflags = 0;
|
||||
|
||||
if (pause_filter_count) {
|
||||
if (!kvm_pause_in_guest(svm->vcpu.kvm)) {
|
||||
control->pause_filter_count = pause_filter_count;
|
||||
if (pause_filter_thresh)
|
||||
control->pause_filter_thresh = pause_filter_thresh;
|
||||
|
@ -2693,7 +2693,7 @@ static int pause_interception(struct vcpu_svm *svm)
|
|||
struct kvm_vcpu *vcpu = &svm->vcpu;
|
||||
bool in_kernel = (svm_get_cpl(vcpu) == 0);
|
||||
|
||||
if (pause_filter_thresh)
|
||||
if (!kvm_pause_in_guest(vcpu->kvm))
|
||||
grow_ple_window(vcpu);
|
||||
|
||||
kvm_vcpu_on_spin(vcpu, in_kernel);
|
||||
|
@ -3780,7 +3780,7 @@ static void svm_handle_exit_irqoff(struct kvm_vcpu *vcpu)
|
|||
|
||||
static void svm_sched_in(struct kvm_vcpu *vcpu, int cpu)
|
||||
{
|
||||
if (pause_filter_thresh)
|
||||
if (!kvm_pause_in_guest(vcpu->kvm))
|
||||
shrink_ple_window(vcpu);
|
||||
}
|
||||
|
||||
|
@ -3958,6 +3958,9 @@ static void svm_vm_destroy(struct kvm *kvm)
|
|||
|
||||
static int svm_vm_init(struct kvm *kvm)
|
||||
{
|
||||
if (!pause_filter_count || !pause_filter_thresh)
|
||||
kvm->arch.pause_in_guest = true;
|
||||
|
||||
if (avic) {
|
||||
int ret = avic_vm_init(kvm);
|
||||
if (ret)
|
||||
|
|
Loading…
Reference in a new issue