From 767792808ae5e4e7dee80a24b47f93dd6519e153 Mon Sep 17 00:00:00 2001 From: "TOIDA,Suguru" Date: Tue, 19 Nov 2019 15:35:51 +0900 Subject: [PATCH] perf: change count variable type to ihk_atomic64_t Change-Id: I2bb6fab2c040683830b44fa6b963a86a233b883a --- kernel/syscall.c | 12 ++++++++---- lib/include/mc_perf_event.h | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/kernel/syscall.c b/kernel/syscall.c index 24e07488..2420fd0d 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -1139,7 +1139,9 @@ void sync_child_event(struct mc_perf_event *event) ihk_mc_perfctr_read(leader->counter_id); } else if (leader->pid > 0) { - leader->count = ihk_mc_perfctr_read(leader->counter_id); + uint64_t count = ihk_mc_perfctr_read(leader->counter_id); + + ihk_atomic64_set(&leader->count, count); } else return; // Error @@ -1150,7 +1152,9 @@ void sync_child_event(struct mc_perf_event *event) ihk_mc_perfctr_read(sub->counter_id); } else if (event->pid > 0) { - sub->count = ihk_mc_perfctr_read(sub->counter_id); + uint64_t count = ihk_mc_perfctr_read(sub->counter_id); + + ihk_atomic64_set(&sub->count, count); } } } @@ -3955,7 +3959,7 @@ unsigned long perf_event_read_value(struct mc_perf_event *event) } } - rtn_count += event->count + pmc_count; + rtn_count += ihk_atomic64_read(&event->count) + pmc_count; if(event->attr.inherit) rtn_count += event->child_count_total; @@ -4534,7 +4538,7 @@ static int mc_perf_event_alloc(struct mc_perf_event **out, event->sample_freq = attr->sample_freq; event->nr_siblings = 0; - event->count = 0L; + ihk_atomic64_set(&event->count, 0); event->child_count_total = 0; event->parent = NULL; diff --git a/lib/include/mc_perf_event.h b/lib/include/mc_perf_event.h index 81de581c..5a101343 100644 --- a/lib/include/mc_perf_event.h +++ b/lib/include/mc_perf_event.h @@ -4,6 +4,7 @@ #include #include +#include struct perf_event_attr; @@ -272,7 +273,7 @@ struct mc_perf_event { enum perf_event_state state; int cpu_id; int counter_id; // counter_id - unsigned long count; // counter_value + ihk_atomic64_t count; // counter_value unsigned long child_count_total; // child_counter_value unsigned long pmc_status; unsigned long sample_freq;