Re: [PATCH] count_stat_eventual: Remove unnecessary READ_ONCE() and smp_mb()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux