[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200918100743.GK35926@hirez.programming.kicks-ass.net>
Date: Fri, 18 Sep 2020 12:07:43 +0200
From: peterz@...radead.org
To: Jan Kara <jack@...e.cz>
Cc: Oleg Nesterov <oleg@...hat.com>, Boaz Harrosh <boaz@...xistor.com>,
Hou Tao <houtao1@...wei.com>, Ingo Molnar <mingo@...hat.com>,
Will Deacon <will@...nel.org>, Dennis Zhou <dennis@...nel.org>,
Tejun Heo <tj@...nel.org>, Christoph Lameter <cl@...ux.com>,
linux-kernel@...r.kernel.org, linux-fsdevel@...r.kernel.org
Subject: Re: [RFC PATCH] locking/percpu-rwsem: use this_cpu_{inc|dec}() for
read_count
On Fri, Sep 18, 2020 at 12:04:32PM +0200, peterz@...radead.org wrote:
> On Fri, Sep 18, 2020 at 12:01:12PM +0200, peterz@...radead.org wrote:
> > @@ -198,7 +198,9 @@ EXPORT_SYMBOL_GPL(__percpu_down_read);
> > */
> > static bool readers_active_check(struct percpu_rw_semaphore *sem)
> > {
> > - if (per_cpu_sum(*sem->read_count) != 0)
> > + u64 sum = per_cpu_sum(*(u64 *)sem->read_count);
> > +
> > + if (sum + (sum >> 32))
>
> That obviously wants to be:
>
> if ((u32)(sum + (sum >> 32)))
>
> > return false;
> >
> > /*
I suppose an alternative way of writing that would be something like:
union {
u64 sum;
struct {
u32 a, b;
};
} var;
var.sum = per_cpu_sum(*(u64 *)sem->read_count);
if (var.a + var.b)
return false;
which is more verbose, but perhaps easier to read.
Powered by blists - more mailing lists