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 <[email protected]>
---
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);
+
/**
* complete_all: - signals all threads waiting on this completion
* @x: holds the state of this particular completion
--
2.32.0
Hi Yajun,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on tip/sched/core]
[also build test WARNING on v5.16-rc4 next-20211203]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Yajun-Deng/completion-introduce-complete_put-helper-function/20211206-120632
base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 8c92606ab81086db00cbb73347d124b4eb169b7e
config: hexagon-randconfig-r031-20211206 (https://download.01.org/0day-ci/archive/20211206/[email protected]/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project f50be8eb0a12a61d23db6cda452c693001d76898)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/6d181628873250fd66a8f2da19182fec95973b6e
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Yajun-Deng/completion-introduce-complete_put-helper-function/20211206-120632
git checkout 6d181628873250fd66a8f2da19182fec95973b6e
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash kernel/sched/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
All warnings (new ones prefixed by >>):
>> kernel/sched/completion.c:41:6: warning: no previous prototype for function 'complete_put' [-Wmissing-prototypes]
void complete_put(refcount_t *r, struct completion *x)
^
kernel/sched/completion.c:41:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
void complete_put(refcount_t *r, struct completion *x)
^
static
1 warning generated.
vim +/complete_put +41 kernel/sched/completion.c
40
> 41 void complete_put(refcount_t *r, struct completion *x)
42 {
43 if (refcount_dec_and_test(r))
44 complete(x);
45 }
46 EXPORT_SYMBOL(complete_put);
47
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
Hi Yajun,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on tip/sched/core]
[also build test WARNING on v5.16-rc4 next-20211203]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Yajun-Deng/completion-introduce-complete_put-helper-function/20211206-120632
base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 8c92606ab81086db00cbb73347d124b4eb169b7e
config: arm-randconfig-r033-20211206 (https://download.01.org/0day-ci/archive/20211206/[email protected]/config)
compiler: arm-linux-gnueabi-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/6d181628873250fd66a8f2da19182fec95973b6e
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Yajun-Deng/completion-introduce-complete_put-helper-function/20211206-120632
git checkout 6d181628873250fd66a8f2da19182fec95973b6e
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=arm SHELL=/bin/bash kernel/sched/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
All warnings (new ones prefixed by >>):
>> kernel/sched/completion.c:41:6: warning: no previous prototype for 'complete_put' [-Wmissing-prototypes]
41 | void complete_put(refcount_t *r, struct completion *x)
| ^~~~~~~~~~~~
vim +/complete_put +41 kernel/sched/completion.c
40
> 41 void complete_put(refcount_t *r, struct completion *x)
42 {
43 if (refcount_dec_and_test(r))
44 complete(x);
45 }
46 EXPORT_SYMBOL(complete_put);
47
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
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 <[email protected]>
> ---
> 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.
December 6, 2021 4:34 PM, "Peter Zijlstra" <[email protected]> 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 <[email protected]>
>> ---
>> 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.