1 // SPDX-License-Identifier: GPL-2.0 2 #include <asm/paravirt.h> 3 #include <linux/smp.h> 4 #include <linux/export.h> 5 #include <linux/kvm_types.h> 6 7 static void __wbinvd(void *dummy) 8 { 9 wbinvd(); 10 } 11 12 void wbinvd_on_cpu(int cpu) 13 { 14 smp_call_function_single(cpu, __wbinvd, NULL, 1); 15 } 16 EXPORT_SYMBOL_FOR_KVM(wbinvd_on_cpu); 17 18 void wbinvd_on_all_cpus(void) 19 { 20 on_each_cpu(__wbinvd, NULL, 1); 21 } 22 EXPORT_SYMBOL(wbinvd_on_all_cpus); 23 24 void wbinvd_on_cpus_mask(struct cpumask *cpus) 25 { 26 on_each_cpu_mask(cpus, __wbinvd, NULL, 1); 27 } 28 EXPORT_SYMBOL_FOR_KVM(wbinvd_on_cpus_mask); 29 30 static void __wbnoinvd(void *dummy) 31 { 32 wbnoinvd(); 33 } 34 35 void wbnoinvd_on_all_cpus(void) 36 { 37 on_each_cpu(__wbnoinvd, NULL, 1); 38 } 39 EXPORT_SYMBOL_FOR_KVM(wbnoinvd_on_all_cpus); 40 41 void wbnoinvd_on_cpus_mask(struct cpumask *cpus) 42 { 43 on_each_cpu_mask(cpus, __wbnoinvd, NULL, 1); 44 } 45 EXPORT_SYMBOL_FOR_KVM(wbnoinvd_on_cpus_mask); 46