ETMv3 only has a few attributes, and setting unused ones results in an error, so hide them to begin with.
Signed-off-by: James Clark james.clark@linaro.org --- drivers/hwtracing/coresight/coresight-etm-perf.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)
diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.c b/drivers/hwtracing/coresight/coresight-etm-perf.c index 17afa0f4cdee..91132abca244 100644 --- a/drivers/hwtracing/coresight/coresight-etm-perf.c +++ b/drivers/hwtracing/coresight/coresight-etm-perf.c @@ -106,8 +106,27 @@ static struct attribute *etm_config_formats_attr[] = { NULL, };
+static umode_t etm_format_attr_is_visible(struct kobject *kobj, + struct attribute *attr, int unused) +{ + /* ETM4 has all attributes */ + if (IS_ENABLED(CONFIG_CORESIGHT_SOURCE_ETM4X)) + return attr->mode; + + /* ETM3 only has these attributes */ + if (attr == &format_attr_cycacc.attr || + attr == &format_attr_timestamp.attr || + attr == &format_attr_retstack.attr || + attr == &format_attr_sinkid.attr || + attr == &format_attr_configid.attr) + return attr->mode; + + return 0; +} + static const struct attribute_group etm_pmu_format_group = { .name = "format", + .is_visible = etm_format_attr_is_visible, .attrs = etm_config_formats_attr, };