KVM: VMX: fix invalid cpu passed to smp_call_function_single
In loaded_vmcs_clear, loaded_vmcs->cpu is the fist parameter passed to smp_call_function_single, if the target cpu is downing (doing cpu hot remove), loaded_vmcs->cpu can become -1 then -1 is passed to smp_call_function_single It can be triggered when vcpu is being destroyed, loaded_vmcs_clear is called in the preemptionable context Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
859f8450d8
commit
e6c7d32172
|
@ -1007,9 +1007,11 @@ static void __loaded_vmcs_clear(void *arg)
|
|||
|
||||
static void loaded_vmcs_clear(struct loaded_vmcs *loaded_vmcs)
|
||||
{
|
||||
if (loaded_vmcs->cpu != -1)
|
||||
smp_call_function_single(
|
||||
loaded_vmcs->cpu, __loaded_vmcs_clear, loaded_vmcs, 1);
|
||||
int cpu = loaded_vmcs->cpu;
|
||||
|
||||
if (cpu != -1)
|
||||
smp_call_function_single(cpu,
|
||||
__loaded_vmcs_clear, loaded_vmcs, 1);
|
||||
}
|
||||
|
||||
static inline void vpid_sync_vcpu_single(struct vcpu_vmx *vmx)
|
||||
|
|
Loading…
Reference in New Issue