Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3311778pxf; Mon, 15 Mar 2021 06:56:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyJP24kpCCbLKtFy4vBo/QePVTqzyWPIQNnqdfuWnm49hg4lwZyy6HfTRJ7i96vAShK91Ao X-Received: by 2002:a05:6402:11c9:: with SMTP id j9mr30082857edw.348.1615816593630; Mon, 15 Mar 2021 06:56:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1615816593; cv=none; d=google.com; s=arc-20160816; b=Ne+sitVtdO/U/6AFLgkhYIj5pivy02Z75yb88uKdOJFC9QyFvgwkvpxM6mC2Cj2yMW l20IRU/RpQImfIqyTl7lcaNAXkAmayYQZNHCoeMXB9aDuFUMMUiVXfuj8WO+tHvGB+G2 5KtNk1PTbAO5NxeB+rmAxmT2p0f8kSzCLOTMaqMd7oQYuLCm81mYQlVhjp+As0Cm1XT2 WwFXXOfno2K2RGDqkw+j+m/q/6I6PcZMB36WMWxe1B3WfVg5RTuyDGZJQcdUtgBSCB2A UPKSxwpgrKQXQvUBkm2Bnus0XozGzUpFu7ZU0YFIltVXyKgAlFsp1VBruNpRgsAOE/CX Xd7A== 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=a1Fvfcnm8whcnYh9H/ltYJ5xeaJJrr3Y9NA+xqL1TLU=; b=CzBKxIpUP/xhGHYjEh7PJh/ewaeGAkfnEZRL/GGaQJfWQxoAAVnzX+pH0NeZjzOTNk AdyPj4kUuSrD+VIPT9pjvbbT/LeGWOhkYQf2L3JVog2zQyAzI7ixR0efV1vjMJqNY6nB F2ghzWy2hi2Oeu4KMdmo7DWhWFbVM6f4FazPvm1wQg1sUW2xTn16XrWKAJdlvNwoazhN 4niXJbXdt4ebfCuEIMp7CSfFD03RHFgW1BvaZ9mmLF6s9P2sfcWWc3JDj9ntFzX9bQmU PjpCuwI9O4yrFy/01kV8S8j5aRVhWDJC4uMmXummPPUmcQIGwaXjt92lzIQCgUGzI572 +FCQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="FH/mga2N"; 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 r16si11073354edw.458.2021.03.15.06.56.11; Mon, 15 Mar 2021 06:56:33 -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="FH/mga2N"; 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 S231521AbhCONyv (ORCPT + 99 others); Mon, 15 Mar 2021 09:54:51 -0400 Received: from mail.kernel.org ([198.145.29.99]:55900 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230373AbhCONx1 (ORCPT ); Mon, 15 Mar 2021 09:53:27 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 92D3264E89; Mon, 15 Mar 2021 13:53:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1615816407; bh=qoDi2vTsop8woPakjQoyEeGBNQtQbU2oPDlNnDr0eQk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FH/mga2N1GjfJvH1+oeAT7//XsGckVljJnXz6IfvAzNq7mzHEfOMm3WWhV7a3c8Y5 FqiEUxU3w3nOzM17HoqIbk5yUwEsCXf/FRhaiG0RZhdsLVC6koLuC/DUb1NbrZHfO/ il544oJzV1Sog+ipBPQsxG+GoBivUpwwSn1WL/Kc= 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.9 21/78] powerpc/perf: Record counter overflow always if SAMPLE_IP is unset Date: Mon, 15 Mar 2021 14:51:44 +0100 Message-Id: <20210315135212.763259976@linuxfoundation.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210315135212.060847074@linuxfoundation.org> References: <20210315135212.060847074@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 1f1ac446ace9..f2d8f35c181f 100644 --- a/arch/powerpc/perf/core-book3s.c +++ b/arch/powerpc/perf/core-book3s.c @@ -2010,7 +2010,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) @@ -2028,9 +2038,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