All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] count_stat_eventual: Remove unnecessary READ_ONCE() and smp_mb()
@ 2017-05-16 13:40 Junchang Wang
  2017-05-16 14:04 ` Junchang Wang
  0 siblings, 1 reply; 4+ messages in thread
From: Junchang Wang @ 2017-05-16 13:40 UTC (permalink / raw)
  To: perfbook; +Cc: Junchang Wang, Akira Yokosawa

Signed-off-by: Junchang Wang <junchangwang@gmail.com>
Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
---
 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


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] count_stat_eventual: Remove unnecessary READ_ONCE() and smp_mb()
  2017-05-16 13:40 [PATCH] count_stat_eventual: Remove unnecessary READ_ONCE() and smp_mb() Junchang Wang
@ 2017-05-16 14:04 ` Junchang Wang
  2017-05-16 15:05   ` Akira Yokosawa
  0 siblings, 1 reply; 4+ messages in thread
From: Junchang Wang @ 2017-05-16 14:04 UTC (permalink / raw)
  To: perfbook; +Cc: Junchang Wang, Akira Yokosawa

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@gmail.com> wrote:
> Signed-off-by: Junchang Wang <junchangwang@gmail.com>
> Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
> ---
>  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
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] count_stat_eventual: Remove unnecessary READ_ONCE() and smp_mb()
  2017-05-16 14:04 ` Junchang Wang
@ 2017-05-16 15:05   ` Akira Yokosawa
  2017-05-16 15:46     ` Junchang Wang
  0 siblings, 1 reply; 4+ messages in thread
From: Akira Yokosawa @ 2017-05-16 15:05 UTC (permalink / raw)
  To: Junchang Wang; +Cc: perfbook, Paul E. McKenney

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@gmail.com> wrote:
>> Signed-off-by: Junchang Wang <junchangwang@gmail.com>
>> Signed-off-by: Akira Yokosawa <akiyks@gmail.com>

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@gmail.com>

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
>>
> 


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] count_stat_eventual: Remove unnecessary READ_ONCE() and smp_mb()
  2017-05-16 15:05   ` Akira Yokosawa
@ 2017-05-16 15:46     ` Junchang Wang
  0 siblings, 0 replies; 4+ messages in thread
From: Junchang Wang @ 2017-05-16 15:46 UTC (permalink / raw)
  To: Akira Yokosawa; +Cc: perfbook, Paul E. McKenney

Hi Akira,

Thanks a lot for commenting on the patch. Just sent the patch version 2.


Cheers!
--Jason


On Tue, May 16, 2017 at 11:05 PM, Akira Yokosawa <akiyks@gmail.com> wrote:
> 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@gmail.com> wrote:
>>> Signed-off-by: Junchang Wang <junchangwang@gmail.com>
>>> Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
>
> 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@gmail.com>
>
> 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
>>>
>>
>


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-05-16 15:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-16 13:40 [PATCH] count_stat_eventual: Remove unnecessary READ_ONCE() and smp_mb() Junchang Wang
2017-05-16 14:04 ` Junchang Wang
2017-05-16 15:05   ` Akira Yokosawa
2017-05-16 15:46     ` Junchang Wang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.