static unsigned long long kvm_createvm_count;
 static unsigned long long kvm_active_vms;
 
+static DEFINE_PER_CPU(cpumask_var_t, cpu_kick_mask);
+
 __weak void kvm_arch_mmu_notifier_invalidate_range(struct kvm *kvm,
                                                   unsigned long start, unsigned long end)
 {
                                      struct kvm_vcpu *except)
 {
        struct kvm_vcpu *vcpu;
-       cpumask_var_t cpus;
+       struct cpumask *cpus;
        bool called;
        int i, me;
 
-       zalloc_cpumask_var(&cpus, GFP_ATOMIC);
-
        me = get_cpu();
 
+       cpus = this_cpu_cpumask_var_ptr(cpu_kick_mask);
+       cpumask_clear(cpus);
+
        kvm_for_each_vcpu(i, vcpu, kvm) {
                if (vcpu == except)
                        continue;
        called = kvm_kick_many_cpus(cpus, !!(req & KVM_REQUEST_WAIT));
        put_cpu();
 
-       free_cpumask_var(cpus);
        return called;
 }
 
                goto out_free_3;
        }
 
+       for_each_possible_cpu(cpu) {
+               if (!alloc_cpumask_var_node(&per_cpu(cpu_kick_mask, cpu),
+                                           GFP_KERNEL, cpu_to_node(cpu))) {
+                       r = -ENOMEM;
+                       goto out_free_4;
+               }
+       }
+
        r = kvm_async_pf_init();
        if (r)
-               goto out_free;
+               goto out_free_5;
 
        kvm_chardev_ops.owner = module;
        kvm_vm_fops.owner = module;
 
 out_unreg:
        kvm_async_pf_deinit();
-out_free:
+out_free_5:
+       for_each_possible_cpu(cpu)
+               free_cpumask_var(per_cpu(cpu_kick_mask, cpu));
+out_free_4:
        kmem_cache_destroy(kvm_vcpu_cache);
 out_free_3:
        unregister_reboot_notifier(&kvm_reboot_notifier);
 
 void kvm_exit(void)
 {
+       int cpu;
+
        debugfs_remove_recursive(kvm_debugfs_dir);
        misc_deregister(&kvm_dev);
+       for_each_possible_cpu(cpu)
+               free_cpumask_var(per_cpu(cpu_kick_mask, cpu));
        kmem_cache_destroy(kvm_vcpu_cache);
        kvm_async_pf_deinit();
        unregister_syscore_ops(&kvm_syscore_ops);