Riley Andrews
c8de3f45ee
mutex: Add a delay into the SPIN_ON_OWNER wait loop.
...
On arm systems the spin on owner optimization can intermittently cause a
lockup that's usually as long as the waiting thread's cpu timeslice. The
repeated mutex aquisitions + atomics in a single spinning thread can
completely lock out the owner from releasing the kernel mutex. The
owner needs to acquire a spinlock on the relase path and this spinlock
can share a monitor with the other locks and atomics on the waiter path.
Rate limit the waiter so that the thread releasing the mutex never
is starved.
Bug 23036902
Change-Id: Ie1b64275a0c6141f94faaf3e63fcbf9b5438140c
Signed-off-by: Riley Andrews <riandrews@google.com>
Git-commit: 84d8ce7e0025cac60a8a379a7ee3e59d640fbc03
Git-repo: https://android.googlesource.com/kernel/msm.git
Signed-off-by: Trilok Soni <tsoni@codeaurora.org>
2017-05-23 16:22:46 -07:00
..
lockdep.c
lockdep: Fix report formatting
2016-12-06 10:40:08 +01:00
lockdep_internals.h
lockdep: Limit static allocations if PROVE_LOCKING_SMALL is defined
2016-11-18 11:33:19 -08:00
lockdep_proc.c
lockdep: Fix lock_chain::base size
2016-04-23 13:53:03 +02:00
lockdep_states.h
locktorture.c
lcoking/locktorture: Simplify the torture_runnable computation
2016-04-28 10:57:51 +02:00
Makefile
locking/lglock: Remove lglock implementation
2016-09-22 15:25:56 +02:00
mcs_spinlock.h
locking/mcs: Fix mcs_spin_lock() ordering
2016-02-29 10:02:41 +01:00
mutex-debug.c
locking: avoid passing around 'thread_info' in mutex debugging code
2016-06-23 12:11:17 -07:00
mutex-debug.h
Merge branch 'locking-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2016-07-25 12:41:29 -07:00
mutex.c
mutex: Add a delay into the SPIN_ON_OWNER wait loop.
2017-05-23 16:22:46 -07:00
mutex.h
Merge branch 'locking-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2016-07-25 12:41:29 -07:00
osq_lock.c
locking/osq: Fix ordering of node initialisation in osq_lock
2015-12-17 11:40:29 -08:00
percpu-rwsem.c
locking/percpu-rwsem: Optimize readers and reduce global impact
2016-08-10 14:34:01 +02:00
qrwlock.c
locking/atomic, arch/qrwlock: Employ atomic_fetch_add_acquire()
2016-06-16 10:48:34 +02:00
qspinlock.c
locking/qspinlock: Use __this_cpu_dec() instead of full-blown this_cpu_dec()
2016-06-27 11:37:41 +02:00
qspinlock_paravirt.h
locking/pv-qspinlock: Use cmpxchg_release() in __pv_queued_spin_unlock()
2016-09-22 15:25:51 +02:00
qspinlock_stat.h
locking/pvstat: Separate wait_again and spurious wakeup stats
2016-08-10 14:16:02 +02:00
rtmutex-debug.c
rtmutex: Cleanup deadlock detector debug logic
2014-06-21 22:05:30 +02:00
rtmutex-debug.h
rtmutex: Cleanup deadlock detector debug logic
2014-06-21 22:05:30 +02:00
rtmutex.c
locking/rtmutex: Prevent dequeue vs. unlock race
2016-12-02 11:13:26 +01:00
rtmutex.h
rtmutex: Cleanup deadlock detector debug logic
2014-06-21 22:05:30 +02:00
rtmutex_common.h
locking/rtmutex: Use READ_ONCE() in rt_mutex_owner()
2016-12-02 11:13:26 +01:00
rwsem-spinlock.c
locking/rwsem: Fix down_write_killable() for CONFIG_RWSEM_GENERIC_SPINLOCK=y
2017-03-22 12:43:40 +01:00
rwsem-xadd.c
locking/rwsem: Scan the wait_list for readers only once
2016-08-18 15:37:11 +02:00
rwsem.c
locking/rwsem: Add reader-owned state to the owner field
2016-06-08 15:16:59 +02:00
rwsem.h
locking/rwsem: Protect all writes to owner by WRITE_ONCE()
2016-06-08 15:16:59 +02:00
semaphore.c
locking/semaphore: Resolve some shadow warnings
2014-09-04 07:17:24 +02:00
spinlock.c
spinlock: Add spin_lock_bh_nested()
2015-01-03 14:32:57 -05:00
spinlock_debug.c
lib: spinlock: Cause a watchdog bite on spin_dump
2016-12-05 10:35:32 -08:00