1

perf lock contention: Handle error in a single place

It has some duplicate codes to do the same job.  Let's add a label and
goto there to handle errors in a single place.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Song Liu <song@kernel.org>
Cc: bpf@vger.kernel.org
Link: https://lore.kernel.org/r/20240830065150.1758962-1-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Namhyung Kim 2024-08-29 23:51:48 -07:00 committed by Arnaldo Carvalho de Melo
parent ccb9004656
commit 10d6c57c82

View File

@ -439,11 +439,8 @@ int contention_end(u64 *ctx)
duration = bpf_ktime_get_ns() - pelem->timestamp; duration = bpf_ktime_get_ns() - pelem->timestamp;
if ((__s64)duration < 0) { if ((__s64)duration < 0) {
pelem->lock = 0;
if (need_delete)
bpf_map_delete_elem(&tstamp, &pid);
__sync_fetch_and_add(&time_fail, 1); __sync_fetch_and_add(&time_fail, 1);
return 0; goto out;
} }
switch (aggr_mode) { switch (aggr_mode) {
@ -477,11 +474,8 @@ int contention_end(u64 *ctx)
data = bpf_map_lookup_elem(&lock_stat, &key); data = bpf_map_lookup_elem(&lock_stat, &key);
if (!data) { if (!data) {
if (data_map_full) { if (data_map_full) {
pelem->lock = 0;
if (need_delete)
bpf_map_delete_elem(&tstamp, &pid);
__sync_fetch_and_add(&data_fail, 1); __sync_fetch_and_add(&data_fail, 1);
return 0; goto out;
} }
struct contention_data first = { struct contention_data first = {
@ -502,10 +496,7 @@ int contention_end(u64 *ctx)
data_map_full = 1; data_map_full = 1;
__sync_fetch_and_add(&data_fail, 1); __sync_fetch_and_add(&data_fail, 1);
} }
pelem->lock = 0; goto out;
if (need_delete)
bpf_map_delete_elem(&tstamp, &pid);
return 0;
} }
__sync_fetch_and_add(&data->total_time, duration); __sync_fetch_and_add(&data->total_time, duration);
@ -517,6 +508,7 @@ int contention_end(u64 *ctx)
if (data->min_time > duration) if (data->min_time > duration)
data->min_time = duration; data->min_time = duration;
out:
pelem->lock = 0; pelem->lock = 0;
if (need_delete) if (need_delete)
bpf_map_delete_elem(&tstamp, &pid); bpf_map_delete_elem(&tstamp, &pid);