Lines Matching refs:ref
96 int __must_check percpu_ref_init(struct percpu_ref *ref,
99 void percpu_ref_exit(struct percpu_ref *ref);
100 void percpu_ref_switch_to_atomic(struct percpu_ref *ref,
102 void percpu_ref_switch_to_percpu(struct percpu_ref *ref);
103 void percpu_ref_kill_and_confirm(struct percpu_ref *ref,
105 void percpu_ref_reinit(struct percpu_ref *ref);
117 static inline void percpu_ref_kill(struct percpu_ref *ref) in percpu_ref_kill() argument
119 return percpu_ref_kill_and_confirm(ref, NULL); in percpu_ref_kill()
128 static inline bool __ref_is_percpu(struct percpu_ref *ref, in __ref_is_percpu() argument
146 percpu_ptr = lockless_dereference(ref->percpu_count_ptr); in __ref_is_percpu()
170 static inline void percpu_ref_get_many(struct percpu_ref *ref, unsigned long nr) in percpu_ref_get_many() argument
176 if (__ref_is_percpu(ref, &percpu_count)) in percpu_ref_get_many()
179 atomic_long_add(nr, &ref->count); in percpu_ref_get_many()
192 static inline void percpu_ref_get(struct percpu_ref *ref) in percpu_ref_get() argument
194 percpu_ref_get_many(ref, 1); in percpu_ref_get()
206 static inline bool percpu_ref_tryget(struct percpu_ref *ref) in percpu_ref_tryget() argument
213 if (__ref_is_percpu(ref, &percpu_count)) { in percpu_ref_tryget()
217 ret = atomic_long_inc_not_zero(&ref->count); in percpu_ref_tryget()
240 static inline bool percpu_ref_tryget_live(struct percpu_ref *ref) in percpu_ref_tryget_live() argument
247 if (__ref_is_percpu(ref, &percpu_count)) { in percpu_ref_tryget_live()
250 } else if (!(ref->percpu_count_ptr & __PERCPU_REF_DEAD)) { in percpu_ref_tryget_live()
251 ret = atomic_long_inc_not_zero(&ref->count); in percpu_ref_tryget_live()
269 static inline void percpu_ref_put_many(struct percpu_ref *ref, unsigned long nr) in percpu_ref_put_many() argument
275 if (__ref_is_percpu(ref, &percpu_count)) in percpu_ref_put_many()
277 else if (unlikely(atomic_long_sub_and_test(nr, &ref->count))) in percpu_ref_put_many()
278 ref->release(ref); in percpu_ref_put_many()
292 static inline void percpu_ref_put(struct percpu_ref *ref) in percpu_ref_put() argument
294 percpu_ref_put_many(ref, 1); in percpu_ref_put()
306 static inline bool percpu_ref_is_dying(struct percpu_ref *ref) in percpu_ref_is_dying() argument
308 return ref->percpu_count_ptr & __PERCPU_REF_DEAD; in percpu_ref_is_dying()
319 static inline bool percpu_ref_is_zero(struct percpu_ref *ref) in percpu_ref_is_zero() argument
323 if (__ref_is_percpu(ref, &percpu_count)) in percpu_ref_is_zero()
325 return !atomic_long_read(&ref->count); in percpu_ref_is_zero()