summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2014-06-28 08:10:13 -0400
committerTejun Heo <tj@kernel.org>2014-06-28 08:10:13 -0400
commit7d742075120deb831c7b94c268ca20d409e91d60 (patch)
tree5580ef27bade2963233cb36141d60770e3772c27 /include/linux
parenteae7975ddf031b3084f4a5f7d88f698aefad96fb (diff)
percpu-refcount: use unsigned long for pcpu_count pointer
percpu_ref->pcpu_count is a percpu pointer with a status flag in its lowest bit. As such, it always goes through arithmetic operations which is very cumbersome to do on a pointer. It has to be first casted to unsigned long and then back. Let's just make the field unsigned long so that we can skip the first casts. While at it, rename it to pcpu_counter_ptr to clarify that it's a pointer value. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Kent Overstreet <kmo@daterainc.com> Cc: Christoph Lameter <cl@linux-foundation.org>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/percpu-refcount.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/include/linux/percpu-refcount.h b/include/linux/percpu-refcount.h
index b62a4ee6d6ad..6f8cd4c0546c 100644
--- a/include/linux/percpu-refcount.h
+++ b/include/linux/percpu-refcount.h
@@ -61,7 +61,7 @@ struct percpu_ref {
* hack because we need to keep the pointer around for
* percpu_ref_kill_rcu())
*/
- unsigned __percpu *pcpu_count;
+ unsigned long pcpu_count_ptr;
percpu_ref_func_t *release;
percpu_ref_func_t *confirm_kill;
struct rcu_head rcu;
@@ -99,7 +99,7 @@ static inline void percpu_ref_kill(struct percpu_ref *ref)
static inline bool __pcpu_ref_alive(struct percpu_ref *ref,
unsigned __percpu **pcpu_countp)
{
- unsigned long pcpu_ptr = (unsigned long)ACCESS_ONCE(ref->pcpu_count);
+ unsigned long pcpu_ptr = ACCESS_ONCE(ref->pcpu_count_ptr);
if (unlikely(pcpu_ptr & PCPU_REF_DEAD))
return false;