On 2017/05/16 22:04:59 +0800, Junchang Wang wrote: > Hi Paul and Akira, > > This is the updated patch according to the discussion with Akira and > following is the summary. Please take a look. Comments are welcome! > > In function eventual( ), if the value of stopflag become larger than > zero (the ''if'' branch is taken), then only the "eventual()" thread > updates stopflag. So, the READ_ONCE() within the WRITE_ONCE() is not > necessary. Remove it. > In function count_cleanup( ), there is no need to run smp_mb( ) in > between statement writing to and statement reading from the same > variable, stopflag. Remove smp_mb(). > > > Thanks, > --Jason > > On Tue, May 16, 2017 at 9:40 PM, Junchang Wang <junchangwang@xxxxxxxxx> wrote: >> Signed-off-by: Junchang Wang <junchangwang@xxxxxxxxx> >> Signed-off-by: Akira Yokosawa <akiyks@xxxxxxxxx> Hi Jason, Glad to know you agree with me here! Can you resubmit a v2 of the patch to include the message above in the commit log? It would be easier for Paul to apply. Also, since I didn't created the patch itself, I'd like you to use the following tag instead: Suggested-by: Akira Yokosawa <akiyks@xxxxxxxxx> in front of your Signed-off-by. Thanks, Akira >> --- >> CodeSamples/count/count_stat_eventual.c | 8 ++++---- >> 1 file changed, 4 insertions(+), 4 deletions(-) >> >> diff --git a/CodeSamples/count/count_stat_eventual.c b/CodeSamples/count/count_stat_eventual.c >> index 464de30..1365168 100644 >> --- a/CodeSamples/count/count_stat_eventual.c >> +++ b/CodeSamples/count/count_stat_eventual.c >> @@ -40,16 +40,17 @@ void *eventual(void *arg) >> { >> int t; >> unsigned long sum; >> + int stopflag_l = 0; >> >> - while (READ_ONCE(stopflag) < 3) { >> + while (stopflag_l < 3) { >> sum = 0; >> for_each_thread(t) >> sum += READ_ONCE(per_thread(counter, t)); >> WRITE_ONCE(global_count, sum); >> poll(NULL, 0, 1); >> - if (READ_ONCE(stopflag)) { >> + if ((stopflag_l = READ_ONCE(stopflag)) != 0) { >> smp_mb(); >> - WRITE_ONCE(stopflag, READ_ONCE(stopflag) + 1); >> + WRITE_ONCE(stopflag, ++stopflag_l); >> } >> } >> return NULL; >> @@ -68,7 +69,6 @@ void count_init(void) >> void count_cleanup(void) >> { >> WRITE_ONCE(stopflag, 1); >> - smp_mb(); >> while (READ_ONCE(stopflag) < 3) >> poll(NULL, 0, 1); >> smp_mb(); >> -- >> 2.7.4 >> > -- To unsubscribe from this list: send the line "unsubscribe perfbook" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html