On Wed, Sep 30, 2020 at 08:20:58AM -0700, Song Liu wrote: > diff --git a/tools/testing/selftests/bpf/progs/test_pe_preserve_elems.c b/tools/testing/selftests/bpf/progs/test_pe_preserve_elems.c > new file mode 100644 > index 0000000000000..dc77e406de41f > --- /dev/null > +++ b/tools/testing/selftests/bpf/progs/test_pe_preserve_elems.c > @@ -0,0 +1,44 @@ > +// SPDX-License-Identifier: GPL-2.0 > +// Copyright (c) 2020 Facebook > +#include "vmlinux.h" Does it actually need vmlinux.h ? Just checking to make sure it compiles on older kernels. > +#include <bpf/bpf_helpers.h> > +#include <bpf/bpf_tracing.h> > + > +struct { > + __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY); > + __uint(max_entries, 1); > + __uint(key_size, sizeof(int)); > + __uint(value_size, sizeof(int)); > +} array_1 SEC(".maps"); > + > +struct { > + __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY); > + __uint(max_entries, 1); > + __uint(key_size, sizeof(int)); > + __uint(value_size, sizeof(int)); > + __uint(map_flags, BPF_F_PRESERVE_ELEMS); > +} array_2 SEC(".maps"); > + > +SEC("raw_tp/sched_switch") > +int BPF_PROG(read_array_1) > +{ > + struct bpf_perf_event_value val; > + long ret; > + > + ret = bpf_perf_event_read_value(&array_1, 0, &val, sizeof(val)); > + bpf_printk("read_array_1 returns %ld", ret); > + return ret; > +} > + > +SEC("raw_tp/task_rename") > +int BPF_PROG(read_array_2) > +{ > + struct bpf_perf_event_value val; > + long ret; > + > + ret = bpf_perf_event_read_value(&array_2, 0, &val, sizeof(val)); > + bpf_printk("read_array_2 returns %ld", ret); Please remove printk from the tests. It only spams the trace_pipe. > + return ret; The return code is already checked as far as I can see. That's enough to pass/fail the test, right?