Commit 153f9e74 authored by Josh Poimboeuf's avatar Josh Poimboeuf Committed by Peter Zijlstra
Browse files

perf: Have get_perf_callchain() return NULL if crosstask and user are set



get_perf_callchain() doesn't support cross-task unwinding for user space
stacks, have it return NULL if both the crosstask and user arguments are
set.

Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20250820180428.426423415@kernel.org
parent e649bcda
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -224,6 +224,10 @@ get_perf_callchain(struct pt_regs *regs, bool kernel, bool user,
	struct perf_callchain_entry_ctx ctx;
	int rctx, start_entry_idx;

	/* crosstask is not supported for user stacks */
	if (crosstask && user && !kernel)
		return NULL;

	entry = get_callchain_entry(&rctx);
	if (!entry)
		return NULL;
@@ -240,7 +244,7 @@ get_perf_callchain(struct pt_regs *regs, bool kernel, bool user,
		perf_callchain_kernel(&ctx, regs);
	}

	if (user) {
	if (user && !crosstask) {
		if (!user_mode(regs)) {
			if  (current->mm)
				regs = task_pt_regs(current);
@@ -249,9 +253,6 @@ get_perf_callchain(struct pt_regs *regs, bool kernel, bool user,
		}

		if (regs) {
			if (crosstask)
				goto exit_put;

			if (add_mark)
				perf_callchain_store_context(&ctx, PERF_CONTEXT_USER);

@@ -261,7 +262,6 @@ get_perf_callchain(struct pt_regs *regs, bool kernel, bool user,
		}
	}

exit_put:
	put_callchain_entry(rctx);

	return entry;