Lines Matching refs:kref
44 struct kref { struct
49 kref_init(struct kref *kref) in kref_init() argument
51 atomic_store_relaxed(&kref->kr_count, 1); in kref_init()
55 kref_get(struct kref *kref) in kref_get() argument
58 atomic_inc_uint_nv(&kref->kr_count); in kref_get()
64 kref_get_unless_zero(struct kref *kref) in kref_get_unless_zero() argument
69 count = atomic_load_relaxed(&kref->kr_count); in kref_get_unless_zero()
72 } while (atomic_cas_uint(&kref->kr_count, count, (count + 1)) != in kref_get_unless_zero()
79 kref_sub(struct kref *kref, unsigned int count, void (*release)(struct kref *)) in kref_sub() argument
86 old = atomic_load_relaxed(&kref->kr_count); in kref_sub()
90 } while (atomic_cas_uint(&kref->kr_count, old, new) != old); in kref_sub()
94 (*release)(kref); in kref_sub()
102 kref_put_lock(struct kref *kref, void (*release)(struct kref *), in kref_put_lock() argument
110 old = atomic_load_relaxed(&kref->kr_count); in kref_put_lock()
114 if (atomic_add_int_nv(&kref->kr_count, -1) == 0) { in kref_put_lock()
116 (*release)(kref); in kref_put_lock()
123 } while (atomic_cas_uint(&kref->kr_count, old, new) != old); in kref_put_lock()
129 kref_put(struct kref *kref, void (*release)(struct kref *)) in kref_put() argument
132 return kref_sub(kref, 1, release); in kref_put()
136 kref_put_mutex(struct kref *kref, void (*release)(struct kref *), in kref_put_mutex() argument
144 old = atomic_load_relaxed(&kref->kr_count); in kref_put_mutex()
148 if (atomic_add_int_nv(&kref->kr_count, -1) == 0) { in kref_put_mutex()
150 (*release)(kref); in kref_put_mutex()
157 } while (atomic_cas_uint(&kref->kr_count, old, new) != old); in kref_put_mutex()
163 kref_read(const struct kref *kref) in kref_read() argument
166 return atomic_load_relaxed(&kref->kr_count); in kref_read()
174 kref_referenced_p(struct kref *kref) in kref_referenced_p() argument
177 return (0 < kref->kr_count); in kref_referenced_p()
181 kref_exclusive_p(struct kref *kref) in kref_exclusive_p() argument
184 KASSERT(0 < kref->kr_count); in kref_exclusive_p()
185 return (kref->kr_count == 1); in kref_exclusive_p()