powerpc/perf: Fix disabling BHRB and instruction sampling
authorNicholas Piggin <npiggin@gmail.com>
Wed, 18 Oct 2023 15:34:23 +0000 (01:34 +1000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 28 Nov 2023 17:07:07 +0000 (17:07 +0000)
commit ea142e590aec55ba40c5affb4d49e68c713c63dc upstream.

When the PMU is disabled, MMCRA is not updated to disable BHRB and
instruction sampling. This can lead to those features remaining enabled,
which can slow down a real or emulated CPU.

Fixes: 1cade527f6e9 ("powerpc/perf: BHRB control to disable BHRB logic when not used")
Cc: stable@vger.kernel.org # v5.9+
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20231018153423.298373-1-npiggin@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/powerpc/perf/core-book3s.c

index 942aa830e110eaf0f944c9194596f45ad5b14f47..e3c31c771ce91b38620dcf60fe380c0b1aa91761 100644 (file)
@@ -1371,8 +1371,7 @@ static void power_pmu_disable(struct pmu *pmu)
                /*
                 * Disable instruction sampling if it was enabled
                 */
-               if (cpuhw->mmcr.mmcra & MMCRA_SAMPLE_ENABLE)
-                       val &= ~MMCRA_SAMPLE_ENABLE;
+               val &= ~MMCRA_SAMPLE_ENABLE;
 
                /* Disable BHRB via mmcra (BHRBRD) for p10 */
                if (ppmu->flags & PPMU_ARCH_31)
@@ -1383,7 +1382,7 @@ static void power_pmu_disable(struct pmu *pmu)
                 * instruction sampling or BHRB.
                 */
                if (val != mmcra) {
-                       mtspr(SPRN_MMCRA, mmcra);
+                       mtspr(SPRN_MMCRA, val);
                        mb();
                        isync();
                }