[PATCH 00/37] softirq: Per vector masking v3

Frederic Weisbecker
2019-02-28T17:12:54Z

So this set should hopefully address all reviews from the v2, and
fix all reports from the extremely useful (as always) Kbuild testing
bot. It also completes support for all archs.

Unfortunately the already huge pile is ever growing. I should be able to
offload 2 or 3 of those patches but the rest really belong together.

Changes since v2:

* Fix unused function warning (reported by Kbuild test robot)
- locking/lockdep: Move valid_state() inside CONFIG_TRACE_IRQFLAGS && CONFIG_PROVE_LOCKING

* Added Reviewed-by tags from davem

* Reorder changes introducing u64 to the proper patches (reported by Linus)

* Fix lock usage mask iteration by avoid shifting beyond 63 (reported by Linus)
- locking/lockdep: Introduce lock usage mask iterator

* Fix mark_lock() verbosity by handling all usages in the ask
- locking/lockdep: Report all usages on mark_lock() verbosity mode

* Add SPDX licence identifier on softirq_vector.h (reported by Sebastian)

* Fix several build errors on s390 (reported by Kbuild test robot)
- arch/softirq: Rename softirq_pending fields to softirq_data
- softirq: Introduce disabled softirq vectors bits
- softirq: Check enabled vectors before processing

* Initialize softirq enabled field on all other archs than x86
- parisc: Init softirq enabled field
- powerpc: Init softirq enabled field
- softirq: Init softirq enabled field for default irq_stat definition

* Fix spin_[un]lock_bh_mask() on UP, also some build errors against uninlined spinlocks (reported by Kbuild test robot)
- locking: Introduce spin_[un]lock_bh_mask()

* Socket lock may also execute on HRTIMER_SOFTIRQ, include it on the mask (reported by Sebastian)
- net: Make softirq vector masking finegrained on release_sock()

git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git
softirq/soft-interruptible-v2

HEAD: 63c89028058f5920d4b5a9d38452fa4623469583

Thanks,
Frederic
---

Frederic Weisbecker (37):
locking/lockdep: Move valid_state() inside CONFIG_TRACE_IRQFLAGS && CONFIG_PROVE_LOCKING
locking/lockdep: Use expanded masks on find_usage_*() functions
locking/lockdep: Introduce struct lock_usage
locking/lockdep: Convert usage_mask to u64
locking/lockdep: Introduce lock usage mask iterator
locking/lockdep: Test all incompatible scenario at once in check_irq_usage()
locking/lockdep: Prepare valid_state() to handle plain masks
locking/lockdep: Prepare check_usage_*() to handle plain masks
locking/lockdep: Prepare state_verbose() to handle all softirqs
locking/lockdep: Make mark_lock() fastpath to work with multiple usage at once
locking/lockdep: Save stack trace for each softirq vector involved
locking/lockdep: Report all usages on mark_lock() verbosity mode
softirq: Macrofy softirq vectors
locking/lockdep: Define per vector softirq lock usage states
softirq: Pass softirq vector number to lockdep on vector execution
x86: Revert "x86/irq: Demote irq_cpustat_t::__softirq_pending to u16"
arch/softirq: Rename softirq_pending fields to softirq_data
softirq: Normalize softirq_pending naming scheme
softirq: Convert softirq_pending_*() to set/clear mask scheme
softirq: Introduce disabled softirq vectors bits
softirq: Rename _local_bh_enable() to local_bh_enable_no_softirq()
softirq: Move vectors bits to bottom_half.h
x86: Init softirq enabled field
parisc: Init softirq enabled field
powerpc: Init softirq enabled field
softirq: Init softirq enabled field for default irq_stat definition
softirq: Check enabled vectors before processing
softirq: Remove stale comment
softirq: Uninline !CONFIG_TRACE_IRQFLAGS __local_bh_disable_ip()
softirq: Prepare for mixing all/per-vector masking
softirq: Support per vector masking
locking/lockdep: Remove redundant softirqs on check
locking/lockdep: Update check_flags() according to new layout
locking/lockdep: Branch the new vec-finegrained softirq masking to lockdep
softirq: Allow to soft interrupt vector-specific masked contexts
locking: Introduce spin_[un]lock_bh_mask()
net: Make softirq vector masking finegrained on release_sock()

arch/arm/include/asm/hardirq.h | 2 +-
arch/arm64/include/asm/hardirq.h | 2 +-
arch/h8300/kernel/asm-offsets.c | 2 +-
arch/ia64/include/asm/hardirq.h | 2 +-
arch/ia64/include/asm/processor.h | 2 +-
arch/m68k/include/asm/hardirq.h | 2 +-
arch/m68k/kernel/asm-offsets.c | 2 +-
arch/parisc/include/asm/hardirq.h | 2 +-
arch/parisc/kernel/irq.c | 6 +-
arch/powerpc/include/asm/hardirq.h | 2 +-
arch/powerpc/kernel/irq.c | 5 +-
arch/s390/include/asm/hardirq.h | 11 +-
arch/s390/include/asm/lowcore.h | 2 +-
arch/s390/lib/delay.c | 2 +-
arch/sh/include/asm/hardirq.h | 2 +-
arch/sparc/include/asm/cpudata_64.h | 2 +-
arch/sparc/include/asm/hardirq_64.h | 4 +-
arch/um/include/asm/hardirq.h | 2 +-
arch/x86/include/asm/hardirq.h | 2 +-
arch/x86/kernel/irq.c | 5 +-
drivers/s390/char/sclp.c | 2 +-
drivers/s390/cio/cio.c | 2 +-
include/asm-generic/hardirq.h | 2 +-
include/linux/bottom_half.h | 41 +++-
include/linux/interrupt.h | 87 ++++---
include/linux/irqflags.h | 12 +-
include/linux/lockdep.h | 5 +-
include/linux/softirq_vector.h | 12 +
include/linux/spinlock.h | 14 ++
include/linux/spinlock_api_smp.h | 28 +++
include/linux/spinlock_api_up.h | 13 +
kernel/locking/lockdep.c | 475 ++++++++++++++++++++++++------------
kernel/locking/lockdep_internals.h | 50 +++-
kernel/locking/lockdep_proc.c | 2 +-
kernel/locking/lockdep_states.h | 4 +-
kernel/locking/spinlock.c | 19 ++
kernel/softirq.c | 163 +++++++++----
lib/locking-selftest.c | 4 +-
net/core/sock.c | 8 +-
39 files changed, 715 insertions(+), 289 deletions(-)