lkml.org 
[lkml]   [2020]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRE: static_branch_enable() does not work from a __init function?
Date
> From: Peter Zijlstra <peterz@infradead.org>
> Sent: Wednesday, December 16, 2020 2:59 AM
> ...
> So I think the reason your above module doesn't work, while the one in
> vmx_init() does work (for 5.10) should be fixed by the completely
> untested below.
>
> I've no clue about 5.4 and no desire to investigate. That's what distro
> people are for.
>
> Can you verify?
>
> ---
> diff --git a/kernel/jump_label.c b/kernel/jump_label.c
> index 015ef903ce8c..c6a39d662935 100644
> --- a/kernel/jump_label.c
> +++ b/kernel/jump_label.c
> @@ -793,6 +793,7 @@ int jump_label_text_reserved(void *start, void *end)
> static void jump_label_update(struct static_key *key)
> {
> struct jump_entry *stop = __stop___jump_table;
> + bool init = system_state < SYSTEM_RUNNING;
> struct jump_entry *entry;
> #ifdef CONFIG_MODULES
> struct module *mod;
> @@ -804,15 +805,16 @@ static void jump_label_update(struct static_key
> *key)
>
> preempt_disable();
> mod = __module_address((unsigned long)key);
> - if (mod)
> + if (mod) {
> stop = mod->jump_entries + mod->num_jump_entries;
> + init = mod->state == MODULE_STATE_COMING;
> + }
> preempt_enable();
> #endif
> entry = static_key_entries(key);
> /* if there are no users, entry can be NULL */
> if (entry)
> - __jump_label_update(key, entry, stop,
> - system_state < SYSTEM_RUNNING);
> + __jump_label_update(key, entry, stop, init);
> }
>
> #ifdef CONFIG_STATIC_KEYS_SELFTEST

Yes, this patch fixes the issue found by the test module for both
v5.10 and v5.4.

Thank you, Peter!

Dexuan

\
 
 \ /
  Last update: 2020-12-16 21:47    [W:0.162 / U:0.484 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site