powerpc/perf: Fix thresholding counter data for unknown type
authorMadhavan Srinivasan <maddy@linux.vnet.ibm.com>
Sun, 9 Dec 2018 09:18:15 +0000 (14:48 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 20 Dec 2018 09:53:11 +0000 (20:53 +1100)
MMCRA[34:36] and MMCRA[38:44] expose the thresholding counter value.
Thresholding counter can be used to count latency cycles such as
load miss to reload. But threshold counter value is not relevant
when the sampled instruction type is unknown or reserved. Patch to
fix the thresholding counter value to zero when sampled instruction
type is unknown or reserved.

Fixes: 170a315f41c6('powerpc/perf: Support to export MMCRA[TEC*] field to userspace')
Signed-off-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/perf/isa207-common.c

index 177de814286fca3006aad90bee1199f899c3387d..6a2f65d3d088cf964a4c61d3e6e64891354eed05 100644 (file)
@@ -226,8 +226,13 @@ void isa207_get_mem_weight(u64 *weight)
        u64 mmcra = mfspr(SPRN_MMCRA);
        u64 exp = MMCRA_THR_CTR_EXP(mmcra);
        u64 mantissa = MMCRA_THR_CTR_MANT(mmcra);
+       u64 sier = mfspr(SPRN_SIER);
+       u64 val = (sier & ISA207_SIER_TYPE_MASK) >> ISA207_SIER_TYPE_SHIFT;
 
-       *weight = mantissa << (2 * exp);
+       if (val == 0 || val == 7)
+               *weight = 0;
+       else
+               *weight = mantissa << (2 * exp);
 }
 
 int isa207_get_constraint(u64 event, unsigned long *maskp, unsigned long *valp)