perf_event: Specify counter by bit_mask on start/stop
Fujitsu: POSTK_DEBUG_TEMP_FIX_30 Refs: #1002 Change-Id: Iea51e9aef78927a5033e3a226d5efc6298da056a
This commit is contained in:
committed by
Masamichi Takagi
parent
cb1522ca92
commit
d7416c6f79
@ -296,18 +296,11 @@ int ihk_mc_perfctr_set_extra(struct mc_perf_event *event)
|
||||
extern void x86_march_perfctr_start(unsigned long counter_mask);
|
||||
#endif
|
||||
|
||||
#ifdef POSTK_DEBUG_TEMP_FIX_30
|
||||
int ihk_mc_perfctr_start(int counter)
|
||||
#else
|
||||
int ihk_mc_perfctr_start(unsigned long counter_mask)
|
||||
#endif /*POSTK_DEBUG_TEMP_FIX_30*/
|
||||
{
|
||||
int ret = 0;
|
||||
unsigned long value = 0;
|
||||
unsigned long mask = PERF_COUNTERS_MASK | FIXED_PERF_COUNTERS_MASK;
|
||||
#ifdef POSTK_DEBUG_TEMP_FIX_30
|
||||
unsigned long counter_mask = 1UL << counter;
|
||||
#endif /*POSTK_DEBUG_TEMP_FIX_30*/
|
||||
|
||||
PERFCTR_CHKANDJUMP(counter_mask & ~mask, "counter_mask out of range", -EINVAL);
|
||||
|
||||
@ -324,18 +317,11 @@ int ihk_mc_perfctr_start(unsigned long counter_mask)
|
||||
goto fn_exit;
|
||||
}
|
||||
|
||||
#ifdef POSTK_DEBUG_TEMP_FIX_30
|
||||
int ihk_mc_perfctr_stop(int counter)
|
||||
#else
|
||||
int ihk_mc_perfctr_stop(unsigned long counter_mask)
|
||||
#endif/*POSTK_DEBUG_TEMP_FIX_30*/
|
||||
{
|
||||
int ret = 0;
|
||||
unsigned long value;
|
||||
unsigned long mask = PERF_COUNTERS_MASK | FIXED_PERF_COUNTERS_MASK;
|
||||
#ifdef POSTK_DEBUG_TEMP_FIX_30
|
||||
unsigned long counter_mask = 1UL << counter;
|
||||
#endif/*POSTK_DEBUG_TEMP_FIX_30*/
|
||||
|
||||
PERFCTR_CHKANDJUMP(counter_mask & ~mask, "counter_mask out of range", -EINVAL);
|
||||
|
||||
|
||||
@ -3417,8 +3417,7 @@ perf_counter_alloc(struct thread *thread)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
perf_counter_start(struct mc_perf_event *event)
|
||||
int perf_counter_set(struct mc_perf_event *event)
|
||||
{
|
||||
int ret = 0;
|
||||
struct perf_event_attr *attr = &event->attr;
|
||||
@ -3439,11 +3438,6 @@ perf_counter_start(struct mc_perf_event *event)
|
||||
}
|
||||
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;
|
||||
@ -3566,26 +3560,32 @@ perf_read(struct mckfd *sfd, ihk_mc_user_context_t *ctx)
|
||||
return ret;
|
||||
}
|
||||
|
||||
void
|
||||
perf_start(struct mc_perf_event *event)
|
||||
void perf_start(struct mc_perf_event *event)
|
||||
{
|
||||
int counter_id;
|
||||
unsigned long counter_mask = 0;
|
||||
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)) {
|
||||
perf_counter_start(leader);
|
||||
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)) {
|
||||
perf_counter_start(sub);
|
||||
perf_counter_set(sub);
|
||||
counter_mask |= 1UL << counter_id;
|
||||
}
|
||||
}
|
||||
cpu_local_var(current)->proc->perf_status = PP_COUNT;
|
||||
|
||||
if (counter_mask) {
|
||||
ihk_mc_perfctr_start(counter_mask);
|
||||
cpu_local_var(current)->proc->perf_status = PP_COUNT;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@ -3613,37 +3613,26 @@ static void
|
||||
perf_stop(struct mc_perf_event *event)
|
||||
{
|
||||
int counter_id;
|
||||
unsigned long counter_mask = 0;
|
||||
struct mc_perf_event *leader = event->group_leader, *sub;
|
||||
|
||||
#ifdef POSTK_DEBUG_TEMP_FIX_30
|
||||
counter_id = leader->counter_id;
|
||||
if ((1UL << counter_id & PERF_COUNTERS_MASK) |
|
||||
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
|
||||
ihk_mc_perfctr_stop(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)) {
|
||||
ihk_mc_perfctr_stop(counter_id);
|
||||
counter_mask |= 1UL << counter_id;
|
||||
}
|
||||
}
|
||||
#else
|
||||
counter_id = leader->counter_id;
|
||||
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 & PERF_COUNTERS_MASK) |
|
||||
(1UL << counter_id & FIXED_PERF_COUNTERS_MASK)) {
|
||||
ihk_mc_perfctr_stop(1UL << counter_id);
|
||||
}
|
||||
if (counter_mask) {
|
||||
ihk_mc_perfctr_stop(counter_mask);
|
||||
}
|
||||
#endif /*POSTK_DEBUG_TEMP_FIX_30*/
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
@ -63,13 +63,8 @@ int ihk_mc_perfctr_init(int counter, enum ihk_perfctr_type type, int mode);
|
||||
int ihk_mc_perfctr_init_raw(int counter, unsigned int code, int mode);
|
||||
#endif/*POSTK_DEBUG_TEMP_FIX_29*/
|
||||
int ihk_mc_perfctr_set_extra(struct mc_perf_event *event);
|
||||
#ifdef POSTK_DEBUG_TEMP_FIX_30
|
||||
int ihk_mc_perfctr_start(int counter);
|
||||
int ihk_mc_perfctr_stop(int counter);
|
||||
#else
|
||||
int ihk_mc_perfctr_start(unsigned long counter_mask);
|
||||
int ihk_mc_perfctr_stop(unsigned long counter_mask);
|
||||
#endif/*POSTK_DEBUG_TEMP_FIX_30*/
|
||||
int ihk_mc_perfctr_fixed_init(int counter, int mode);
|
||||
int ihk_mc_perfctr_reset(int counter);
|
||||
int ihk_mc_perfctr_set(int counter, long value);
|
||||
|
||||
Reference in New Issue
Block a user