[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v5 14/20] trace: dynamically allocate trace_dsta
From: |
Lluís Vilanova |
Subject: |
Re: [Qemu-devel] [PATCH v5 14/20] trace: dynamically allocate trace_dstate in CPUState |
Date: |
Fri, 30 Sep 2016 16:17:37 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Daniel P Berrange writes:
> 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.
> Signed-off-by: Daniel P. Berrange <address@hidden>
Besides the comments below:
Reviewed-by: Lluís Vilanova <address@hidden>
> ---
> include/qom/cpu.h | 9 ++++++---
> qom/cpu.c | 8 ++++++--
> trace/control.c | 5 +++++
> trace/control.h | 7 +++++++
> 4 files changed, 24 insertions(+), 5 deletions(-)
> diff --git a/include/qom/cpu.h b/include/qom/cpu.h
> index ce0c406..bbffde7 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);
> @@ -350,8 +349,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
Nitpick: phrase must end with a dot.
> + * 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 f783b5a..09180f0 100644
> --- a/qom/cpu.c
> +++ b/qom/cpu.c
> @@ -29,6 +29,7 @@
> #include "qemu/error-report.h"
> #include "sysemu/sysemu.h"
> #include "hw/qdev-properties.h"
> +#include "trace/control.h"
> bool cpu_exists(int64_t id)
> {
> @@ -350,12 +351,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 7be654d..9704f4d 100644
> --- a/trace/control.c
> +++ b/trace/control.c
> @@ -310,3 +310,8 @@ void trace_init_vcpu_events(void)
> }
> }
> }
> +
> +uint32_t trace_get_vcpu_event_count(void)
> +{
> + return TRACE_VCPU_EVENT_COUNT;
> +}
> diff --git a/trace/control.h b/trace/control.h
> index f241c7f..7a068ec 100644
> --- a/trace/control.h
> +++ b/trace/control.h
> @@ -236,6 +236,13 @@ char *trace_opt_parse(const char *optarg);
> void trace_init_vcpu_events(void);
> +/**
> + * 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"
Nitpick: I tried to leave 2 empty lines between code and inclusion of "internal"
headers, and also tried to group related functions (1 empty line inside the
group, 2 empty lines between groups).
> #endif /* TRACE__CONTROL_H */
> --
> 2.7.4
Thanks,
Lluis
- [Qemu-devel] [PATCH v5 05/20] trace: remove some now unused functions, (continued)
- [Qemu-devel] [PATCH v5 05/20] trace: remove some now unused functions, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 03/20] trace: add trace event iterator APIs, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 08/20] trace: break circular dependency in event-internal.h, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 06/20] trace: remove global 'uint16 dstate[]' array, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 12/20] trace: don't abort qemu if ftrace can't be initialized, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 07/20] trace: remove duplicate control.h includes in generated-tracers.h, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 09/20] trace: give each trace event a named TraceEvent struct, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 11/20] trace: emit name <-> ID mapping in simpletrace header, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 14/20] trace: dynamically allocate trace_dstate in CPUState, Daniel P. Berrange, 2016/09/28
- Re: [Qemu-devel] [PATCH v5 14/20] trace: dynamically allocate trace_dstate in CPUState,
Lluís Vilanova <=
- [Qemu-devel] [PATCH v5 10/20] trace: remove the TraceEventID and TraceEventVCPUID enums, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 13/20] trace: provide mechanism for registering trace events, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 15/20] trace: dynamically allocate event IDs at runtime, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 16/20] trace: get rid of generated-events.h/generated-events.c, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 18/20] trace: push reading of events up a level to tracetool main, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 17/20] trace: rename _read_events to read_events, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 19/20] trace: pass trace-events to tracetool as a positional param, Daniel P. Berrange, 2016/09/28
- [Qemu-devel] [PATCH v5 20/20] trace: introduce a formal group name for trace events, Daniel P. Berrange, 2016/09/28