Patch "perf/x86/amd/lbr: Discard erroneous branch entries" has been added to the 6.6-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

    perf/x86/amd/lbr: Discard erroneous branch entries

to the 6.6-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:
     perf-x86-amd-lbr-discard-erroneous-branch-entries.patch
and it can be found in the queue-6.6 subdirectory.

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



commit 8277fe6f972a7636d71d972589c3af18b402d028
Author: Sandipan Das <sandipan.das@xxxxxxx>
Date:   Mon Jan 29 16:36:25 2024 +0530

    perf/x86/amd/lbr: Discard erroneous branch entries
    
    [ Upstream commit 29297ffffb0bf388778bd4b581a43cee6929ae65 ]
    
    The Revision Guide for AMD Family 19h Model 10-1Fh processors declares
    Erratum 1452 which states that non-branch entries may erroneously be
    recorded in the Last Branch Record (LBR) stack with the valid and
    spec bits set.
    
    Such entries can be recognized by inspecting bit 61 of the corresponding
    LastBranchStackToIp register. This bit is currently reserved but if found
    to be set, the associated branch entry should be discarded.
    
    Signed-off-by: Sandipan Das <sandipan.das@xxxxxxx>
    Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx>
    Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
    Link: https://bugzilla.kernel.org/attachment.cgi?id=305518
    Link: https://lore.kernel.org/r/3ad2aa305f7396d41a40e3f054f740d464b16b7f.1706526029.git.sandipan.das@xxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/x86/events/amd/lbr.c b/arch/x86/events/amd/lbr.c
index 110e34c59643a..5149830c7c4fa 100644
--- a/arch/x86/events/amd/lbr.c
+++ b/arch/x86/events/amd/lbr.c
@@ -173,9 +173,11 @@ void amd_pmu_lbr_read(void)
 
 		/*
 		 * Check if a branch has been logged; if valid = 0, spec = 0
-		 * then no branch was recorded
+		 * then no branch was recorded; if reserved = 1 then an
+		 * erroneous branch was recorded (see Erratum 1452)
 		 */
-		if (!entry.to.split.valid && !entry.to.split.spec)
+		if ((!entry.to.split.valid && !entry.to.split.spec) ||
+		    entry.to.split.reserved)
 			continue;
 
 		perf_clear_branch_entry_bitfields(br + out);




[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