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:
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user