percpu-refcount: make percpu_ref based on longs instead of ints
authorTejun Heo <tj@kernel.org>
Sat, 20 Sep 2014 05:27:25 +0000 (01:27 -0400)
committerTejun Heo <tj@kernel.org>
Sat, 20 Sep 2014 05:27:25 +0000 (01:27 -0400)
commite625305b390790717cf2cccf61efb81299647028
tree87bde164e935bf06fca1b4adfa26d23f1cca4238
parent4843c3320c3d23ab4ecf520f5eaf485aff8c7252
percpu-refcount: make percpu_ref based on longs instead of ints

percpu_ref is currently based on ints and the number of refs it can
cover is (1 << 31).  This makes it impossible to use a percpu_ref to
count memory objects or pages on 64bit machines as it may overflow.
This forces those users to somehow aggregate the references before
contributing to the percpu_ref which is often cumbersome and sometimes
challenging to get the same level of performance as using the
percpu_ref directly.

While using ints for the percpu counters makes them pack tighter on
64bit machines, the possible gain from using ints instead of longs is
extremely small compared to the overall gain from per-cpu operation.
This patch makes percpu_ref based on longs so that it can be used to
directly count memory objects or pages.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Kent Overstreet <kmo@daterainc.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
include/linux/percpu-refcount.h
lib/percpu-refcount.c