From: Ian Rogers Date: Sat, 8 Apr 2023 05:52:07 +0000 (-0700) Subject: perf lock contention: Support pre-5.14 kernels X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=0c1228486befa3d6e943488406f1e3c05679721b;p=linux.git perf lock contention: Support pre-5.14 kernels 'struct rq's member '__lock' was renamed from 'lock' in 5.14. Signed-off-by: Ian Rogers Acked-by: Namhyung Kim Cc: Adrian Hunter Cc: Alexander Shishkin Cc: Ingo Molnar Cc: Jiri Olsa Cc: Mark Rutland Cc: Peter Zijlstra Cc: bpf@vger.kernel.org Link: https://lore.kernel.org/r/20230408055208.1283832-1-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo --- diff --git a/tools/perf/util/bpf_skel/lock_contention.bpf.c b/tools/perf/util/bpf_skel/lock_contention.bpf.c index 23f6e63544ed4..8911e2a077d8c 100644 --- a/tools/perf/util/bpf_skel/lock_contention.bpf.c +++ b/tools/perf/util/bpf_skel/lock_contention.bpf.c @@ -418,6 +418,14 @@ int contention_end(u64 *ctx) extern struct rq runqueues __ksym; +struct rq__old { + raw_spinlock_t lock; +} __attribute__((preserve_access_index)); + +struct rq__new { + raw_spinlock_t __lock; +} __attribute__((preserve_access_index)); + SEC("raw_tp/bpf_test_finish") int BPF_PROG(collect_lock_syms) { @@ -426,11 +434,16 @@ int BPF_PROG(collect_lock_syms) for (int i = 0; i < MAX_CPUS; i++) { struct rq *rq = bpf_per_cpu_ptr(&runqueues, i); + struct rq__new *rq_new = (void *)rq; + struct rq__old *rq_old = (void *)rq; if (rq == NULL) break; - lock_addr = (__u64)&rq->__lock; + if (bpf_core_field_exists(rq_new->__lock)) + lock_addr = (__u64)&rq_new->__lock; + else + lock_addr = (__u64)&rq_old->lock; lock_flag = LOCK_CLASS_RQLOCK; bpf_map_update_elem(&lock_syms, &lock_addr, &lock_flag, BPF_ANY); }