Skip to content

Commit

Permalink
perf_counter: Work around gcc warning by initializing tracepoint reco…
Browse files Browse the repository at this point in the history
…rd 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>
  • Loading branch information
Frederic Weisbecker authored and Ingo Molnar committed Aug 9, 2009
1 parent 2544603 commit 10b8e30
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions kernel/perf_counter.c
Original file line number Diff line number Diff line change
Expand Up @@ -2646,7 +2646,7 @@ static void perf_counter_output(struct perf_counter *counter, int nmi,
u64 counter;
} group_entry;
struct perf_callchain_entry *callchain = NULL;
struct perf_tracepoint_record *tp;
struct perf_tracepoint_record *tp = NULL;
int callchain_size = 0;
u64 time;
struct {
Expand Down Expand Up @@ -2717,7 +2717,8 @@ static void perf_counter_output(struct perf_counter *counter, int nmi,

if (sample_type & PERF_SAMPLE_TP_RECORD) {
tp = data->private;
header.size += tp->size;
if (tp)
header.size += tp->size;
}

ret = perf_output_begin(&handle, counter, header.size, nmi, 1);
Expand Down Expand Up @@ -2783,7 +2784,7 @@ static void perf_counter_output(struct perf_counter *counter, int nmi,
}
}

if (sample_type & PERF_SAMPLE_TP_RECORD)
if ((sample_type & PERF_SAMPLE_TP_RECORD) && tp)
perf_output_copy(&handle, tp->record, tp->size);

perf_output_end(&handle);
Expand Down

0 comments on commit 10b8e30

Please sign in to comment.