Skip to content

Commit c5b4409

Browse files
committed
Merge tag 'trace-v5.2-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
Pull tracing warning fix from Steven Rostedt: "Make the GCC 9 warning for sub struct memset go away. GCC 9 now warns about calling memset() on partial structures when it goes across multiple fields. This adds a helper for the place in tracing that does this type of clearing of a structure" * tag 'trace-v5.2-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: tracing: Silence GCC 9 array bounds warning
2 parents 862f0a3 + 0c97bf8 commit c5b4409

File tree

3 files changed

+20
-10
lines changed

3 files changed

+20
-10
lines changed

kernel/trace/trace.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8910,12 +8910,8 @@ void ftrace_dump(enum ftrace_dump_mode oops_dump_mode)
89108910

89118911
cnt++;
89128912

8913-
/* reset all but tr, trace, and overruns */
8914-
memset(&iter.seq, 0,
8915-
sizeof(struct trace_iterator) -
8916-
offsetof(struct trace_iterator, seq));
8913+
trace_iterator_reset(&iter);
89178914
iter.iter_flags |= TRACE_FILE_LAT_FMT;
8918-
iter.pos = -1;
89198915

89208916
if (trace_find_next_entry_inc(&iter) != NULL) {
89218917
int ret;

kernel/trace/trace.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1966,4 +1966,22 @@ static inline void tracer_hardirqs_off(unsigned long a0, unsigned long a1) { }
19661966

19671967
extern struct trace_iterator *tracepoint_print_iter;
19681968

1969+
/*
1970+
* Reset the state of the trace_iterator so that it can read consumed data.
1971+
* Normally, the trace_iterator is used for reading the data when it is not
1972+
* consumed, and must retain state.
1973+
*/
1974+
static __always_inline void trace_iterator_reset(struct trace_iterator *iter)
1975+
{
1976+
const size_t offset = offsetof(struct trace_iterator, seq);
1977+
1978+
/*
1979+
* Keep gcc from complaining about overwriting more than just one
1980+
* member in the structure.
1981+
*/
1982+
memset((char *)iter + offset, 0, sizeof(struct trace_iterator) - offset);
1983+
1984+
iter->pos = -1;
1985+
}
1986+
19691987
#endif /* _LINUX_KERNEL_TRACE_H */

kernel/trace/trace_kdb.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,8 @@ static void ftrace_dump_buf(int skip_entries, long cpu_file)
3737
if (skip_entries)
3838
kdb_printf("(skipping %d entries)\n", skip_entries);
3939

40-
/* reset all but tr, trace, and overruns */
41-
memset(&iter.seq, 0,
42-
sizeof(struct trace_iterator) -
43-
offsetof(struct trace_iterator, seq));
40+
trace_iterator_reset(&iter);
4441
iter.iter_flags |= TRACE_FILE_LAT_FMT;
45-
iter.pos = -1;
4642

4743
if (cpu_file == RING_BUFFER_ALL_CPUS) {
4844
for_each_tracing_cpu(cpu) {

0 commit comments

Comments
 (0)