Messages in this thread | | | Date | Fri, 3 Nov 2023 19:54:14 +0100 | From | Peter Zijlstra <> | Subject | Re: [RFC 1/2] refcount: introduce generic lockptr funcs |
| |
On Fri, Nov 03, 2023 at 12:16:34PM -0400, Alexander Aring wrote:
> diff --git a/lib/refcount.c b/lib/refcount.c > index a207a8f22b3c..e28678f0f473 100644 > --- a/lib/refcount.c > +++ b/lib/refcount.c > @@ -94,6 +94,34 @@ bool refcount_dec_not_one(refcount_t *r) > } > EXPORT_SYMBOL(refcount_dec_not_one); > > +bool refcount_dec_and_lockptr(refcount_t *r, void (*lock)(void *lockptr), > + void (*unlock)(void *lockptr), void *lockptr) > +{ > + if (refcount_dec_not_one(r)) > + return false; > + > + lock(lockptr); > + if (!refcount_dec_and_test(r)) { > + unlock(lockptr); > + return false; > + } > + > + return true; > +} > +EXPORT_SYMBOL(refcount_dec_and_lockptr);
This is terrible, you're forcing indirect calls on everything.
| |