2022-03-30 14:43:59

by Sven Schnelle

[permalink] [raw]
Subject: [PATCH] entry: fix compile error in dynamic_irqentry_exit_cond_resched()

kernel/entry/common.c: In function ‘dynamic_irqentry_exit_cond_resched’:
kernel/entry/common.c:409:14: error: implicit declaration of function ‘static_key_unlikely’; did you mean ‘static_key_enable’? [-Werror=implicit-function-declaration]
409 | if (!static_key_unlikely(&sk_dynamic_irqentry_exit_cond_resched))
| ^~~~~~~~~~~~~~~~~~~
| static_key_enable

static_key_unlikely() should be static_branch_unlikely().

Fixes: 99cf983cc8bca ("sched/preempt: Add PREEMPT_DYNAMIC using static keys")
Signed-off-by: Sven Schnelle <[email protected]>
---
kernel/entry/common.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/entry/common.c b/kernel/entry/common.c
index ef8d94a98b7e..371ee8914af1 100644
--- a/kernel/entry/common.c
+++ b/kernel/entry/common.c
@@ -406,7 +406,7 @@ DEFINE_STATIC_CALL(irqentry_exit_cond_resched, raw_irqentry_exit_cond_resched);
DEFINE_STATIC_KEY_TRUE(sk_dynamic_irqentry_exit_cond_resched);
void dynamic_irqentry_exit_cond_resched(void)
{
- if (!static_key_unlikely(&sk_dynamic_irqentry_exit_cond_resched))
+ if (!static_branch_unlikely(&sk_dynamic_irqentry_exit_cond_resched))
return;
raw_irqentry_exit_cond_resched();
}
--
2.32.0


2022-03-30 15:28:06

by Mark Rutland

[permalink] [raw]
Subject: Re: [PATCH] entry: fix compile error in dynamic_irqentry_exit_cond_resched()

On Wed, Mar 30, 2022 at 10:43:28AM +0200, Sven Schnelle wrote:
> kernel/entry/common.c: In function ‘dynamic_irqentry_exit_cond_resched’:
> kernel/entry/common.c:409:14: error: implicit declaration of function ‘static_key_unlikely’; did you mean ‘static_key_enable’? [-Werror=implicit-function-declaration]
> 409 | if (!static_key_unlikely(&sk_dynamic_irqentry_exit_cond_resched))
> | ^~~~~~~~~~~~~~~~~~~
> | static_key_enable
>
> static_key_unlikely() should be static_branch_unlikely().
>
> Fixes: 99cf983cc8bca ("sched/preempt: Add PREEMPT_DYNAMIC using static keys")
> Signed-off-by: Sven Schnelle <[email protected]>

Sorry about this. FWIW:

Reviewed-by: Mark Rutland <[email protected]>

For context for others, this'll only show up on architectures which both use
the generic entry code and select CONFIG_HAVE_PREEMPT_DYNAMIC_KEY. Today, only
arm64 selects CONFIG_HAVE_PREEMPT_DYNAMIC_KEY, and it doesn't use the generic
entry code.

Sven, I assume you're looking at wiring this up on s390 or parisc?

Thanks,
Mark.

> ---
> kernel/entry/common.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/entry/common.c b/kernel/entry/common.c
> index ef8d94a98b7e..371ee8914af1 100644
> --- a/kernel/entry/common.c
> +++ b/kernel/entry/common.c
> @@ -406,7 +406,7 @@ DEFINE_STATIC_CALL(irqentry_exit_cond_resched, raw_irqentry_exit_cond_resched);
> DEFINE_STATIC_KEY_TRUE(sk_dynamic_irqentry_exit_cond_resched);
> void dynamic_irqentry_exit_cond_resched(void)
> {
> - if (!static_key_unlikely(&sk_dynamic_irqentry_exit_cond_resched))
> + if (!static_branch_unlikely(&sk_dynamic_irqentry_exit_cond_resched))
> return;
> raw_irqentry_exit_cond_resched();
> }
> --
> 2.32.0
>

2022-03-31 03:43:00

by Sven Schnelle

[permalink] [raw]
Subject: Re: [PATCH] entry: fix compile error in dynamic_irqentry_exit_cond_resched()

Mark Rutland <[email protected]> writes:

> On Wed, Mar 30, 2022 at 10:43:28AM +0200, Sven Schnelle wrote:
>> kernel/entry/common.c: In function ‘dynamic_irqentry_exit_cond_resched’:
>> kernel/entry/common.c:409:14: error: implicit declaration of
>> function ‘static_key_unlikely’; did you mean ‘static_key_enable’?
>> [-Werror=implicit-function-declaration]
>> 409 | if (!static_key_unlikely(&sk_dynamic_irqentry_exit_cond_resched))
>> | ^~~~~~~~~~~~~~~~~~~
>> | static_key_enable
>>
>> static_key_unlikely() should be static_branch_unlikely().
>>
>> Fixes: 99cf983cc8bca ("sched/preempt: Add PREEMPT_DYNAMIC using static keys")
>> Signed-off-by: Sven Schnelle <[email protected]>
>
> Sorry about this. FWIW:
>
> Reviewed-by: Mark Rutland <[email protected]>
>
> For context for others, this'll only show up on architectures which both use
> the generic entry code and select CONFIG_HAVE_PREEMPT_DYNAMIC_KEY. Today, only
> arm64 selects CONFIG_HAVE_PREEMPT_DYNAMIC_KEY, and it doesn't use the generic
> entry code.
>
> Sven, I assume you're looking at wiring this up on s390 or parisc?

Yes, i'm looking whether we can use the same implementation on s390. :)

I reported it already on 03/18, but looks like that Mail was lost
somehow:

https://www.spinics.net/lists/kernel/msg4283802.html

I was wondering whether we can make dynamic_irqentry_exit_cond_resched()
static, so it gets inlined. On s390 the compiler generates a branch to
that function just to return immediately if the static key isn't enabled.
With static it would get inlined, and therefore save one function call.
What do you think?

Thanks
Sven

Subject: [tip: sched/urgent] entry: Fix compile error in dynamic_irqentry_exit_cond_resched()

The following commit has been merged into the sched/urgent branch of tip:

Commit-ID: 0a70045ed8516dfcff4b5728557e1ef3fd017c53
Gitweb: https://git.kernel.org/tip/0a70045ed8516dfcff4b5728557e1ef3fd017c53
Author: Sven Schnelle <[email protected]>
AuthorDate: Wed, 30 Mar 2022 10:43:28 +02:00
Committer: Peter Zijlstra <[email protected]>
CommitterDate: Tue, 05 Apr 2022 09:59:36 +02:00

entry: Fix compile error in dynamic_irqentry_exit_cond_resched()

kernel/entry/common.c: In function ‘dynamic_irqentry_exit_cond_resched’:
kernel/entry/common.c:409:14: error: implicit declaration of function ‘static_key_unlikely’; did you mean ‘static_key_enable’? [-Werror=implicit-function-declaration]
409 | if (!static_key_unlikely(&sk_dynamic_irqentry_exit_cond_resched))
| ^~~~~~~~~~~~~~~~~~~
| static_key_enable

static_key_unlikely() should be static_branch_unlikely().

Fixes: 99cf983cc8bca ("sched/preempt: Add PREEMPT_DYNAMIC using static keys")
Signed-off-by: Sven Schnelle <[email protected]>
Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
Reviewed-by: Mark Rutland <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
---
kernel/entry/common.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/entry/common.c b/kernel/entry/common.c
index e57a224..93c3b86 100644
--- a/kernel/entry/common.c
+++ b/kernel/entry/common.c
@@ -392,7 +392,7 @@ DEFINE_STATIC_CALL(irqentry_exit_cond_resched, raw_irqentry_exit_cond_resched);
DEFINE_STATIC_KEY_TRUE(sk_dynamic_irqentry_exit_cond_resched);
void dynamic_irqentry_exit_cond_resched(void)
{
- if (!static_key_unlikely(&sk_dynamic_irqentry_exit_cond_resched))
+ if (!static_branch_unlikely(&sk_dynamic_irqentry_exit_cond_resched))
return;
raw_irqentry_exit_cond_resched();
}