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