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