[GIT PULL] locking and misc x86 updates for v4.20

Ingo Molnar
2018-10-23T10:26:16Z

Linus,

Please pull the latest locking-core-for-linus git tree from:

git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking-core-for-linus

# HEAD: 01a14bda11add9dcd4a59200f13834d634559935 locking/lockdep: Make global debug_locks* variables read-mostly

Lots of changes in this cycle - in part because locking/core attracted a
number of related x86 low level work which was easier to handle in a
single tree:

- Linux Kernel Memory Consistency Model updates
(Alan Stern, Paul E. McKenney, Andrea Parri)

- lockdep scalability improvements and micro-optimizations (Waiman Long)

- rwsem improvements (Waiman Long)

- spinlock micro-optimization (Matthew Wilcox)

- qspinlocks: Provide a liveness guarantee (more fairness) on x86.
(Peter Zijlstra)

- Add support for relative references in jump tables on arm64, x86 and
s390 to optimize jump labels (Ard Biesheuvel, Heiko Carstens)

- Be a lot less permissive on weird (kernel address) uaccess faults on
x86: BUG() when uaccess helpers fault on kernel addresses (Jann Horn)

- macrofy x86 asm statements to un-confuse the GCC inliner. (Nadav Amit)

- ... and a handful of other smaller changes as well.

Thanks,

Ingo

------------------>
Adam Borowski (1):
x86/defconfig: Enable CONFIG_USB_XHCI_HCD=y

Alan Stern (1):
tools/memory-model: Add extra ordering for locks and remove it for ordinary release/acquire

Andrea Parri (1):
locking/memory-barriers: Replace smp_cond_acquire() with smp_cond_load_acquire()

Andrew Murray (1):
Documentation/lockstat: Fix trivial typo

Ard Biesheuvel (10):
jump_label: Abstract jump_entry member accessors
jump_label: Implement generic support for relative references
arm64/kernel: jump_label: Switch to relative references
x86: Add support for 64-bit place relative relocations
x86/jump_label: Switch to jump_entry accessors
x86/jump_table: Use relative references
jump_label: Annotate entries that operate on __init code earlier
jump_table: Move entries into ro_after_init region
s390/vmlinux.lds: Move JUMP_TABLE_DATA into output section
jump_label: Fix NULL dereference bug in __jump_label_mod_update()

Borislav Petkov (1):
jump_label: Use static_key_linked() accessor

Heiko Carstens (1):
s390/jump_label: Switch to relative references

Jann Horn (7):
x86/kprobes: Refactor kprobes_fault() like kprobe_exceptions_notify()
x86/kprobes: Inline kprobe_exceptions_notify() into do_general_protection()
x86/kprobes: Stop calling fixup_exception() from kprobe_fault_handler()
x86/extable: Introduce _ASM_EXTABLE_UA for uaccess fixups
x86/fault: Plumb error code and fault address through to fault handlers
x86/fault: BUG() when uaccess helpers fault on kernel addresses
lkdtm: Test copy_to_user() on bad kernel pointer under KERNEL_DS

Lance Roy (1):
futex: Replace spin_is_locked() with lockdep

Masahiro Yamada (1):
x86/build: Remove unused CONFIG_AS_CRC32

Matthew Wilcox (1):
locking/spinlocks: Remove an instruction from spin and write locks

Nadav Amit (10):
kbuild/arch/xtensa: Define LINKER_SCRIPT for the linker script
kbuild/Makefile: Prepare for using macros in inline assembly code to work around asm() related GCC inlining bugs
x86/objtool: Use asm macros to work around GCC inlining bugs
x86/refcount: Work around GCC inlining bug
x86/alternatives: Macrofy lock prefixes to work around GCC inlining bugs
x86/bug: Macrofy the BUG table section handling, to work around GCC inlining bugs
x86/paravirt: Work around GCC inlining bugs when compiling paravirt ops
x86/extable: Macrofy inline assembly code to work around GCC inlining bugs
x86/cpufeature: Macrofy inline assembly code to work around GCC inlining bugs
x86/jump-labels: Macrofy inline assembly code to work around GCC inlining bugs

Paul E. McKenney (2):
tools/memory-model: Add litmus-test naming scheme
tools/memory-model: Add more LKMM limitations

Peter Zijlstra (6):
jump_label/lockdep: Assert we hold the hotplug lock for _cpuslocked() operations
locking/lockdep, cpu/hotplug: Annotate AP thread
locking/qspinlock: Re-order code
locking/qspinlock: Rework some comments
x86/asm: 'Simplify' GEN_*_RMWcc() macros
locking/qspinlock, x86: Provide liveness guarantee

SeongJae Park (1):
tools/memory-model: Fix a README typo

Steven Rostedt (VMware) (1):
locking/rtmutex: Fix the preprocessor logic with normal #ifdef #else #endif

Waiman Long (11):
locking/rwsem: Exit read lock slowpath if queue empty & no writer
locking/rwsem: Make owner store task pointer of last owning reader
locking/lockdep: Remove add_chain_cache_classes()
locking/lockdep: Eliminate redundant IRQs check in __lock_acquire()
locking/lockdep: Add a faster path in __lock_release()
locking/lockdep: Make class->ops a percpu counter and move it under CONFIG_DEBUG_LOCKDEP=y
locking/lockdep: Remove duplicated 'lock_class_ops' percpu array
locking/qspinlock_stat: Count instances of nested lock slowpaths
locking/pvqspinlock: Extend node size when pvqspinlock is configured
locking/lockdep: Fix debug_locks off performance problem
locking/lockdep: Make global debug_locks* variables read-mostly

Documentation/locking/lockstat.txt | 2 +-
Documentation/memory-barriers.txt | 3 +-
Makefile | 9 +-
arch/Kconfig | 3 +
arch/arm64/Kconfig | 1 +
arch/arm64/include/asm/jump_label.h | 38 ++---
arch/arm64/kernel/jump_label.c | 6 +-
arch/s390/Kconfig | 1 +
arch/s390/include/asm/jump_label.h | 40 ++---
arch/s390/kernel/jump_label.c | 11 +-
arch/s390/kernel/vmlinux.lds.S | 1 +
arch/x86/Kconfig | 1 +
arch/x86/Makefile | 8 +-
arch/x86/configs/i386_defconfig | 1 +
arch/x86/configs/x86_64_defconfig | 1 +
arch/x86/entry/calling.h | 2 +-
arch/x86/include/asm/alternative-asm.h | 20 ++-
arch/x86/include/asm/alternative.h | 11 +-
arch/x86/include/asm/asm.h | 57 +++----
arch/x86/include/asm/atomic.h | 8 +-
arch/x86/include/asm/atomic64_64.h | 8 +-
arch/x86/include/asm/bitops.h | 9 +-
arch/x86/include/asm/bug.h | 98 ++++++-----
arch/x86/include/asm/cpufeature.h | 82 +++++----
arch/x86/include/asm/elf.h | 3 +-
arch/x86/include/asm/extable.h | 3 +-
arch/x86/include/asm/fpu/internal.h | 2 +-
arch/x86/include/asm/futex.h | 6 +-
arch/x86/include/asm/jump_label.h | 80 ++-------
arch/x86/include/asm/local.h | 8 +-
arch/x86/include/asm/paravirt_types.h | 56 +++----
arch/x86/include/asm/preempt.h | 2 +-
arch/x86/include/asm/ptrace.h | 2 +
arch/x86/include/asm/qspinlock.h | 15 ++
arch/x86/include/asm/refcount.h | 79 +++++----
arch/x86/include/asm/rmwcc.h | 69 ++++----
arch/x86/include/asm/uaccess.h | 22 +--
arch/x86/kernel/cpu/mcheck/mce.c | 2 +-
arch/x86/kernel/jump_label.c | 62 +++----
arch/x86/kernel/kprobes/core.c | 38 -----
arch/x86/kernel/macros.S | 16 ++
arch/x86/kernel/module.c | 6 +
arch/x86/kernel/traps.c | 16 +-
arch/x86/lib/checksum_32.S | 4 +-
arch/x86/lib/copy_user_64.S | 90 +++++-----
arch/x86/lib/csum-copy_64.S | 8 +-
arch/x86/lib/getuser.S | 12 +-
arch/x86/lib/putuser.S | 10 +-
arch/x86/lib/usercopy_32.c | 126 +++++++-------
arch/x86/lib/usercopy_64.c | 4 +-
arch/x86/mm/extable.c | 114 +++++++++++--
arch/x86/mm/fault.c | 26 +--
arch/x86/tools/relocs.c | 10 ++
arch/x86/um/asm/elf.h | 3 +-
arch/xtensa/kernel/Makefile | 4 +-
drivers/misc/lkdtm/core.c | 1 +
drivers/misc/lkdtm/lkdtm.h | 1 +
drivers/misc/lkdtm/usercopy.c | 13 ++
fs/namespace.c | 2 +
include/asm-generic/bug.h | 8 +-
include/asm-generic/qrwlock.h | 7 +-
include/asm-generic/qspinlock.h | 16 +-
include/asm-generic/vmlinux.lds.h | 11 +-
include/linux/compiler.h | 56 +++++--
include/linux/debug_locks.h | 4 +-
include/linux/jump_label.h | 65 ++++++-
include/linux/lockdep.h | 7 +-
include/linux/rwsem.h | 4 +-
include/linux/sched.h | 6 +
init/main.c | 1 -
kernel/cpu.c | 28 ++++
kernel/futex.c | 4 +-
kernel/jump_label.c | 107 ++++++------
kernel/locking/lockdep.c | 116 ++++---------
kernel/locking/lockdep_internals.h | 27 +++
kernel/locking/lockdep_proc.c | 2 +-
kernel/locking/qspinlock.c | 143 +++++++++++-----
kernel/locking/qspinlock_paravirt.h | 4 +-
kernel/locking/qspinlock_stat.h | 6 +
kernel/locking/rtmutex.c | 4 +-
kernel/locking/rwsem-xadd.c | 15 +-
kernel/locking/rwsem.c | 7 +-
kernel/locking/rwsem.h | 95 ++++++++---
kernel/module.c | 9 +
lib/debug_locks.c | 6 +-
mm/maccess.c | 6 +
scripts/Kbuild.include | 4 +-
scripts/mod/Makefile | 2 +
tools/memory-model/Documentation/explanation.txt | 186 ++++++++++++++++-----
tools/memory-model/Documentation/recipes.txt | 2 +-
tools/memory-model/README | 39 +++++
tools/memory-model/linux-kernel.cat | 8 +-
.../ISA2+pooncelock+pooncelock+pombonce.litmus | 7 +-
tools/memory-model/litmus-tests/README | 104 +++++++++++-
tools/objtool/special.c | 4 +-
95 files changed, 1522 insertions(+), 934 deletions(-)
create mode 100644 arch/x86/kernel/macros.S