c4b6927bb6
When add into waiting list will be prio aware, lower prio value means higher priority task will get lock before lower priority task. Only try to preempt waiters with which task priority which is higher than DEFAULT_PRIO. To avoid starvation, add count to record how many waiters preempt to queue in wait list. If preempt count is exceed MAX_PREEMPT_ALLOWED, use simple FIFO to queue in the wait list until the wait list is empty. Change-Id: I4d5fe6a823a16c9762e2e2f416d34bdd701341c4 Signed-off-by: Maria Yu <aiquny@codeaurora.org> Signed-off-by: Biao long <blong@codeaurora.org>
254 lines
4.8 KiB
Text
254 lines
4.8 KiB
Text
#
|
|
# The ARCH_INLINE foo is necessary because select ignores "depends on"
|
|
#
|
|
config ARCH_INLINE_SPIN_TRYLOCK
|
|
bool
|
|
|
|
config ARCH_INLINE_SPIN_TRYLOCK_BH
|
|
bool
|
|
|
|
config ARCH_INLINE_SPIN_LOCK
|
|
bool
|
|
|
|
config ARCH_INLINE_SPIN_LOCK_BH
|
|
bool
|
|
|
|
config ARCH_INLINE_SPIN_LOCK_IRQ
|
|
bool
|
|
|
|
config ARCH_INLINE_SPIN_LOCK_IRQSAVE
|
|
bool
|
|
|
|
config ARCH_INLINE_SPIN_UNLOCK
|
|
bool
|
|
|
|
config ARCH_INLINE_SPIN_UNLOCK_BH
|
|
bool
|
|
|
|
config ARCH_INLINE_SPIN_UNLOCK_IRQ
|
|
bool
|
|
|
|
config ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE
|
|
bool
|
|
|
|
|
|
config ARCH_INLINE_READ_TRYLOCK
|
|
bool
|
|
|
|
config ARCH_INLINE_READ_LOCK
|
|
bool
|
|
|
|
config ARCH_INLINE_READ_LOCK_BH
|
|
bool
|
|
|
|
config ARCH_INLINE_READ_LOCK_IRQ
|
|
bool
|
|
|
|
config ARCH_INLINE_READ_LOCK_IRQSAVE
|
|
bool
|
|
|
|
config ARCH_INLINE_READ_UNLOCK
|
|
bool
|
|
|
|
config ARCH_INLINE_READ_UNLOCK_BH
|
|
bool
|
|
|
|
config ARCH_INLINE_READ_UNLOCK_IRQ
|
|
bool
|
|
|
|
config ARCH_INLINE_READ_UNLOCK_IRQRESTORE
|
|
bool
|
|
|
|
|
|
config ARCH_INLINE_WRITE_TRYLOCK
|
|
bool
|
|
|
|
config ARCH_INLINE_WRITE_LOCK
|
|
bool
|
|
|
|
config ARCH_INLINE_WRITE_LOCK_BH
|
|
bool
|
|
|
|
config ARCH_INLINE_WRITE_LOCK_IRQ
|
|
bool
|
|
|
|
config ARCH_INLINE_WRITE_LOCK_IRQSAVE
|
|
bool
|
|
|
|
config ARCH_INLINE_WRITE_UNLOCK
|
|
bool
|
|
|
|
config ARCH_INLINE_WRITE_UNLOCK_BH
|
|
bool
|
|
|
|
config ARCH_INLINE_WRITE_UNLOCK_IRQ
|
|
bool
|
|
|
|
config ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE
|
|
bool
|
|
|
|
config UNINLINE_SPIN_UNLOCK
|
|
bool
|
|
|
|
#
|
|
# lock_* functions are inlined when:
|
|
# - DEBUG_SPINLOCK=n and GENERIC_LOCKBREAK=n and ARCH_INLINE_*LOCK=y
|
|
#
|
|
# trylock_* functions are inlined when:
|
|
# - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y
|
|
#
|
|
# unlock and unlock_irq functions are inlined when:
|
|
# - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y
|
|
# or
|
|
# - DEBUG_SPINLOCK=n and PREEMPT=n
|
|
#
|
|
# unlock_bh and unlock_irqrestore functions are inlined when:
|
|
# - DEBUG_SPINLOCK=n and ARCH_INLINE_*LOCK=y
|
|
#
|
|
|
|
if !DEBUG_SPINLOCK
|
|
|
|
config INLINE_SPIN_TRYLOCK
|
|
def_bool y
|
|
depends on ARCH_INLINE_SPIN_TRYLOCK
|
|
|
|
config INLINE_SPIN_TRYLOCK_BH
|
|
def_bool y
|
|
depends on ARCH_INLINE_SPIN_TRYLOCK_BH
|
|
|
|
config INLINE_SPIN_LOCK
|
|
def_bool y
|
|
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK
|
|
|
|
config INLINE_SPIN_LOCK_BH
|
|
def_bool y
|
|
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_BH
|
|
|
|
config INLINE_SPIN_LOCK_IRQ
|
|
def_bool y
|
|
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_IRQ
|
|
|
|
config INLINE_SPIN_LOCK_IRQSAVE
|
|
def_bool y
|
|
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_SPIN_LOCK_IRQSAVE
|
|
|
|
config INLINE_SPIN_UNLOCK_BH
|
|
def_bool y
|
|
depends on ARCH_INLINE_SPIN_UNLOCK_BH
|
|
|
|
config INLINE_SPIN_UNLOCK_IRQ
|
|
def_bool y
|
|
depends on !PREEMPT || ARCH_INLINE_SPIN_UNLOCK_IRQ
|
|
|
|
config INLINE_SPIN_UNLOCK_IRQRESTORE
|
|
def_bool y
|
|
depends on ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE
|
|
|
|
|
|
config INLINE_READ_TRYLOCK
|
|
def_bool y
|
|
depends on ARCH_INLINE_READ_TRYLOCK
|
|
|
|
config INLINE_READ_LOCK
|
|
def_bool y
|
|
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK
|
|
|
|
config INLINE_READ_LOCK_BH
|
|
def_bool y
|
|
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_BH
|
|
|
|
config INLINE_READ_LOCK_IRQ
|
|
def_bool y
|
|
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_IRQ
|
|
|
|
config INLINE_READ_LOCK_IRQSAVE
|
|
def_bool y
|
|
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_READ_LOCK_IRQSAVE
|
|
|
|
config INLINE_READ_UNLOCK
|
|
def_bool y
|
|
depends on !PREEMPT || ARCH_INLINE_READ_UNLOCK
|
|
|
|
config INLINE_READ_UNLOCK_BH
|
|
def_bool y
|
|
depends on ARCH_INLINE_READ_UNLOCK_BH
|
|
|
|
config INLINE_READ_UNLOCK_IRQ
|
|
def_bool y
|
|
depends on !PREEMPT || ARCH_INLINE_READ_UNLOCK_IRQ
|
|
|
|
config INLINE_READ_UNLOCK_IRQRESTORE
|
|
def_bool y
|
|
depends on ARCH_INLINE_READ_UNLOCK_IRQRESTORE
|
|
|
|
|
|
config INLINE_WRITE_TRYLOCK
|
|
def_bool y
|
|
depends on ARCH_INLINE_WRITE_TRYLOCK
|
|
|
|
config INLINE_WRITE_LOCK
|
|
def_bool y
|
|
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK
|
|
|
|
config INLINE_WRITE_LOCK_BH
|
|
def_bool y
|
|
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_BH
|
|
|
|
config INLINE_WRITE_LOCK_IRQ
|
|
def_bool y
|
|
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_IRQ
|
|
|
|
config INLINE_WRITE_LOCK_IRQSAVE
|
|
def_bool y
|
|
depends on !GENERIC_LOCKBREAK && ARCH_INLINE_WRITE_LOCK_IRQSAVE
|
|
|
|
config INLINE_WRITE_UNLOCK
|
|
def_bool y
|
|
depends on !PREEMPT || ARCH_INLINE_WRITE_UNLOCK
|
|
|
|
config INLINE_WRITE_UNLOCK_BH
|
|
def_bool y
|
|
depends on ARCH_INLINE_WRITE_UNLOCK_BH
|
|
|
|
config INLINE_WRITE_UNLOCK_IRQ
|
|
def_bool y
|
|
depends on !PREEMPT || ARCH_INLINE_WRITE_UNLOCK_IRQ
|
|
|
|
config INLINE_WRITE_UNLOCK_IRQRESTORE
|
|
def_bool y
|
|
depends on ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE
|
|
|
|
endif
|
|
|
|
config ARCH_SUPPORTS_ATOMIC_RMW
|
|
bool
|
|
|
|
config MUTEX_SPIN_ON_OWNER
|
|
def_bool y
|
|
depends on SMP && ARCH_SUPPORTS_ATOMIC_RMW
|
|
|
|
config RWSEM_SPIN_ON_OWNER
|
|
def_bool y
|
|
depends on SMP && RWSEM_XCHGADD_ALGORITHM && ARCH_SUPPORTS_ATOMIC_RMW
|
|
|
|
config LOCK_SPIN_ON_OWNER
|
|
def_bool y
|
|
depends on MUTEX_SPIN_ON_OWNER || RWSEM_SPIN_ON_OWNER
|
|
|
|
config ARCH_USE_QUEUED_SPINLOCKS
|
|
bool
|
|
|
|
config QUEUED_SPINLOCKS
|
|
def_bool y if ARCH_USE_QUEUED_SPINLOCKS
|
|
depends on SMP
|
|
|
|
config ARCH_USE_QUEUED_RWLOCKS
|
|
bool
|
|
|
|
config QUEUED_RWLOCKS
|
|
def_bool y if ARCH_USE_QUEUED_RWLOCKS
|
|
depends on SMP
|
|
|
|
config RWSEM_PRIO_AWARE
|
|
def_bool y
|
|
depends on RWSEM_XCHGADD_ALGORITHM
|