aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/qom/cpu.h9
-rw-r--r--qom/cpu.c7
-rw-r--r--trace/control.c5
-rw-r--r--trace/control.h7
4 files changed, 23 insertions, 5 deletions
diff --git a/include/qom/cpu.h b/include/qom/cpu.h
index 22b54d6..6d481a1 100644
--- a/include/qom/cpu.h
+++ b/include/qom/cpu.h
@@ -27,7 +27,6 @@
#include "qemu/bitmap.h"
#include "qemu/queue.h"
#include "qemu/thread.h"
-#include "trace/generated-events.h"
typedef int (*WriteCoreDumpFunction)(const void *buf, size_t size,
void *opaque);
@@ -345,8 +344,12 @@ struct CPUState {
struct KVMState *kvm_state;
struct kvm_run *kvm_run;
- /* Used for events with 'vcpu' and *without* the 'disabled' properties */
- DECLARE_BITMAP(trace_dstate, TRACE_VCPU_EVENT_COUNT);
+ /*
+ * Used for events with 'vcpu' and *without* the 'disabled' properties.
+ * Dynamically allocated based on bitmap requried to hold up to
+ * trace_get_vcpu_event_count() entries.
+ */
+ unsigned long *trace_dstate;
/* TODO Move common fields from CPUArchState here. */
int cpu_index; /* used by alpha TCG */
diff --git a/qom/cpu.c b/qom/cpu.c
index e765bc0..c40f774 100644
--- a/qom/cpu.c
+++ b/qom/cpu.c
@@ -360,12 +360,15 @@ static void cpu_common_initfn(Object *obj)
qemu_mutex_init(&cpu->work_mutex);
QTAILQ_INIT(&cpu->breakpoints);
QTAILQ_INIT(&cpu->watchpoints);
- bitmap_zero(cpu->trace_dstate, TRACE_VCPU_EVENT_COUNT);
+
+ cpu->trace_dstate = bitmap_new(trace_get_vcpu_event_count());
}
static void cpu_common_finalize(Object *obj)
{
- cpu_exec_exit(CPU(obj));
+ CPUState *cpu = CPU(obj);
+ cpu_exec_exit(cpu);
+ g_free(cpu->trace_dstate);
}
static int64_t cpu_common_get_arch_id(CPUState *cpu)
diff --git a/trace/control.c b/trace/control.c
index a231327..5f10e2d 100644
--- a/trace/control.c
+++ b/trace/control.c
@@ -290,3 +290,8 @@ char *trace_opt_parse(const char *optarg)
return trace_file;
}
+
+uint32_t trace_get_vcpu_event_count(void)
+{
+ return TRACE_VCPU_EVENT_COUNT;
+}
diff --git a/trace/control.h b/trace/control.h
index 3f30a0c..69635bf 100644
--- a/trace/control.h
+++ b/trace/control.h
@@ -232,6 +232,13 @@ extern QemuOptsList qemu_trace_opts;
*/
char *trace_opt_parse(const char *optarg);
+/**
+ * trace_get_vcpu_event_count:
+ *
+ * Return the number of known vcpu-specific events
+ */
+uint32_t trace_get_vcpu_event_count(void);
+
#include "trace/control-internal.h"