aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--virt/kvm/kvm_main.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 2d6ca7968d65..e7644b90667e 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -70,7 +70,7 @@ module_param(msi2intx, bool, 0);
70DEFINE_SPINLOCK(kvm_lock); 70DEFINE_SPINLOCK(kvm_lock);
71LIST_HEAD(vm_list); 71LIST_HEAD(vm_list);
72 72
73static cpumask_t cpus_hardware_enabled; 73static cpumask_var_t cpus_hardware_enabled;
74 74
75struct kmem_cache *kvm_vcpu_cache; 75struct kmem_cache *kvm_vcpu_cache;
76EXPORT_SYMBOL_GPL(kvm_vcpu_cache); 76EXPORT_SYMBOL_GPL(kvm_vcpu_cache);
@@ -1965,9 +1965,9 @@ static void hardware_enable(void *junk)
1965{ 1965{
1966 int cpu = raw_smp_processor_id(); 1966 int cpu = raw_smp_processor_id();
1967 1967
1968 if (cpu_isset(cpu, cpus_hardware_enabled)) 1968 if (cpumask_test_cpu(cpu, cpus_hardware_enabled))
1969 return; 1969 return;
1970 cpu_set(cpu, cpus_hardware_enabled); 1970 cpumask_set_cpu(cpu, cpus_hardware_enabled);
1971 kvm_arch_hardware_enable(NULL); 1971 kvm_arch_hardware_enable(NULL);
1972} 1972}
1973 1973
@@ -1975,9 +1975,9 @@ static void hardware_disable(void *junk)
1975{ 1975{
1976 int cpu = raw_smp_processor_id(); 1976 int cpu = raw_smp_processor_id();
1977 1977
1978 if (!cpu_isset(cpu, cpus_hardware_enabled)) 1978 if (!cpumask_test_cpu(cpu, cpus_hardware_enabled))
1979 return; 1979 return;
1980 cpu_clear(cpu, cpus_hardware_enabled); 1980 cpumask_clear_cpu(cpu, cpus_hardware_enabled);
1981 kvm_arch_hardware_disable(NULL); 1981 kvm_arch_hardware_disable(NULL);
1982} 1982}
1983 1983
@@ -2211,9 +2211,14 @@ int kvm_init(void *opaque, unsigned int vcpu_size,
2211 2211
2212 bad_pfn = page_to_pfn(bad_page); 2212 bad_pfn = page_to_pfn(bad_page);
2213 2213
2214 if (!alloc_cpumask_var(&cpus_hardware_enabled, GFP_KERNEL)) {
2215 r = -ENOMEM;
2216 goto out_free_0;
2217 }
2218
2214 r = kvm_arch_hardware_setup(); 2219 r = kvm_arch_hardware_setup();
2215 if (r < 0) 2220 if (r < 0)
2216 goto out_free_0; 2221 goto out_free_0a;
2217 2222
2218 for_each_online_cpu(cpu) { 2223 for_each_online_cpu(cpu) {
2219 smp_call_function_single(cpu, 2224 smp_call_function_single(cpu,
@@ -2277,6 +2282,8 @@ out_free_2:
2277 on_each_cpu(hardware_disable, NULL, 1); 2282 on_each_cpu(hardware_disable, NULL, 1);
2278out_free_1: 2283out_free_1:
2279 kvm_arch_hardware_unsetup(); 2284 kvm_arch_hardware_unsetup();
2285out_free_0a:
2286 free_cpumask_var(cpus_hardware_enabled);
2280out_free_0: 2287out_free_0:
2281 __free_page(bad_page); 2288 __free_page(bad_page);
2282out: 2289out:
@@ -2300,6 +2307,7 @@ void kvm_exit(void)
2300 kvm_arch_hardware_unsetup(); 2307 kvm_arch_hardware_unsetup();
2301 kvm_arch_exit(); 2308 kvm_arch_exit();
2302 kvm_exit_debug(); 2309 kvm_exit_debug();
2310 free_cpumask_var(cpus_hardware_enabled);
2303 __free_page(bad_page); 2311 __free_page(bad_page);
2304} 2312}
2305EXPORT_SYMBOL_GPL(kvm_exit); 2313EXPORT_SYMBOL_GPL(kvm_exit);