diff options
author | Frederic Weisbecker <fweisbec@gmail.com> | 2009-08-07 22:26:35 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-08-09 06:54:44 -0400 |
commit | 10b8e3066066708f304e0fc5cfe658e05abf943d (patch) | |
tree | 1ccebafe8ae44f6f032f993c63eb58a6c2aadea4 /kernel | |
parent | 25446036cbfc2c89faacdb4fb4603943d2197dc6 (diff) |
perf_counter: Work around gcc warning by initializing tracepoint record unconditionally
Despite that the tracepoint record is always present when the
PERF_SAMPLE_TP_RECORD flag is set, gcc raises a warning,
thinking it might not be initialized:
kernel/perf_counter.c: In function ‘perf_counter_output’:
kernel/perf_counter.c:2650: warning: ‘tp’ may be used uninitialized in this function
Then, initialize it to NULL and always check if it's not NULL
before dereference it.
Reported-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
LKML-Reference: <1249698400-5441-2-git-send-email-fweisbec@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/perf_counter.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/kernel/perf_counter.c b/kernel/perf_counter.c index 615440ab9295..117622cb73a3 100644 --- a/kernel/perf_counter.c +++ b/kernel/perf_counter.c | |||
@@ -2646,7 +2646,7 @@ static void perf_counter_output(struct perf_counter *counter, int nmi, | |||
2646 | u64 counter; | 2646 | u64 counter; |
2647 | } group_entry; | 2647 | } group_entry; |
2648 | struct perf_callchain_entry *callchain = NULL; | 2648 | struct perf_callchain_entry *callchain = NULL; |
2649 | struct perf_tracepoint_record *tp; | 2649 | struct perf_tracepoint_record *tp = NULL; |
2650 | int callchain_size = 0; | 2650 | int callchain_size = 0; |
2651 | u64 time; | 2651 | u64 time; |
2652 | struct { | 2652 | struct { |
@@ -2717,7 +2717,8 @@ static void perf_counter_output(struct perf_counter *counter, int nmi, | |||
2717 | 2717 | ||
2718 | if (sample_type & PERF_SAMPLE_TP_RECORD) { | 2718 | if (sample_type & PERF_SAMPLE_TP_RECORD) { |
2719 | tp = data->private; | 2719 | tp = data->private; |
2720 | header.size += tp->size; | 2720 | if (tp) |
2721 | header.size += tp->size; | ||
2721 | } | 2722 | } |
2722 | 2723 | ||
2723 | ret = perf_output_begin(&handle, counter, header.size, nmi, 1); | 2724 | ret = perf_output_begin(&handle, counter, header.size, nmi, 1); |
@@ -2783,7 +2784,7 @@ static void perf_counter_output(struct perf_counter *counter, int nmi, | |||
2783 | } | 2784 | } |
2784 | } | 2785 | } |
2785 | 2786 | ||
2786 | if (sample_type & PERF_SAMPLE_TP_RECORD) | 2787 | if ((sample_type & PERF_SAMPLE_TP_RECORD) && tp) |
2787 | perf_output_copy(&handle, tp->record, tp->size); | 2788 | perf_output_copy(&handle, tp->record, tp->size); |
2788 | 2789 | ||
2789 | perf_output_end(&handle); | 2790 | perf_output_end(&handle); |