mirror of https://gitee.com/openkylin/linux.git
percpu-refcount: add __must_check to percpu_ref_init() and don't use ACCESS_ONCE() in percpu_ref_kill_rcu()
Two small changes. * Unlike most init functions, percpu_ref_init() allocates memory and may fail. Let's mark it with __must_check in case the caller forgets. * percpu_ref_kill_rcu() is unnecessarily using ACCESS_ONCE() to dereference @ref->pcpu_count, which can be misleading. The pointer is guaranteed to be valid and visible and can't change underneath the function. Drop ACCESS_ONCE(). Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
ac899061a9
commit
acac7883ee
|
@ -66,7 +66,8 @@ struct percpu_ref {
|
|||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
int percpu_ref_init(struct percpu_ref *ref, percpu_ref_func_t *release);
|
||||
int __must_check percpu_ref_init(struct percpu_ref *ref,
|
||||
percpu_ref_func_t *release);
|
||||
void percpu_ref_kill(struct percpu_ref *ref);
|
||||
|
||||
#define PCPU_STATUS_BITS 2
|
||||
|
|
|
@ -57,12 +57,10 @@ int percpu_ref_init(struct percpu_ref *ref, percpu_ref_func_t *release)
|
|||
static void percpu_ref_kill_rcu(struct rcu_head *rcu)
|
||||
{
|
||||
struct percpu_ref *ref = container_of(rcu, struct percpu_ref, rcu);
|
||||
unsigned __percpu *pcpu_count;
|
||||
unsigned __percpu *pcpu_count = ref->pcpu_count;
|
||||
unsigned count = 0;
|
||||
int cpu;
|
||||
|
||||
pcpu_count = ACCESS_ONCE(ref->pcpu_count);
|
||||
|
||||
/* Mask out PCPU_REF_DEAD */
|
||||
pcpu_count = (unsigned __percpu *)
|
||||
(((unsigned long) pcpu_count) & ~PCPU_STATUS_MASK);
|
||||
|
|
Loading…
Reference in New Issue