|
@@ -176,11 +176,20 @@ void cpu_exec_unrealizefn(CPUState *cpu)
|
|
|
vmstate_unregister(NULL, &vmstate_cpu_common, cpu);
|
|
|
}
|
|
|
#endif
|
|
|
+
|
|
|
+ /* Call the plugin hook before clearing cpu->cpu_index in cpu_list_remove */
|
|
|
if (tcg_enabled()) {
|
|
|
- tcg_exec_unrealizefn(cpu);
|
|
|
+ qemu_plugin_vcpu_exit_hook(cpu);
|
|
|
}
|
|
|
|
|
|
cpu_list_remove(cpu);
|
|
|
+ /*
|
|
|
+ * Now that the vCPU has been removed from the RCU list, we can call
|
|
|
+ * tcg_exec_unrealizefn, which may free fields using call_rcu.
|
|
|
+ */
|
|
|
+ if (tcg_enabled()) {
|
|
|
+ tcg_exec_unrealizefn(cpu);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/*
|