From patchwork Thu Nov 9 00:41:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Poimboeuf X-Patchwork-Id: 163191 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b129:0:b0:403:3b70:6f57 with SMTP id q9csp138636vqs; Wed, 8 Nov 2023 16:44:51 -0800 (PST) X-Google-Smtp-Source: AGHT+IHVxw6Sx1Y2dJDJjEsuZaAH85GqAxa75REP4X2AR+QyZ7fEXFGY9liK/OARz87se9/m4MPo X-Received: by 2002:a05:6a21:7182:b0:16b:f8f0:1c0c with SMTP id wq2-20020a056a21718200b0016bf8f01c0cmr4605445pzb.0.1699490691578; Wed, 08 Nov 2023 16:44:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699490691; cv=none; d=google.com; s=arc-20160816; b=X+1HY8Pgg2yilHKkMaOIHSS2RLWgxffrC8p7j92WsHRNUFinAB45+awRBXF1My50gJ 3Yz0IpRIjqRhq9nP6BmP5bqoT4+1IkH9zMSQNDVxdCawjXJlImBSvIdb/ZQXfGQglWvi iepANQMNrcodTXq8uGBEbC6cEd1wJ48NugtvIIrsgOZlmLEbOX8WSFu/OJwVYlOpoC/E DQOlF6mX6izcW2DNU+piq3oTuLjGwdfRAUY+s0X8z9C6p6WXENLjUCsNOUAyRtLlnTJZ mvQcDHwhfAhvdZzvpln0h7TL4bgL6zOVNLveLS1BIuS+KotHfu/1U0C2PDm3VrhMDVpi yWTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=uOVjEG6xJUd8llunnAXn2ILQzNJRIn4JCnTKRLDCsUk=; fh=3ahOA1+93SqEqAeT96I/cgRVlate7pzd5ZZzl/6KbbU=; b=B0idI8QZpv6c2wEamz61SpwvB1PBMW29kXXbu2TVyyMGG8kRup9jjpxVNuw30bWl/u nkDGlFajQGHG2PH7X8NQ3o6wEmo9EboEqdBXMlXUM1MGBs0hzAXiP7utoa3Vtagf1ZM3 89S/GoCjaUxXanVfrD+f/o0d+NEqLRWXZyvECULgm4UK3uyWzH6gSStC7yhdmmVPPZUn YSl20wPCc6g8nCRMCOg6VySf1eLu9UOqiavpNhqDupg+JsU9lPI6PZpS/fBvRKVuULOg 85dV43PIZW7+N9iOhwkugf3DOpQQ9YYbI9FzQfialfkUm8in+Aaq8TJUBRHE5Z4JrQb7 Jlbg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=lXp+s9E0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from fry.vger.email (fry.vger.email. [2620:137:e000::3:8]) by mx.google.com with ESMTPS id g9-20020a63dd49000000b005bd0f2f41ddsi5930971pgj.206.2023.11.08.16.44.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Nov 2023 16:44:51 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) client-ip=2620:137:e000::3:8; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=lXp+s9E0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 313AD82D87B1; Wed, 8 Nov 2023 16:44:47 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233167AbjKIAoR (ORCPT + 32 others); Wed, 8 Nov 2023 19:44:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58334 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232234AbjKIAny (ORCPT ); Wed, 8 Nov 2023 19:43:54 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C6ED6269E; Wed, 8 Nov 2023 16:43:44 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D3A3BC433AD; Thu, 9 Nov 2023 00:43:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1699490624; bh=f/u46cSAc9qsUaWdoxS6P4+cNiKWEhTEIbvF7580Ups=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lXp+s9E0fNS9MJQQqIe6YpNebFG18Lo8YkTcYXLLlRVDororUiczYubXEBB5TMmxZ igB/cg7yUP7U6IN88bh4PrX4H5zCOHAVoE4csA+6C7pXpWLk0XLX5ygnwFvQveZwUL uh7nQskU7YkdxiSGMcaCXV/XBEAy2qYkRsmtqFbSFFoirqMhOCdCalk+CWsIHRp0UQ ykKxHb9W2V3AMbCt5JxBSFUtXSNRT+GYwlmfzEQSjl7E/xGd/G4uEbzT1zz9mRaAx8 wcDfJHLM7X4hNHTTsFpVfdzrHP6PKko7wdXFtDqPbg0mF/gKUuHEP3+8eo+DYt1C/t 4ObatLhGGLFkw== From: Josh Poimboeuf To: Peter Zijlstra , Steven Rostedt , Ingo Molnar , Arnaldo Carvalho de Melo Cc: linux-kernel@vger.kernel.org, x86@kernel.org, Indu Bhagat , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , linux-perf-users@vger.kernel.org, Mark Brown , linux-toolchains@vger.kernel.org Subject: [PATCH RFC 08/10] perf/x86: Use user_unwind interface Date: Wed, 8 Nov 2023 16:41:13 -0800 Message-ID: X-Mailer: git-send-email 2.41.0 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Wed, 08 Nov 2023 16:44:47 -0800 (PST) X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782045151130176755 X-GMAIL-MSGID: 1782045151130176755 Simplify __perf_callchain_user() and prepare for sframe user space unwinding by switching to the generic user unwind interface. Signed-off-by: Josh Poimboeuf --- arch/x86/events/core.c | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c index ae264437f794..5c41a11f058f 100644 --- a/arch/x86/events/core.c +++ b/arch/x86/events/core.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -2856,8 +2857,7 @@ static inline int __perf_callchain_user32(struct pt_regs *regs, void __perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs, bool atomic) { - struct stack_frame frame; - const struct stack_frame __user *fp; + struct user_unwind_state state; if (perf_guest_state()) { /* TODO: We don't support guest os callchain now */ @@ -2870,8 +2870,6 @@ void __perf_callchain_user(struct perf_callchain_entry_ctx *entry, if (regs->flags & (X86_VM_MASK | PERF_EFLAGS_VM)) return; - fp = (void __user *)regs->bp; - perf_callchain_store(entry, regs->ip); if (atomic && !nmi_uaccess_okay()) @@ -2883,17 +2881,9 @@ void __perf_callchain_user(struct perf_callchain_entry_ctx *entry, if (__perf_callchain_user32(regs, entry)) goto done; - while (entry->nr < entry->max_stack) { - if (!valid_user_frame(fp, sizeof(frame))) - break; - - if (__get_user(frame.next_frame, &fp->next_frame)) - break; - if (__get_user(frame.return_address, &fp->return_address)) - break; - - perf_callchain_store(entry, frame.return_address); - fp = (void __user *)frame.next_frame; + for_each_user_frame(state, USER_UNWIND_TYPE_AUTO) { + if (perf_callchain_store(entry, state.ip)) + goto done; } done: if (atomic)