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

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
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -16917,6 +16917,22 @@ M: Ion Badulescu <ionut@badula.org>
S:	Odd Fixes
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
M:	Damien Le Moal <Damien.LeMoal@wdc.com>
L:	linux-block@vger.kernel.org
+5 −3
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -186,7 +186,7 @@ void __local_bh_enable_ip(unsigned long ip, unsigned int cnt)
	 * Keep preemption disabled until we are done with
	 * softirq processing:
	 */
	preempt_count_sub(cnt - 1);
	__preempt_count_sub(cnt - 1);

	if (unlikely(!in_interrupt() && local_softirq_pending())) {
		/*