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
7static void __wbinvd(void *dummy)
8{
9 wbinvd();
10}
11
12void wbinvd_on_cpu(int cpu)
13{
14 smp_call_function_single(cpuid: cpu, func: __wbinvd, NULL, wait: 1);
15}
16EXPORT_SYMBOL_FOR_KVM(wbinvd_on_cpu);
17
18void wbinvd_on_all_cpus(void)
19{
20 on_each_cpu(func: __wbinvd, NULL, wait: 1);
21}
22EXPORT_SYMBOL(wbinvd_on_all_cpus);
23
24void wbinvd_on_cpus_mask(struct cpumask *cpus)
25{
26 on_each_cpu_mask(mask: cpus, func: __wbinvd, NULL, wait: 1);
27}
28EXPORT_SYMBOL_FOR_KVM(wbinvd_on_cpus_mask);
29
30static void __wbnoinvd(void *dummy)
31{
32 wbnoinvd();
33}
34
35void wbnoinvd_on_all_cpus(void)
36{
37 on_each_cpu(func: __wbnoinvd, NULL, wait: 1);
38}
39EXPORT_SYMBOL_FOR_KVM(wbnoinvd_on_all_cpus);
40
41void wbnoinvd_on_cpus_mask(struct cpumask *cpus)
42{
43 on_each_cpu_mask(mask: cpus, func: __wbnoinvd, NULL, wait: 1);
44}
45EXPORT_SYMBOL_FOR_KVM(wbnoinvd_on_cpus_mask);
46

source code of linux/arch/x86/lib/cache-smp.c