Messages in this thread | | | Date | Mon, 06 Dec 2021 09:13:27 +0000 | From | yajun.deng@linux ... | Subject | Re: [PATCH] completion: introduce complete_put() helper function |
| |
December 6, 2021 4:34 PM, "Peter Zijlstra" <peterz@infradead.org> wrote:
> On Mon, Dec 06, 2021 at 12:03:19PM +0800, Yajun Deng wrote: > >> There are many cases where it is necessary to decrease refcount and test, >> then called complete(). So introduce complete_put() helper function. >> >> Signed-off-by: Yajun Deng <yajun.deng@linux.dev> >> --- >> kernel/sched/completion.c | 7 +++++++ >> 1 file changed, 7 insertions(+) >> >> diff --git a/kernel/sched/completion.c b/kernel/sched/completion.c >> index a778554f9dad..dcb737f1edc2 100644 >> --- a/kernel/sched/completion.c >> +++ b/kernel/sched/completion.c >> @@ -38,6 +38,13 @@ void complete(struct completion *x) >> } >> EXPORT_SYMBOL(complete); >> >> +void complete_put(refcount_t *r, struct completion *x) >> +{ >> + if (refcount_dec_and_test(r)) >> + complete(x); >> +} >> +EXPORT_SYMBOL(complete_put); > > Please submit such things as part of the series that makes use of them.
Here is a typical use case: vim drivers/infiniband/core/device.c +101 static void ib_client_put(struct ib_client *client) { if (refcount_dec_and_test(&client->uses)) complete(&client->uses_zero); }
Each driver needs to define a xxx_put() function if they want to use it, we can add this helper function for them.
| |