From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.128.177 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793561296; b=1NvDmzN80zpoHt8gM/ky+1uL3abDBrhS4UEaRvVeNZbYrxSpYevnIMpYLgja5Y4qsm2b plnrvl0a3ai8OhlYnw0Od+KK8a45FAWcK7BySjqC3LKpAyFmiNfI052qGzzJf4NYBvkPk RVQOs8FZET2Tay4lKmmaH0x7MQE2fkcHRMiNPrR6cgTTN5XqaZn058IXhvM1GUEhIqQvx Nc7OCf23UEUHSj48FCYiKmuLVmE7ClhEHD5U8UI6SF5Fstm7tTet+OvGBLI6KCqdK0qdQ imzXXjdxIFNvZitVZlf9PChEMrJumyebHVDxN/8qH/o3zwldVCyMQ3QfAMKnZJmuTIQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793561296; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Gm-Message-State:X-Gm-Gg:X-Received:Received:From:Date:Subject: MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id: References:In-Reply-To:To:Cc:X-Mailer:X-Developer-Signature: X-Developer-Key; bh=oSjaN8gq+uvyeQwJlExslk3+33soV5Wz90d5smnAJWo=; b=zfKxFwxWcReZeprfaDxdncVY89WyxRupCT8muspcmfAaqNzhSIEOQ9Z0R0sSa2i/hqmv ++AiHpmMoPddX5LtO5kNqrhGMsHj/0QEF4l7/6VcIKV+U9NYMPMBb+yuu0ApVRLHQ4BMC Zbb4c9BHSsofrlt8N82wr0dqdLCiPTLZt52It7YeyR0ZD3BNVRCR4On79NTu/cPsMRDfN SU0wDlY1jtYCSwbbDD+UecoXrTIX6024h0Mc50QZEKzVa4LQNJKlPSSA73LnXntRQyQBz RwjUqxfuGafirHcEIEzG5OsX53a2HBTN5Hr9LEKvQ5rrWZqIRr5NHm+wX0A7DIRWFdQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20260707 header.b=FphcP7ut; arc=none smtp.remote-ip=209.85.128.177 Received: from mail-yw1-f177.google.com (mail-yw1-f177.google.com [209.85.128.177]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3A1C5606A32C for ; Sun, 1 Nov 2026 19:28:16 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 3A1C5606A32C Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20260707 header.b=FphcP7ut Received: by mail-yw1-f177.google.com with SMTP id 00721157ae682-8b0a28a720aso21156477b3.2 for ; Sun, 01 Nov 2026 11:28:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20260707; t=1793561295; x=1794166095; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=oSjaN8gq+uvyeQwJlExslk3+33soV5Wz90d5smnAJWo=; b=FphcP7utCPD+/CiHyl6RbV+MwLmrVwhNJCw5PYbZMe+An9k6KQv9iq1c1l3OTNtg/j gV+kb0Jb5HYkKeusXj6hfurRhT3rq/nIm0U8erqK62ypB8cFi5b2nBbJ4ju0T+0DCmyM EVxplqQbRGAnAN8KDCTxa4gWrBzVtov+gVL1TXGjAfbDgccTuCuu0qhQ7X0PgqODrMsb 4AZZ5Wm+AKLA4LOzsEE763WxgqZrXD0b8TTbBAM6BiMccm19b5wIIXjXzpnVqAbZp1YV vuL6nrqXTtcAvVBKdqhVQiMuzGcCOcZZhbo5wWHxSMEag4WyGnS0oGBueRNOSX+Ph5Yr zpkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793561295; x=1794166095; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=oSjaN8gq+uvyeQwJlExslk3+33soV5Wz90d5smnAJWo=; b=cCWyycVWh0fUHdhN25ZiK9sUuuHfjRKNUZep8UISNTRKqB48NlRk8QUIulbNl5m0Jm p6nM+KBedc1aYaO67P0VYVs2WzN6YKV9Jlihvnx4CZkll5Y4pBW8xj1nHqIy8u7gLHag Hk77CiTZznqhCf83xHhg0/QTzKXv2RPlZ4hfID7RCnzbfOeQ85U66l6SeVwNKGg9LE56 SWIoITRIod/Z1RmevWg2BzTbg0jMTkWwSiKYXVsnR4T6SvB7CqyZHM1+OC6lD5UOKp34 +Qk/Osu1lN8tLYdtBoUlikrVZNeGutc+feL0vsbyLcuxaCCXKrYUK82cMlF2oUE2Jva5 GIoA== X-Gm-Message-State: APuU4Z/RcLEDHFYQK7abWJ+RONQgvCA/KfpBH6DP4XhnWZwAIHEnamjM vAFGPijuolAndgJ64jjzMta2sxTNqDIbHMNOpslGLMxTlBf4s9bNp54e9vGwQhxD X-Gm-Gg: AYBFou2tDWF42nnbvpYrYCBL0iXyy9jsQE/h2XfPw80/w2w1btmBdTL86nV8c1Kql82 5jftWaiIKVOSWWjDbU9JWpD5X0imv0Futr+OgLVIXSkgAp4iOOGMh/4LP7w7VswqHqhSsGHrUFo p73pdEVhjfmrmSHtEfWZxCudICtGomuGXEOwliJDX4nJPGnUySyhh2F+RtlMnFO3bdgtbxuAS+e u9hgnopD5kd40G2tGuMKQxGBY1CuLih7eKlqrA83LuNzQv47qwNgmqBXS+SEnGyXX97GPUSDzjD r99azY0gegZtipsEXUYTsHROD66Kl0lak4ur/aMsk41JD3e1qoR9xEqgSHRPVpTY8ViESUSzmdC RZ20oykcQDzWFre603FSdh0QdixeCa42vxOD/8AGfrZYzQqWkcqCCsCCtInKHekkJXy0YKDxnpk /I57fq1IeUqIAkS4Qd4f61OD9zJjBdkWYpxFZTiy/bI0rkweMf6ggRXRZ0Dl29fPtjpE0trnbPW 7A7siFyMzjlYwl2rVFHbs0LqKyiQZCjTSuBsWy1RBwruSe6THcel0PAY3eL0pXc9F610GTi9yc/ P296IEUUGN2LKCudOFUEKuzbbK2XqTQDwlZBoiGMmaGZSb/7HLi2jV/ievw8PA9NEii1oIjgx3z MztISfOCaUg== X-Received: by 2002:a05:690e:43c3:b0:677:d87c:4277 with SMTP id 956f58d0204a3-67ba50f3afcmr3810702d50.97.1793561295090; Sun, 01 Nov 2026 11:28:15 -0800 (PST) Received: from localhost ([2600:1702:7a90:6f9f:8bc4:8aec:108d:7a04]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-67baf147246sm3725582d50.1.2026.11.01.11.28.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 Nov 2026 11:28:13 -0800 (PST) From: Matt Turner Date: Sun, 01 Nov 2026 14:28:07 -0500 Subject: [PATCH v3 4/7] alpha/perf: do not report user registers from the entry code X-Mailing-List: linux-alpha@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261101-alpha-profileme-v3-4-92d511b5a044@gmail.com> References: <20261101-alpha-profileme-v3-0-92d511b5a044@gmail.com> In-Reply-To: <20261101-alpha-profileme-v3-0-92d511b5a044@gmail.com> To: Richard Henderson , Magnus Lindholm , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Oleg Nesterov Cc: linux-alpha@vger.kernel.org, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Matt Turner , Peter Zijlstra , Ingo Molnar X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3729; i=mattst88@gmail.com; h=from:subject:message-id; bh=j745NTzeMTR18QqhA7qldpQHNflfi9v6N9g1RNlRzvQ=; b=owGbwMvMwCW25rVmCc8sv+mMp9WSGLKeTzq6Sl6wf26HPOuy6bzXHd/tkyo+EHgquN/4dgbXx etrG5qOd3xkYRDjYpgppsgSt16RZVbbjqU+p6V/wcxhZQIZIi3SwAAELAx8uYl5pUY6Rnqm2oZ6 hkCGjlE8RE6PQSOzuLg0tUg3raDIIS+/JLEkMz+vWC+/IDWvIL1ALy0zrSQjI7+oOBVohF5eaom pq6ObkaGBiaWjhZmThaOpibOzk6GTm6Ojs6uTkaW5iYGzpaOJq6U5AxenAMw1H/gYGd7PV7JjWs H7R3lnVdoMNTZlm/DZc8vvn/8x377pzI+F/bGMDCs2y6y8+d59Wvelf+ufMVVo/J6XLLKPVfHsk rnr5Y71ybEAAA== X-Developer-Key: i=mattst88@gmail.com; a=openpgp; fpr=3BB639E56F861FA2E86505690FDD682D974CA72A perf_get_regs_user() returns task_pt_regs() whenever a sample of a user task lands in the kernel. But exception entry runs with interrupts enabled, so the sample can land before the entry code has saved the user registers. Only the part PALcode pushed is valid then. An interrupt taken on the first instruction of entUna, say, pushes its own frame on top of PALcode's, which overlaps the rest of the user frame, so r7 and r8 read as the interrupt's r23 and r24. Report no user registers while the interrupted PC is in the entry code. Such a sample also gets no user stack dump. The range is all of the entry code from entInt to the end of the save in entSys, so it also drops the registers of samples that land after they were saved there. An interrupt that nests on one taken in the entry code still reads the incomplete frame, as its own PC has left the entry code. Fixes: 9280e99d87dd ("alpha: add HAVE_PERF_REGS and HAVE_PERF_USER_STACK_DUMP support") Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Matt Turner --- arch/alpha/include/asm/ptrace.h | 12 ++++++++++++ arch/alpha/kernel/entry.S | 8 ++++++++ arch/alpha/kernel/perf_regs.c | 13 +++++++++++++ 3 files changed, 33 insertions(+) diff --git a/arch/alpha/include/asm/ptrace.h b/arch/alpha/include/asm/ptrace.h index 45d1229344b6..1400ba3e7d43 100644 --- a/arch/alpha/include/asm/ptrace.h +++ b/arch/alpha/include/asm/ptrace.h @@ -14,6 +14,18 @@ #define task_pt_regs(task) \ ((struct pt_regs *) (task_stack_page(task) + 2*PAGE_SIZE) - 1) +/* + * Whether pc is in entry code that may not have completed the frame at + * task_pt_regs(). See entry.S. + */ +static inline bool in_entry_save_code(unsigned long pc) +{ + extern char __entry_save_start[], __entry_save_end[]; + + return pc >= (unsigned long)__entry_save_start && + pc < (unsigned long)__entry_save_end; +} + #define current_pt_regs() \ ((struct pt_regs *) ((char *)current_thread_info() + 2*PAGE_SIZE) - 1) diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S index 790389a15c3c..2de7cdd3a872 100644 --- a/arch/alpha/kernel/entry.S +++ b/arch/alpha/kernel/entry.S @@ -186,8 +186,14 @@ /* * Non-syscall kernel entry points. + * + * Between __entry_save_start and __entry_save_end the frame at task_pt_regs() + * may not be complete. perf uses these to avoid reading it. */ + .globl __entry_save_start +__entry_save_start: + CFI_START_OSF_FRAME entInt SAVE_ALL lda $8, 0x3fff @@ -473,6 +479,8 @@ CFI_END_OSF_FRAME entDbg .cfi_rel_offset $gp, 16 entSys: SAVE_ALL + .globl __entry_save_end +__entry_save_end: ldq $1, 0($sp) /* syscall nr from saved r0 */ stq $1, 8($sp) /* regs->r1 = shadow syscall nr */ diff --git a/arch/alpha/kernel/perf_regs.c b/arch/alpha/kernel/perf_regs.c index 33ea2e831ba0..894683851b30 100644 --- a/arch/alpha/kernel/perf_regs.c +++ b/arch/alpha/kernel/perf_regs.c @@ -59,6 +59,19 @@ u64 perf_reg_abi(struct task_struct *task) void perf_get_regs_user(struct perf_regs *regs_user, struct pt_regs *regs) { + /* + * Exception entry runs with interrupts enabled, so a sample can land + * before the entry code has saved the user registers. PALcode has + * pushed only its part of the frame, and the rest may hold an + * interrupt's frame. An interrupt that nests on top of one taken here + * is not caught, as its PC has left the entry code. + */ + if (in_entry_save_code(regs->pc)) { + regs_user->regs = NULL; + regs_user->abi = PERF_SAMPLE_REGS_ABI_NONE; + return; + } + regs_user->regs = task_pt_regs(current); regs_user->abi = perf_reg_abi(current); } -- 2.55.0