* [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.