On Fri, Jul 26, 2019 at 12:32 PM Arnaldo Carvalho de Melo <[email protected]> wrote: > > Em Wed, Jul 24, 2019 at 04:45:00PM -0700, Numfor Mbiziwo-Tiapo escreveu: > > Our local MSAN (Memory Sanitizer) build of perf throws use of > > uninitialized value warnings in "tools/perf/bench/sched-messaging.c" > > when running perf bench. > > > > The first warning comes from the "ready" function where the "dummy" char > > is declared and then passed into "write" without being initialized. > > Initializing "dummy" to any character silences the warning. > > > > The second warning comes from the "sender" function where a "write" call > > is made to write the contents from the "data" char array when it has not > > yet been initialized. Calling memset on "data" silences the warning. > > So, this is just to silence MSAN, as it doesn't matter what is sent, > whatever values are in those variables is ok, as it will not be used, > right?
That's right. Thanks, Ian Rogers > - Arnaldo > > > To reproduce this warning, build perf by running: > > make -C tools/perf CLANG=1 CC=clang EXTRA_CFLAGS="-fsanitize=memory\ > > -fsanitize-memory-track-origins" > > > > (Additionally, llvm might have to be installed and clang might have to > > be specified as the compiler - export CC=/usr/bin/clang) > > > > then running: tools/perf/perf bench sched all > > > > Please see the cover letter for why false positive warnings may be > > generated. > > > > Signed-off-by: Numfor Mbiziwo-Tiapo <[email protected]> > > --- > > tools/perf/bench/sched-messaging.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/tools/perf/bench/sched-messaging.c > > b/tools/perf/bench/sched-messaging.c > > index f9d7641ae833..d22d7b7b591d 100644 > > --- a/tools/perf/bench/sched-messaging.c > > +++ b/tools/perf/bench/sched-messaging.c > > @@ -69,7 +69,7 @@ static void fdpair(int fds[2]) > > /* Block until we're ready to go */ > > static void ready(int ready_out, int wakefd) > > { > > - char dummy; > > + char dummy = 'N'; > > struct pollfd pollfd = { .fd = wakefd, .events = POLLIN }; > > > > /* Tell them we're ready. */ > > @@ -87,6 +87,7 @@ static void *sender(struct sender_context *ctx) > > char data[DATASIZE]; > > unsigned int i, j; > > > > + memset(data, 'N', DATASIZE); > > ready(ctx->ready_out, ctx->wakefd); > > > > /* Now pump to every receiver. */ > > -- > > 2.22.0.657.g960e92d24f-goog > > -- > > - Arnaldo

