mirror of https://github.com/xemu-project/xemu.git
trace: Fix dynamic event state on vCPU hot-unplug
We need to disable per-vCPU events on a vCPU that is hot-unplugged to keep the dynamic event state global counters consistent. Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Message-id: 148278748055.1404.1570530281528619895.stgit@fimbulvetr.bsc.es Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
fff895dfdb
commit
82e95ec847
|
@ -348,6 +348,8 @@ static void cpu_common_realizefn(DeviceState *dev, Error **errp)
|
||||||
static void cpu_common_unrealizefn(DeviceState *dev, Error **errp)
|
static void cpu_common_unrealizefn(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
CPUState *cpu = CPU(dev);
|
CPUState *cpu = CPU(dev);
|
||||||
|
/* NOTE: latest generic point before the cpu is fully unrealized */
|
||||||
|
trace_fini_vcpu(cpu);
|
||||||
cpu_exec_unrealizefn(cpu);
|
cpu_exec_unrealizefn(cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -259,6 +259,22 @@ void trace_init_file(const char *file)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void trace_fini_vcpu(CPUState *vcpu)
|
||||||
|
{
|
||||||
|
TraceEventIter iter;
|
||||||
|
TraceEvent *ev;
|
||||||
|
|
||||||
|
trace_event_iter_init(&iter, NULL);
|
||||||
|
while ((ev = trace_event_iter_next(&iter)) != NULL) {
|
||||||
|
if (trace_event_is_vcpu(ev) &&
|
||||||
|
trace_event_get_state_static(ev) &&
|
||||||
|
trace_event_get_vcpu_state_dynamic(vcpu, ev)) {
|
||||||
|
/* must disable to affect the global counter */
|
||||||
|
trace_event_set_vcpu_state_dynamic(vcpu, ev, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool trace_init_backends(void)
|
bool trace_init_backends(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_TRACE_SIMPLE
|
#ifdef CONFIG_TRACE_SIMPLE
|
||||||
|
|
|
@ -201,6 +201,14 @@ void trace_init_file(const char *file);
|
||||||
*/
|
*/
|
||||||
void trace_init_vcpu(CPUState *vcpu);
|
void trace_init_vcpu(CPUState *vcpu);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* trace_fini_vcpu:
|
||||||
|
* @vcpu: Removed vCPU.
|
||||||
|
*
|
||||||
|
* Disable dynamic event state for a hot-unplugged vCPU.
|
||||||
|
*/
|
||||||
|
void trace_fini_vcpu(CPUState *vcpu);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* trace_list_events:
|
* trace_list_events:
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue