X-Git-Url: http://git.cascardo.info/?a=blobdiff_plain;f=kernel%2Fup.c;h=ee81ac9af4caff801a531a9219efd19637b76688;hb=4b2bd5fec007a4fd3fc82474b9199af25013de4c;hp=1760bf3d14636266eae1f81aa84f277076c4335d;hpb=177875423eb01179738f6badcbb9eef4be789a0e;p=cascardo%2Flinux.git diff --git a/kernel/up.c b/kernel/up.c index 1760bf3d1463..ee81ac9af4ca 100644 --- a/kernel/up.c +++ b/kernel/up.c @@ -6,6 +6,7 @@ #include #include #include +#include int smp_call_function_single(int cpu, void (*func) (void *info), void *info, int wait) @@ -82,3 +83,20 @@ void on_each_cpu_cond(bool (*cond_func)(int cpu, void *info), preempt_enable(); } EXPORT_SYMBOL(on_each_cpu_cond); + +int smp_call_on_cpu(unsigned int cpu, int (*func)(void *), void *par, bool phys) +{ + int ret; + + if (cpu != 0) + return -ENXIO; + + if (phys) + hypervisor_pin_vcpu(0); + ret = func(par); + if (phys) + hypervisor_pin_vcpu(-1); + + return ret; +} +EXPORT_SYMBOL_GPL(smp_call_on_cpu);