diff options
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r-- | arch/x86/kvm/x86.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index d8adc1da76dd..89862a80e32c 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -2946,10 +2946,7 @@ static int kvmclock_cpufreq_notifier(struct notifier_block *nb, unsigned long va | |||
2946 | 2946 | ||
2947 | spin_lock(&kvm_lock); | 2947 | spin_lock(&kvm_lock); |
2948 | list_for_each_entry(kvm, &vm_list, vm_list) { | 2948 | list_for_each_entry(kvm, &vm_list, vm_list) { |
2949 | for (i = 0; i < KVM_MAX_VCPUS; ++i) { | 2949 | kvm_for_each_vcpu(i, vcpu, kvm) { |
2950 | vcpu = kvm->vcpus[i]; | ||
2951 | if (!vcpu) | ||
2952 | continue; | ||
2953 | if (vcpu->cpu != freq->cpu) | 2950 | if (vcpu->cpu != freq->cpu) |
2954 | continue; | 2951 | continue; |
2955 | if (!kvm_request_guest_time_update(vcpu)) | 2952 | if (!kvm_request_guest_time_update(vcpu)) |
@@ -4678,20 +4675,22 @@ static void kvm_unload_vcpu_mmu(struct kvm_vcpu *vcpu) | |||
4678 | static void kvm_free_vcpus(struct kvm *kvm) | 4675 | static void kvm_free_vcpus(struct kvm *kvm) |
4679 | { | 4676 | { |
4680 | unsigned int i; | 4677 | unsigned int i; |
4678 | struct kvm_vcpu *vcpu; | ||
4681 | 4679 | ||
4682 | /* | 4680 | /* |
4683 | * Unpin any mmu pages first. | 4681 | * Unpin any mmu pages first. |
4684 | */ | 4682 | */ |
4685 | for (i = 0; i < KVM_MAX_VCPUS; ++i) | 4683 | kvm_for_each_vcpu(i, vcpu, kvm) |
4686 | if (kvm->vcpus[i]) | 4684 | kvm_unload_vcpu_mmu(vcpu); |
4687 | kvm_unload_vcpu_mmu(kvm->vcpus[i]); | 4685 | kvm_for_each_vcpu(i, vcpu, kvm) |
4688 | for (i = 0; i < KVM_MAX_VCPUS; ++i) { | 4686 | kvm_arch_vcpu_free(vcpu); |
4689 | if (kvm->vcpus[i]) { | 4687 | |
4690 | kvm_arch_vcpu_free(kvm->vcpus[i]); | 4688 | mutex_lock(&kvm->lock); |
4691 | kvm->vcpus[i] = NULL; | 4689 | for (i = 0; i < atomic_read(&kvm->online_vcpus); i++) |
4692 | } | 4690 | kvm->vcpus[i] = NULL; |
4693 | } | ||
4694 | 4691 | ||
4692 | atomic_set(&kvm->online_vcpus, 0); | ||
4693 | mutex_unlock(&kvm->lock); | ||
4695 | } | 4694 | } |
4696 | 4695 | ||
4697 | void kvm_arch_sync_events(struct kvm *kvm) | 4696 | void kvm_arch_sync_events(struct kvm *kvm) |