Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3311337pxf; Mon, 15 Mar 2021 06:55:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyG2XA7/ysfZH6i00DKakDjhk1OrpEwUy/h2iXOiTz9eWxU2S0mAtoln00EJ+X2Q5vrUylD X-Received: by 2002:a17:906:1fd6:: with SMTP id e22mr24330733ejt.481.1615816553765; Mon, 15 Mar 2021 06:55:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1615816553; cv=none; d=google.com; s=arc-20160816; b=qfnftHmMMJ0vN9kVYoJV4b3uoxqvLfW+P6zreqxREncYxz582H5aYu1Je1+Kawqw73 l98GABNhamxMunhL2qbWcYTFcTkpw9htZv9tUBbQE0Lv5rrGSO3Hc/lWjbCIpsnTSPWz NKsuscJqcH90JjUrKKXBrpC6vf0CxaB3c/LB++rTMmkdGJm05JO0OEtoR0p/eaILTkTN Zf/JydlZ8c6gVQ0U3EfjPS1VnbPToMdL/8hF4ArWiEwTBNp0X8WCkYpoZ9IozR6+/DEw Mshc8Cgllm6Ixp/OA/aByGzk6LSw9uhWqwwsfNuhT4hF7468gv6GCchi4/yvh+tAB1mq NelA== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=orzmtN7sMoIXxJotnLt2iw9S4mPk9Mie1Mop2vluAog=; b=LJRpTiquoyzLr4gbQ5H3ZqrzrmrLShbBwh4csRpBkA9U2ncm7ruvUHNptzTHu42qyh kWIVhw/1wRm5/sSSkgg951oAY5Vv8FxOje77qUAPBZqkn0UqC1gnHOG/l7es1i9rjefZ LlQ8QptbtQiGmx1W1ZgNRSX8wWjuFFzvydWkaSSouhTJu2E+F7Qb+m+vje5iqehW+aQN 9+0GTAMtGzODc/Y5xDxtj3rmkCQUOkHEX5zhFUzX4C/dciE48SlJ1ma5cJnWqxLkzeB1 j5zCH+6Fui67kcIJtSZDuPSUxEJHlWK6WMJBh2KkPh42p/6GC60+mlRG5aSRROaMfa77 QChA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Lau1WZOL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id pk25si11048751ejb.402.2021.03.15.06.55.31; Mon, 15 Mar 2021 06:55:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Lau1WZOL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231420AbhCONyY (ORCPT + 99 others); Mon, 15 Mar 2021 09:54:24 -0400 Received: from mail.kernel.org ([198.145.29.99]:55806 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230176AbhCONxS (ORCPT ); Mon, 15 Mar 2021 09:53:18 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id EE93264EB6; Mon, 15 Mar 2021 13:53:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1615816398; bh=S5XiGYEdYWex8KJD0TxuldqiutPHm2atiw9CRDWoP1c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Lau1WZOL4R9VMMCkrgajL72S06iDupsf6KArGI+yX6Qy5i7y9vjmOYQjKQ5tQe857 cSk2RL5QVgu+/6pBDdPcSXATLzx+KpTA+F9sAq/9mWOoKG5ftcdB1t60GmNpWt7UkB PFUG5VK3f68vFVWe50JacVOycJpXrWzMEFO6HMxU= From: gregkh@linuxfoundation.org To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Michael Ellerman , Athira Rajeev , Sasha Levin Subject: [PATCH 4.4 21/75] powerpc/perf: Record counter overflow always if SAMPLE_IP is unset Date: Mon, 15 Mar 2021 14:51:35 +0100 Message-Id: <20210315135208.944227908@linuxfoundation.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210315135208.252034256@linuxfoundation.org> References: <20210315135208.252034256@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Greg Kroah-Hartman From: Athira Rajeev [ Upstream commit d137845c973147a22622cc76c7b0bc16f6206323 ] While sampling for marked events, currently we record the sample only if the SIAR valid bit of Sampled Instruction Event Register (SIER) is set. SIAR_VALID bit is used for fetching the instruction address from Sampled Instruction Address Register(SIAR). But there are some usecases, where the user is interested only in the PMU stats at each counter overflow and the exact IP of the overflow event is not required. Dropping SIAR invalid samples will fail to record some of the counter overflows in such cases. Example of such usecase is dumping the PMU stats (event counts) after some regular amount of instructions/events from the userspace (ex: via ptrace). Here counter overflow is indicated to userspace via signal handler, and captured by monitoring and enabling I/O signaling on the event file descriptor. In these cases, we expect to get sample/overflow indication after each specified sample_period. Perf event attribute will not have PERF_SAMPLE_IP set in the sample_type if exact IP of the overflow event is not requested. So while profiling if SAMPLE_IP is not set, just record the counter overflow irrespective of SIAR_VALID check. Suggested-by: Michael Ellerman Signed-off-by: Athira Rajeev [mpe: Reflow comment and if formatting] Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/1612516492-1428-1-git-send-email-atrajeev@linux.vnet.ibm.com Signed-off-by: Sasha Levin --- arch/powerpc/perf/core-book3s.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c index e593e7f856ed..7a80e1cff6e2 100644 --- a/arch/powerpc/perf/core-book3s.c +++ b/arch/powerpc/perf/core-book3s.c @@ -2008,7 +2008,17 @@ static void record_and_restart(struct perf_event *event, unsigned long val, left += period; if (left <= 0) left = period; - record = siar_valid(regs); + + /* + * If address is not requested in the sample via + * PERF_SAMPLE_IP, just record that sample irrespective + * of SIAR valid check. + */ + if (event->attr.sample_type & PERF_SAMPLE_IP) + record = siar_valid(regs); + else + record = 1; + event->hw.last_period = event->hw.sample_period; } if (left < 0x80000000LL) @@ -2026,9 +2036,10 @@ static void record_and_restart(struct perf_event *event, unsigned long val, * MMCR2. Check attr.exclude_kernel and address to drop the sample in * these cases. */ - if (event->attr.exclude_kernel && record) - if (is_kernel_addr(mfspr(SPRN_SIAR))) - record = 0; + if (event->attr.exclude_kernel && + (event->attr.sample_type & PERF_SAMPLE_IP) && + is_kernel_addr(mfspr(SPRN_SIAR))) + record = 0; /* * Finally record data if requested. -- 2.30.1