Skip to content

Commit 0df14c1

Browse files
namhyungacmel
authored andcommitted
perf lock contention: Reject more than 10ms delays for safety
Delaying kernel operations can be dangerous and the kernel may kill (non-sleepable) BPF programs running for long in the future. Limit the max delay to 10ms and update the document about it. $ sudo ./perf lock con -abl -J 100000us@cgroup_mutex true lock delay is too long: 100000us (> 10ms) Usage: perf lock contention [<options>] -J, --inject-delay <TIME@FUNC> Inject delays to specific locks Suggested-by: Alexei Starovoitov <ast@kernel.org> 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> Link: https://lore.kernel.org/r/20250515181042.555189-1-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
1 parent 8c56bfe commit 0df14c1

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

tools/perf/Documentation/perf-lock.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,12 @@ CONTENTION OPTIONS
224224
only with -b/--use-bpf.
225225

226226
The 'time' is specified in nsec but it can have a unit suffix. Available
227-
units are "ms" and "us". Note that it will busy-wait after it gets the
228-
lock. Please use it at your own risk.
227+
units are "ms", "us" and "ns". Currently it accepts up to 10ms of delays
228+
for safety reasons.
229+
230+
Note that it will busy-wait after it gets the lock. Delaying locks can
231+
have significant consequences including potential kernel crashes. Please
232+
use it at your own risk.
229233

230234

231235
SEE ALSO

tools/perf/builtin-lock.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2537,6 +2537,11 @@ static bool add_lock_delay(char *spec)
25372537
return false;
25382538
}
25392539

2540+
if (duration > 10 * 1000 * 1000) {
2541+
pr_err("lock delay is too long: %s (> 10ms)\n", spec);
2542+
return false;
2543+
}
2544+
25402545
tmp = realloc(delays, (nr_delays + 1) * sizeof(*delays));
25412546
if (tmp == NULL) {
25422547
pr_err("Memory allocation failure\n");

0 commit comments

Comments
 (0)