Re: [patch 1/4] net: percpufy frequently used vars -- addpercpu_counter_mod_bh

From: Andrew Morton
Date: Wed Mar 08 2006 - 19:32:42 EST


Ravikiran G Thirumalai <kiran@xxxxxxxxxxxx> wrote:
>
> On Wed, Mar 08, 2006 at 03:43:21PM -0800, Andrew Morton wrote:
> > Benjamin LaHaise <bcrl@xxxxxxxxx> wrote:
> > >
> > > I think it may make more sense to simply convert local_t into a long, given
> > > that most of the users will be things like stats counters.
> > >
> >
> > Yes, I agree that making local_t signed would be better. It's consistent
> > with atomic_t, atomic64_t and atomic_long_t and it's a bit more flexible.
> >
> > Perhaps. A lot of applications would just be upcounters for statistics,
> > where unsigned is desired. But I think the consistency argument wins out.
>
> It already is... for most of the arches except x86_64.

x86 uses unsigned long.

> And on -mm, the asm-generic version uses atomic_long_t for local_t (signed
> long) which seems right.

No, it uses unsigned long. The only place where signedness matters is
local_read(), and there it is typecast to ulong.

> Although, I wonder why we use:
>
> #define local_read(l) ((unsigned long)atomic_long_read(&(l)->a))
>
> It would return a huge value if the local counter was even -1 no?

It's casting a signed long to an unsigned long. That does the right thing.
Yes, it'll convert -1 to 0xffffffff[ffffffff].

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/