perf: qcom_l2_pmu: add event names
Subsystems (2)
PATCH 1/1 perf: qcom_l2_pmu: add event names
Add event names so that common events can be
specified symbolically, for example:
l2cache_0/total-reads/,l2cache_0/cycles/
Event names are displayed in 'perf list'.
--- drivers/perf/qcom_l2_pmu.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+)
drivers/perf/qcom_l2_pmu.c +54 -0
@@ -92,6 +92,21 @@#define reg_idx (reg, i) (((i) * IA_L2_REG_OFFSET) + reg##_BASE) +/* +* Events +*/ +#define L2_EVENT_CYCLES 0xfe +#define L2_EVENT_DCACHE_OPS 0x400 +#define L2_EVENT_ICACHE_OPS 0x401 +#define L2_EVENT_TLBI 0x402 +#define L2_EVENT_BARRIERS 0x403 +#define L2_EVENT_TOTAL_READS 0x405 +#define L2_EVENT_TOTAL_WRITES 0x406 +#define L2_EVENT_TOTAL_REQUESTS 0x407 +#define L2_EVENT_LDREX 0x420 +#define L2_EVENT_STREX 0x421 +#define L2_EVENT_CLREX 0x422 +static DEFINE_RAW_SPINLOCK (l2_access_lock);/**
@@ -700,9 +715,12 @@ static ssize_t l2_cache_pmu_cpumask_show(struct device *dev,/* CCG format for perf RAW codes. */ PMU_FORMAT_ATTR (l2_code,"config:4-11" );PMU_FORMAT_ATTR (l2_group,"config:0-3" ); +PMU_FORMAT_ATTR (event,"config:0-11" ); +static struct attribute *l2_cache_pmu_formats[] = { &format_attr_l2_code.attr, &format_attr_l2_group.attr, + &format_attr_event.attr,NULL , };
@@ -711,9 +729,45 @@ static ssize_t l2_cache_pmu_cpumask_show(struct device *dev, .attrs = l2_cache_pmu_formats, }; +static ssize_t l2cache_pmu_event_show (struct device *dev, +struct device_attribute *attr,char *page) +{ +struct perf_pmu_events_attr *pmu_attr; + + pmu_attr = container_of(attr, struct perf_pmu_events_attr, attr); +return sprintf (page,"event=0x%02llx\n" , pmu_attr->id); +} + +#define L2CACHE_EVENT_ATTR (_name, _id) \ + (&((struct perf_pmu_events_attr[]) { \ + { .attr = __ATTR(_name, 0444, l2cache_pmu_event_show, NULL), \ + .id = _id, } \ + })[0].attr.attr) + +static struct attribute *l2_cache_pmu_events[] = { +L2CACHE_EVENT_ATTR (cycles,L2_EVENT_CYCLES ), +L2CACHE_EVENT_ATTR (dcache-ops,L2_EVENT_DCACHE_OPS ), +L2CACHE_EVENT_ATTR (icache-ops,L2_EVENT_ICACHE_OPS ), +L2CACHE_EVENT_ATTR (tlbi,L2_EVENT_TLBI ), +L2CACHE_EVENT_ATTR (barriers,L2_EVENT_BARRIERS ), +L2CACHE_EVENT_ATTR (total-reads,L2_EVENT_TOTAL_READS ), +L2CACHE_EVENT_ATTR (total-writes,L2_EVENT_TOTAL_WRITES ), +L2CACHE_EVENT_ATTR (total-requests,L2_EVENT_TOTAL_REQUESTS ), +L2CACHE_EVENT_ATTR (ldrex,L2_EVENT_LDREX ), +L2CACHE_EVENT_ATTR (strex,L2_EVENT_STREX ), +L2CACHE_EVENT_ATTR (clrex,L2_EVENT_CLREX ), +NULL +}; + +static struct attribute_group l2_cache_pmu_events_group = { + .name ="events" , + .attrs = l2_cache_pmu_events, +}; +static const struct attribute_group *l2_cache_pmu_attr_grps[] = { &l2_cache_pmu_format_group, &l2_cache_pmu_cpumask_group, + &l2_cache_pmu_events_group,NULL , };
Signature · 3 lines
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
Quoted 52 lines · Neil Leeder
Add event names so that common events can be
specified symbolically, for example:l2cache_0/total-reads/,l2cache_0/cycles/
Event names are displayed in 'perf list'.
Signed-off-by Neil Leeder <[email protected]>--- drivers/perf/qcom_l2_pmu.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+)drivers/perf/qcom_l2_pmu.c +18
-0@@ -92,6 +92,21 @@#define reg_idx (reg, i) (((i) * IA_L2_REG_OFFSET) + reg##_BASE) +/* +* Events +*/ +#define L2_EVENT_CYCLES 0xfe +#define L2_EVENT_DCACHE_OPS 0x400 +#define L2_EVENT_ICACHE_OPS 0x401 +#define L2_EVENT_TLBI 0x402 +#define L2_EVENT_BARRIERS 0x403 +#define L2_EVENT_TOTAL_READS 0x405 +#define L2_EVENT_TOTAL_WRITES 0x406 +#define L2_EVENT_TOTAL_REQUESTS 0x407 +#define L2_EVENT_LDREX 0x420 +#define L2_EVENT_STREX 0x421 +#define L2_EVENT_CLREX 0x422 +static DEFINE_RAW_SPINLOCK (l2_access_lock);/** @@ -700,9 +715,12 @@ static ssize_t l2_cache_pmu_cpumask_show(struct device *dev,/* CCG format for perf RAW codes. */ PMU_FORMAT_ATTR (l2_code,"config:4-11" );PMU_FORMAT_ATTR (l2_group,"config:0-3" ); +PMU_FORMAT_ATTR (event,"config:0-11" ); +static struct attribute *l2_cache_pmu_formats[] = { &format_attr_l2_code.attr, &format_attr_l2_group.attr, + &format_attr_event.attr,NULL , };
drivers/perf/qcom_l2_pmu.c static ssize_t l2_cache_pmu_cpumask_show(struct device *dev, · line 738
Quoted 10 lines
drivers/perf/qcom_l2_pmu.c +7
-0@@ -711,9 +729,45 @@ static ssize_t l2_cache_pmu_cpumask_show(struct device *dev, .attrs = l2_cache_pmu_formats, }; +static ssize_t l2cache_pmu_event_show (struct device *dev, +struct device_attribute *attr,char *page) +{ +struct perf_pmu_events_attr *pmu_attr; + + pmu_attr = container_of(attr, struct perf_pmu_events_attr, attr); +return sprintf (page,"event=0x%02llx\n" , pmu_attr->id);
Nit: do you want a 0x%03llx here?
(I'm happy to take the patch either way, so just let me know)
Will
Quoted 66 lines · Will Deacon
Quoted 52 lines · Neil Leeder
Add event names so that common events can be
specified symbolically, for example:l2cache_0/total-reads/,l2cache_0/cycles/
Event names are displayed in 'perf list'.
Signed-off-by Neil Leeder <[email protected]>--- drivers/perf/qcom_l2_pmu.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+)drivers/perf/qcom_l2_pmu.c +18
-0@@ -92,6 +92,21 @@#define reg_idx (reg, i) (((i) * IA_L2_REG_OFFSET) + reg##_BASE) +/* +* Events +*/ +#define L2_EVENT_CYCLES 0xfe +#define L2_EVENT_DCACHE_OPS 0x400 +#define L2_EVENT_ICACHE_OPS 0x401 +#define L2_EVENT_TLBI 0x402 +#define L2_EVENT_BARRIERS 0x403 +#define L2_EVENT_TOTAL_READS 0x405 +#define L2_EVENT_TOTAL_WRITES 0x406 +#define L2_EVENT_TOTAL_REQUESTS 0x407 +#define L2_EVENT_LDREX 0x420 +#define L2_EVENT_STREX 0x421 +#define L2_EVENT_CLREX 0x422 +static DEFINE_RAW_SPINLOCK (l2_access_lock);/** @@ -700,9 +715,12 @@ static ssize_t l2_cache_pmu_cpumask_show(struct device *dev,/* CCG format for perf RAW codes. */ PMU_FORMAT_ATTR (l2_code,"config:4-11" );PMU_FORMAT_ATTR (l2_group,"config:0-3" ); +PMU_FORMAT_ATTR (event,"config:0-11" ); +static struct attribute *l2_cache_pmu_formats[] = { &format_attr_l2_code.attr, &format_attr_l2_group.attr, + &format_attr_event.attr,NULL , };drivers/perf/qcom_l2_pmu.c static ssize_t l2_cache_pmu_cpumask_show(struct device *dev, · line 738
Quoted 10 lines
drivers/perf/qcom_l2_pmu.c +7
-0@@ -711,9 +729,45 @@ static ssize_t l2_cache_pmu_cpumask_show(struct device *dev, .attrs = l2_cache_pmu_formats, }; +static ssize_t l2cache_pmu_event_show (struct device *dev, +struct device_attribute *attr,char *page) +{ +struct perf_pmu_events_attr *pmu_attr; + + pmu_attr = container_of(attr, struct perf_pmu_events_attr, attr); +return sprintf (page,"event=0x%02llx\n" , pmu_attr->id);Nit: do you want a 0x%03llx here?
Quoted 4 lines
(I'm happy to take the patch either way, so just let me know)
Will
Thanks Will. I'm leaning toward leaving it the way it is, if it's all the same to you.
Neil
Signature · 3 lines
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.