> From: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > 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