perf: add arch-dependent counter_mask_check function

A later version would probably want to check some mask for arm64...

Change-Id: I67e13a852c3ed406fbf8ae1688539b9e069c0e81
Fujitsu: POSTK_DEBUG_ARCH_DEP_87
This commit is contained in:
Dominique Martinet
2019-01-29 11:38:48 +09:00
parent 03cadbcba2
commit 238f563e88
4 changed files with 21 additions and 12 deletions

View File

@ -184,6 +184,11 @@ int ihk_mc_perfctr_fixed_init(int counter, int mode)
return -1;
}
int ihk_mc_perf_counter_mask_check(unsigned long counter_mask)
{
return 1;
}
int ihk_mc_perf_get_num_counters(void)
{
return cpu_pmu.per_cpu[ihk_mc_get_processor_id()].num_events;

View File

@ -499,6 +499,15 @@ int ihk_mc_perfctr_alloc_counter(unsigned int *type, unsigned long *config, unsi
return ret;
}
int ihk_mc_perf_counter_mask_check(unsigned long counter_mask)
{
if ((counter_mask & PERF_COUNTERS_MASK) |
(counter_mask & FIXED_PERF_COUNTERS_MASK)) {
return 1;
}
return 0;
}
int ihk_mc_perf_get_num_counters(void)
{
return NUM_PERF_COUNTERS;

View File

@ -3901,16 +3901,14 @@ void perf_start(struct mc_perf_event *event)
struct mc_perf_event *leader = event->group_leader, *sub;
counter_id = leader->counter_id;
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
if (ihk_mc_perf_counter_mask_check(1UL << counter_id)) {
perf_counter_set(leader);
counter_mask |= 1UL << counter_id;
}
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
counter_id = sub->counter_id;
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
if (ihk_mc_perf_counter_mask_check(1UL << counter_id)) {
perf_counter_set(sub);
counter_mask |= 1UL << counter_id;
}
@ -3929,15 +3927,13 @@ perf_reset(struct mc_perf_event *event)
struct mc_perf_event *leader = event->group_leader, *sub;
counter_id = leader->counter_id;
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
if (ihk_mc_perf_counter_mask_check(1UL << counter_id)) {
ihk_mc_perfctr_reset(counter_id);
}
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
counter_id = sub->counter_id;
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
if (ihk_mc_perf_counter_mask_check(1UL << counter_id)) {
ihk_mc_perfctr_reset(counter_id);
}
}
@ -3951,15 +3947,13 @@ perf_stop(struct mc_perf_event *event)
struct mc_perf_event *leader = event->group_leader, *sub;
counter_id = leader->counter_id;
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
if (ihk_mc_perf_counter_mask_check(1UL << counter_id)) {
counter_mask |= 1UL << counter_id;
}
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
counter_id = sub->counter_id;
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
if (ihk_mc_perf_counter_mask_check(1UL << counter_id)) {
counter_mask |= 1UL << counter_id;
}
}

View File

@ -72,6 +72,7 @@ int ihk_mc_perfctr_read_mask(unsigned long counter_mask, unsigned long *value);
unsigned long ihk_mc_perfctr_read(int counter);
unsigned long ihk_mc_perfctr_read_msr(int counter);
int ihk_mc_perfctr_alloc_counter(unsigned int *type, unsigned long *config, unsigned long pmc_status);
int ihk_mc_perf_counter_mask_check(unsigned long counter_mask);
int ihk_mc_perf_get_num_counters(void);
#endif