From: Sven-Thorsten Dietrich <sdietrich@xxxxxxx> Add /proc/sys/kernel/lateral_steal, to allow switching on and off equal-priority mutex stealing between threads. Signed-off-by: Sven-Thorsten Dietrich <sdietrich@xxxxxxx> --- kernel/rtmutex.c | 7 ++++++- kernel/sysctl.c | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletions(-) diff --git a/kernel/rtmutex.c b/kernel/rtmutex.c index 6624c66..cd39c26 100644 --- a/kernel/rtmutex.c +++ b/kernel/rtmutex.c @@ -18,6 +18,10 @@ #include "rtmutex_common.h" +#ifdef CONFIG_RTLOCK_LATERAL_STEAL +int rtmutex_lateral_steal __read_mostly = 1; +#endif + /* * lock->owner state tracking: * @@ -321,7 +325,8 @@ static inline int lock_is_stealable(struct task_struct *pendowner, int unfair) if (current->prio > pendowner->prio) return 0; - if (!unfair && (current->prio == pendowner->prio)) + if (unlikely(current->prio == pendowner->prio) && + !(unfair && rtmutex_lateral_steal)) #endif return 0; diff --git a/kernel/sysctl.c b/kernel/sysctl.c index c913d48..c24c53d 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -175,6 +175,10 @@ extern struct ctl_table inotify_table[]; int sysctl_legacy_va_layout; #endif +#ifdef CONFIG_RTLOCK_LATERAL_STEAL +extern int rtmutex_lateral_steal; +#endif + extern int prove_locking; extern int lock_stat; @@ -836,6 +840,16 @@ static struct ctl_table kern_table[] = { .proc_handler = &proc_dointvec, }, #endif +#ifdef CONFIG_RTLOCK_LATERAL_STEAL + { + .ctl_name = CTL_UNNUMBERED, + .procname = "rtmutex_lateral_steal", + .data = &rtmutex_lateral_steal, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec, + }, +#endif #ifdef CONFIG_PROC_FS { .ctl_name = CTL_UNNUMBERED, - To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html