[PATCH 2/2] Thunderx2, uncore: Add workaround for ThunderX2 erratum 221

From: Ganapatrao Prabhakerrao Kulkarni
Date: Tue Nov 05 2019 - 20:02:12 EST


When perf tried with more events than the PMU supported counters, the perf
core uses event multiplexing to accommodate all events. This results in
burst of PMU register read and writes and causes the system hang, when
executed along with the CPU intensive applications.

Adding software workaround by disabling event multiplexing.

Signed-off-by: Ganapatrao Prabhakerrao Kulkarni <gkulkarni@xxxxxxxxxxx>
---
Documentation/admin-guide/perf/thunderx2-pmu.rst | 9 +++++++++
drivers/perf/thunderx2_pmu.c | 3 ++-
2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/Documentation/admin-guide/perf/thunderx2-pmu.rst b/Documentation/admin-guide/perf/thunderx2-pmu.rst
index 08e33675853a..fff65382c887 100644
--- a/Documentation/admin-guide/perf/thunderx2-pmu.rst
+++ b/Documentation/admin-guide/perf/thunderx2-pmu.rst
@@ -40,3 +40,12 @@ Examples::
uncore_l3c_0/read_hit/,\
uncore_l3c_0/inv_request/,\
uncore_l3c_0/inv_hit/ sleep 1
+
+ThunderX2 erratum 221:
+When perf tried with more events than the PMU supported counters, the perf core
+uses event multiplexing to accommodate all events. This results in burst of PMU
+registers read and write and leading to system hang when executed along with
+CPU intensive applications.
+
+
+Disabling PMUs event multiplexing capability.
diff --git a/drivers/perf/thunderx2_pmu.c b/drivers/perf/thunderx2_pmu.c
index 43d76c85da56..c443be8bd449 100644
--- a/drivers/perf/thunderx2_pmu.c
+++ b/drivers/perf/thunderx2_pmu.c
@@ -563,7 +563,8 @@ static int tx2_uncore_pmu_register(
.start = tx2_uncore_event_start,
.stop = tx2_uncore_event_stop,
.read = tx2_uncore_event_read,
- .capabilities = PERF_PMU_CAP_NO_EXCLUDE,
+ .capabilities = PERF_PMU_CAP_NO_EXCLUDE |
+ PERF_PMU_CAP_NO_MUX_EVENTS,
};

tx2_pmu->pmu.name = devm_kasprintf(dev, GFP_KERNEL,
--
2.17.1