perf_event: Handle fixed-pmc in arch-dep part

Fujitsu: POSTK_DEBUG_TEMP_FIX_31
Refs: #1003
Change-Id: I66c7d18b9137894cf5764464482e2ebd5ecb9d52
This commit is contained in:
Ken Sato
2018-07-26 09:20:29 +09:00
committed by Masamichi Takagi
parent 14660a10c3
commit cb1522ca92
3 changed files with 68 additions and 74 deletions

View File

@ -3407,7 +3407,7 @@ perf_counter_alloc(struct thread *thread)
int i = 0;
// find avail generic counter
for(i = 0; i < X86_IA32_NUM_PERF_COUNTERS; i++) {
for (i = 0; i < NUM_PERF_COUNTERS; i++) {
if(!(thread->pmc_alloc_map & (1 << i))) {
ret = i;
break;
@ -3431,25 +3431,20 @@ perf_counter_start(struct mc_perf_event *event)
mode |= PERFCTR_USER_MODE;
}
if(event->counter_id >= 0 && event->counter_id < X86_IA32_NUM_PERF_COUNTERS) {
if (event->extra_reg.reg) {
if (ihk_mc_perfctr_set_extra(event)) {
ret = -1;
goto out;
}
if (event->extra_reg.reg) {
if (ihk_mc_perfctr_set_extra(event)) {
ret = -1;
goto out;
}
ret = ihk_mc_perfctr_init_raw(event->counter_id, event->hw_config, mode);
ihk_mc_perfctr_start(1UL << event->counter_id);
}
else if(event->counter_id >= X86_IA32_BASE_FIXED_PERF_COUNTERS &&
event->counter_id < X86_IA32_BASE_FIXED_PERF_COUNTERS + X86_IA32_NUM_FIXED_PERF_COUNTERS) {
ret = ihk_mc_perfctr_fixed_init(event->counter_id, mode);
ihk_mc_perfctr_start(1UL << event->counter_id);
}
else {
ret = -1;
ret = ihk_mc_perfctr_init_raw(event->counter_id,
event->hw_config, mode);
if (ret) {
goto out;
}
ihk_mc_perfctr_start(1UL << event->counter_id);
out:
return ret;
}
@ -3578,15 +3573,15 @@ 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 & X86_IA32_PERF_COUNTERS_MASK) |
(1UL << counter_id & X86_IA32_FIXED_PERF_COUNTERS_MASK)) {
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
perf_counter_start(leader);
}
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
counter_id = sub->counter_id;
if((1UL << counter_id & X86_IA32_PERF_COUNTERS_MASK) |
(1UL << counter_id & X86_IA32_FIXED_PERF_COUNTERS_MASK)) {
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
perf_counter_start(sub);
}
}
@ -3600,15 +3595,15 @@ 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 & X86_IA32_PERF_COUNTERS_MASK) |
(1UL << counter_id & X86_IA32_FIXED_PERF_COUNTERS_MASK)) {
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
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 & X86_IA32_PERF_COUNTERS_MASK) |
(1UL << counter_id & X86_IA32_FIXED_PERF_COUNTERS_MASK)) {
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
ihk_mc_perfctr_reset(counter_id);
}
}
@ -3622,29 +3617,29 @@ perf_stop(struct mc_perf_event *event)
#ifdef POSTK_DEBUG_TEMP_FIX_30
counter_id = leader->counter_id;
if((1UL << counter_id & X86_IA32_PERF_COUNTERS_MASK) |
(1UL << counter_id & X86_IA32_FIXED_PERF_COUNTERS_MASK)) {
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
ihk_mc_perfctr_stop(counter_id);
}
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
counter_id = sub->counter_id;
if((1UL << counter_id & X86_IA32_PERF_COUNTERS_MASK) |
(1UL << counter_id & X86_IA32_FIXED_PERF_COUNTERS_MASK)) {
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
ihk_mc_perfctr_stop(counter_id);
}
}
#else
counter_id = leader->counter_id;
if((1UL << counter_id & X86_IA32_PERF_COUNTERS_MASK) |
(1UL << counter_id & X86_IA32_FIXED_PERF_COUNTERS_MASK)) {
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
ihk_mc_perfctr_stop(1UL << counter_id);
}
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
counter_id = sub->counter_id;
if((1UL << counter_id & X86_IA32_PERF_COUNTERS_MASK) |
(1UL << counter_id & X86_IA32_FIXED_PERF_COUNTERS_MASK)) {
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
ihk_mc_perfctr_stop(1UL << counter_id);
}
}