From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44292) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1brPti-0004oF-7B for qemu-devel@nongnu.org; Tue, 04 Oct 2016 09:36:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1brPtd-0004PC-4X for qemu-devel@nongnu.org; Tue, 04 Oct 2016 09:36:41 -0400 Received: from mx1.redhat.com ([209.132.183.28]:44284) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1brPtc-0004Oj-QV for qemu-devel@nongnu.org; Tue, 04 Oct 2016 09:36:37 -0400 From: "Daniel P. Berrange" Date: Tue, 4 Oct 2016 14:35:53 +0100 Message-Id: <1475588159-30598-15-git-send-email-berrange@redhat.com> In-Reply-To: <1475588159-30598-1-git-send-email-berrange@redhat.com> References: <1475588159-30598-1-git-send-email-berrange@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH v6 14/20] trace: dynamically allocate trace_dstate in CPUState List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Llu=C3=ADs=20Vilanova?= , Stefan Hajnoczi , "Daniel P. Berrange" The CPUState struct has a bitmap tracking which VCPU events are currently active. This is indexed based on the event ID values, and sized according the maximum TraceEventVCPUID enum value. When we start dynamically assigning IDs at runtime, we can't statically declare a bitmap without making an assumption about the max event count. This problem can be solved by dynamically allocating the per-CPU dstate bitmap. Reviewed-by: Stefan Hajnoczi Reviewed-by: Llu=C3=ADs Vilanova Signed-off-by: Daniel P. Berrange --- include/qom/cpu.h | 9 ++++++--- qom/cpu.c | 7 +++++-- trace/control.c | 5 +++++ trace/control.h | 7 +++++++ 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" =20 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; =20 - /* Used for events with 'vcpu' and *without* the 'disabled' properti= es */ - DECLARE_BITMAP(trace_dstate, TRACE_VCPU_EVENT_COUNT); + /* + * Used for events with 'vcpu' and *without* the 'disabled' properti= es. + * Dynamically allocated based on bitmap requried to hold up to + * trace_get_vcpu_event_count() entries. + */ + unsigned long *trace_dstate; =20 /* 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 484c493..40f2eb1 100644 --- a/qom/cpu.c +++ b/qom/cpu.c @@ -356,12 +356,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 =3D bitmap_new(trace_get_vcpu_event_count()); } =20 static void cpu_common_finalize(Object *obj) { - cpu_exec_exit(CPU(obj)); + CPUState *cpu =3D CPU(obj); + cpu_exec_exit(cpu); + g_free(cpu->trace_dstate); } =20 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) =20 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); =20 +/** + * trace_get_vcpu_event_count: + * + * Return the number of known vcpu-specific events + */ +uint32_t trace_get_vcpu_event_count(void); + =20 #include "trace/control-internal.h" =20 --=20 2.7.4