Linux Perf Users
 help / color / mirror / Atom feed
From: Ravi Bangoria <ravi.bangoria@amd.com>
To: "Mi, Dapeng" <dapeng1.mi@linux.intel.com>,
	Namhyung Kim <namhyung@kernel.org>
Cc: Gennady Kupava <gennady.kupava@gmail.com>,
	<linux-perf-users@vger.kernel.org>,
	Ravi Bangoria <ravi.bangoria@amd.com>
Subject: Re: [DISCUSSION] Three problems behind broken "perf --call-graph dwarf" on AMD: IP and stack dump mismatch, libdw fails on lld's layout, and the unwinder fallback never runs
Date: Thu, 3 Sep 2026 17:06:59 +0530	[thread overview]
Message-ID: <7b4cba95-dacc-4cf1-953f-c59e06e693d0@amd.com> (raw)
In-Reply-To: <c38b254f-21e5-4a02-8934-7a4da61e4571@linux.intel.com>

>>> This should resolve the DWARF unwinding issue with IBS PMUs:
>>>
>>> --- a/arch/x86/events/amd/ibs.c
>>> +++ b/arch/x86/events/amd/ibs.c
>>> @@ -1523,8 +1523,11 @@ static int perf_ibs_handle_irq(struct perf_ibs *perf_ibs, struct pt_regs *iregs)
>>>  			goto out;
>>>  		}
>>>  
>>> -		set_linear_ip(&regs, ibs_data.regs[1]);
>>> -		regs.flags |= PERF_EFLAGS_EXACT;
>>> +		if (event->attr.sample_type & PERF_SAMPLE_IP) {
>>> +			data.ip = ibs_data.regs[1];
>>> +			data.sample_flags |= PERF_SAMPLE_IP;
> 
> We may not set PERF_SAMPLE_IP here, otherwise the kernel address leakage
> check in perf_instruction_pointer() could be bypassed.

Yes. I realized this wouldn't be straightforward, since the privilege
level might change between when the HW captures the sample and when the
NMI is delivered. So, any perf code that depends on user_mode() (e.g.
perf_exclude_event(), _REGS_USER, _REGS_INTR, header->misc, etc.) may
regress with the above change. In addition, guest entry/exit occurring
between sample capture and NMI delivery further complicates the problem.

>> Right, that's what I thought.  And I believe we should do similar on
>> Intel and not update other registers.
> 
> For Intel PEBS, the call-chain would always use the interrupt regs instead
> of the PEBS regs, so there would be no issues for Intel PEBS.
> 
>     /*
>      * We must however always use iregs for the unwinder to stay sane; the
>      * record BP,SP,IP can point into thin air when the record is from a
>      * previous PMI context or an (I)RET happened between the record and
>      * PMI.
>      */
>     perf_sample_save_callchain(data, event, iregs);

This wouldn't take care of _STACK_USER, right?

Thanks,
Ravi

  reply	other threads:[~2026-09-03 11:37 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-21 21:49 [DISCUSSION] Three problems behind broken "perf --call-graph dwarf" on AMD: IP and stack dump mismatch, libdw fails on lld's layout, and the unwinder fallback never runs Gennady Kupava
2026-08-24 13:35 ` Ravi Bangoria
2026-08-25 18:05 ` Ian Rogers
2026-08-27 21:55 ` Namhyung Kim
2026-08-28 16:47   ` Namhyung Kim
2026-08-28 16:58   ` Namhyung Kim
2026-08-31  5:05     ` Ravi Bangoria
2026-09-01 15:19       ` Namhyung Kim
2026-09-03  8:39         ` Mi, Dapeng
2026-09-03 11:36           ` Ravi Bangoria [this message]
2026-09-03 11:59             ` Mi, Dapeng
2026-09-03 16:02               ` Ravi Bangoria
2026-09-04  0:22                 ` Mi, Dapeng
2026-09-05 10:14                   ` Gennady Kupava

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7b4cba95-dacc-4cf1-953f-c59e06e693d0@amd.com \
    --to=ravi.bangoria@amd.com \
    --cc=dapeng1.mi@linux.intel.com \
    --cc=gennady.kupava@gmail.com \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=namhyung@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox