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;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ihk_mc_perf_counter_mask_check(unsigned long counter_mask)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int ihk_mc_perf_get_num_counters(void)
|
int ihk_mc_perf_get_num_counters(void)
|
||||||
{
|
{
|
||||||
return cpu_pmu.per_cpu[ihk_mc_get_processor_id()].num_events;
|
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;
|
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)
|
int ihk_mc_perf_get_num_counters(void)
|
||||||
{
|
{
|
||||||
return NUM_PERF_COUNTERS;
|
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;
|
struct mc_perf_event *leader = event->group_leader, *sub;
|
||||||
|
|
||||||
counter_id = leader->counter_id;
|
counter_id = leader->counter_id;
|
||||||
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
|
if (ihk_mc_perf_counter_mask_check(1UL << counter_id)) {
|
||||||
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
|
|
||||||
perf_counter_set(leader);
|
perf_counter_set(leader);
|
||||||
counter_mask |= 1UL << counter_id;
|
counter_mask |= 1UL << counter_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
|
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
|
||||||
counter_id = sub->counter_id;
|
counter_id = sub->counter_id;
|
||||||
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
|
if (ihk_mc_perf_counter_mask_check(1UL << counter_id)) {
|
||||||
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
|
|
||||||
perf_counter_set(sub);
|
perf_counter_set(sub);
|
||||||
counter_mask |= 1UL << counter_id;
|
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;
|
struct mc_perf_event *leader = event->group_leader, *sub;
|
||||||
|
|
||||||
counter_id = leader->counter_id;
|
counter_id = leader->counter_id;
|
||||||
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
|
if (ihk_mc_perf_counter_mask_check(1UL << counter_id)) {
|
||||||
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
|
|
||||||
ihk_mc_perfctr_reset(counter_id);
|
ihk_mc_perfctr_reset(counter_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
|
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
|
||||||
counter_id = sub->counter_id;
|
counter_id = sub->counter_id;
|
||||||
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
|
if (ihk_mc_perf_counter_mask_check(1UL << counter_id)) {
|
||||||
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
|
|
||||||
ihk_mc_perfctr_reset(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;
|
struct mc_perf_event *leader = event->group_leader, *sub;
|
||||||
|
|
||||||
counter_id = leader->counter_id;
|
counter_id = leader->counter_id;
|
||||||
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
|
if (ihk_mc_perf_counter_mask_check(1UL << counter_id)) {
|
||||||
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
|
|
||||||
counter_mask |= 1UL << counter_id;
|
counter_mask |= 1UL << counter_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
|
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
|
||||||
counter_id = sub->counter_id;
|
counter_id = sub->counter_id;
|
||||||
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
|
if (ihk_mc_perf_counter_mask_check(1UL << counter_id)) {
|
||||||
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
|
|
||||||
counter_mask |= 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(int counter);
|
||||||
unsigned long ihk_mc_perfctr_read_msr(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_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);
|
int ihk_mc_perf_get_num_counters(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user