Update to 3.4-final.
[linux-flexiantxendom0-3.2.10.git] / arch / x86 / lib / cache-smp-xen.c
1 #include <linux/smp.h>
2 #include <linux/module.h>
3 #include <asm/hypervisor.h>
4
5 static void __wbinvd(void *dummy)
6 {
7         wbinvd();
8 }
9
10 #ifndef CONFIG_XEN
11 void wbinvd_on_cpu(int cpu)
12 {
13         smp_call_function_single(cpu, __wbinvd, NULL, 1);
14 }
15 EXPORT_SYMBOL(wbinvd_on_cpu);
16 #endif
17
18 int wbinvd_on_all_cpus(void)
19 {
20         struct mmuext_op op = { .cmd = MMUEXT_FLUSH_CACHE_GLOBAL };
21
22         if (HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) == 0)
23                 return 0;
24         /* Best effort as fallback. */
25         return on_each_cpu(__wbinvd, NULL, 1);
26 }
27 EXPORT_SYMBOL(wbinvd_on_all_cpus);