Patch "powerpc/perf: Record counter overflow always if SAMPLE_IP is unset" has been added to the 4.14-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    powerpc/perf: Record counter overflow always if SAMPLE_IP is unset

to the 4.14-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     powerpc-perf-record-counter-overflow-always-if-sampl.patch
and it can be found in the queue-4.14 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit b9590c938ba8b3ff9fcf196a7994000faefcd6f4
Author: Athira Rajeev <atrajeev@xxxxxxxxxxxxxxxxxx>
Date:   Fri Feb 5 04:14:52 2021 -0500

    powerpc/perf: Record counter overflow always if SAMPLE_IP is unset
    
    [ 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 <mpe@xxxxxxxxxxxxxx>
    Signed-off-by: Athira Rajeev <atrajeev@xxxxxxxxxxxxxxxxxx>
    [mpe: Reflow comment and if formatting]
    Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/1612516492-1428-1-git-send-email-atrajeev@xxxxxxxxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index 56f16c803590..2669847434b8 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -2055,7 +2055,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)
@@ -2073,9 +2083,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.



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux