|
Lines 2708-2728
Link Here
|
| 2708 |
if (targetHostCpu != INVALID_PCPU) { |
2708 |
if (targetHostCpu != INVALID_PCPU) { |
| 2709 |
ASSERT(targetHostCpu < MAX_PCPUS); |
2709 |
ASSERT(targetHostCpu < MAX_PCPUS); |
| 2710 |
|
2710 |
|
| 2711 |
#if defined(VMMON_USE_CALL_FUNC) |
|
|
| 2712 |
/* older kernels IPI broadcast; use async when possible */ |
| 2713 |
(void) compat_smp_call_function(LinuxDriverIPIHandler, |
| 2714 |
NULL, VMMON_CALL_FUNC_SYNC); |
| 2715 |
|
| 2716 |
mode = IPI_BROADCAST; |
| 2717 |
break; |
| 2718 |
#else |
| 2719 |
/* Newer kernels have (async) IPI targetting */ |
2711 |
/* Newer kernels have (async) IPI targetting */ |
| 2720 |
arch_send_call_function_single_ipi(targetHostCpu); |
2712 |
arch_send_call_function_single_ipi(targetHostCpu); |
| 2721 |
mode = IPI_UNICAST; |
2713 |
mode = IPI_UNICAST; |
| 2722 |
if (!all) { |
2714 |
if (!all) { |
| 2723 |
break; |
2715 |
break; |
| 2724 |
} |
2716 |
} |
| 2725 |
#endif |
|
|
| 2726 |
} |
2717 |
} |
| 2727 |
ipiTargets = VCPUSet_Remove(ipiTargets, v); |
2718 |
ipiTargets = VCPUSet_Remove(ipiTargets, v); |
| 2728 |
} |
2719 |
} |
|
Lines 2848-2854
Link Here
|
| 2848 |
{ |
2839 |
{ |
| 2849 |
preempt_disable(); |
2840 |
preempt_disable(); |
| 2850 |
(*func)(data); |
2841 |
(*func)(data); |
| 2851 |
(void)compat_smp_call_function(*func, data, 1); |
2842 |
// (void)compat_smp_call_function(*func, data, 1); |
| 2852 |
preempt_enable(); |
2843 |
preempt_enable(); |
| 2853 |
} |
2844 |
} |
| 2854 |
|
2845 |
|