Commit 6be5f582 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'locking-urgent-2020-12-27' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull locking fixes from Ingo Molnar:
 "Misc fixes/updates:

   - Fix static keys usage in module __init sections

   - Add separate MAINTAINERS entry for static branches/calls

   - Fix lockdep splat with CONFIG_PREEMPTIRQ_EVENTS=y tracing"

* tag 'locking-urgent-2020-12-27' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  softirq: Avoid bad tracing / lockdep interaction
  jump_label/static_call: Add MAINTAINERS
  jump_label: Fix usage in module __init
parents 2eeefc60 91ea62d5
...@@ -16917,6 +16917,22 @@ M: Ion Badulescu <ionut@badula.org> ...@@ -16917,6 +16917,22 @@ M: Ion Badulescu <ionut@badula.org>
S: Odd Fixes S: Odd Fixes
F: drivers/net/ethernet/adaptec/starfire* F: drivers/net/ethernet/adaptec/starfire*
STATIC BRANCH/CALL
M: Peter Zijlstra <peterz@infradead.org>
M: Josh Poimboeuf <jpoimboe@redhat.com>
M: Jason Baron <jbaron@akamai.com>
R: Steven Rostedt <rostedt@goodmis.org>
R: Ard Biesheuvel <ardb@kernel.org>
S: Supported
F: arch/*/include/asm/jump_label*.h
F: arch/*/include/asm/static_call*.h
F: arch/*/kernel/jump_label.c
F: arch/*/kernel/static_call.c
F: include/linux/jump_label*.h
F: include/linux/static_call*.h
F: kernel/jump_label.c
F: kernel/static_call.c
STEC S1220 SKD DRIVER STEC S1220 SKD DRIVER
M: Damien Le Moal <Damien.LeMoal@wdc.com> M: Damien Le Moal <Damien.LeMoal@wdc.com>
L: linux-block@vger.kernel.org L: linux-block@vger.kernel.org
......
...@@ -793,6 +793,7 @@ int jump_label_text_reserved(void *start, void *end) ...@@ -793,6 +793,7 @@ int jump_label_text_reserved(void *start, void *end)
static void jump_label_update(struct static_key *key) static void jump_label_update(struct static_key *key)
{ {
struct jump_entry *stop = __stop___jump_table; struct jump_entry *stop = __stop___jump_table;
bool init = system_state < SYSTEM_RUNNING;
struct jump_entry *entry; struct jump_entry *entry;
#ifdef CONFIG_MODULES #ifdef CONFIG_MODULES
struct module *mod; struct module *mod;
...@@ -804,15 +805,16 @@ static void jump_label_update(struct static_key *key) ...@@ -804,15 +805,16 @@ static void jump_label_update(struct static_key *key)
preempt_disable(); preempt_disable();
mod = __module_address((unsigned long)key); mod = __module_address((unsigned long)key);
if (mod) if (mod) {
stop = mod->jump_entries + mod->num_jump_entries; stop = mod->jump_entries + mod->num_jump_entries;
init = mod->state == MODULE_STATE_COMING;
}
preempt_enable(); preempt_enable();
#endif #endif
entry = static_key_entries(key); entry = static_key_entries(key);
/* if there are no users, entry can be NULL */ /* if there are no users, entry can be NULL */
if (entry) if (entry)
__jump_label_update(key, entry, stop, __jump_label_update(key, entry, stop, init);
system_state < SYSTEM_RUNNING);
} }
#ifdef CONFIG_STATIC_KEYS_SELFTEST #ifdef CONFIG_STATIC_KEYS_SELFTEST
......
...@@ -186,7 +186,7 @@ void __local_bh_enable_ip(unsigned long ip, unsigned int cnt) ...@@ -186,7 +186,7 @@ void __local_bh_enable_ip(unsigned long ip, unsigned int cnt)
* Keep preemption disabled until we are done with * Keep preemption disabled until we are done with
* softirq processing: * softirq processing:
*/ */
preempt_count_sub(cnt - 1); __preempt_count_sub(cnt - 1);
if (unlikely(!in_interrupt() && local_softirq_pending())) { if (unlikely(!in_interrupt() && local_softirq_pending())) {
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment