mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 13:30:52 +00:00
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)
|
||||
{
|
||||
CPUState *cpu = CPU(dev);
|
||||
/* NOTE: latest generic point before the cpu is fully unrealized */
|
||||
trace_fini_vcpu(cpu);
|
||||
cpu_exec_unrealizefn(cpu);
|
||||
}
|
||||
|
||||
|
@ -259,6 +259,22 @@ void trace_init_file(const char *file)
|
||||
#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)
|
||||
{
|
||||
#ifdef CONFIG_TRACE_SIMPLE
|
||||
|
@ -201,6 +201,14 @@ void trace_init_file(const char *file);
|
||||
*/
|
||||
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:
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user