diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-08 03:21:37 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-08 03:21:37 +0000 |
commit | 06343b27411344fc542f4f3a643f8441aa35252d (patch) | |
tree | 66aa45187c93c350bbdf7e6ae4467a70bf3a8f4c /debian/patches-rt/0272-Revert-futex-Fix-bug-on-when-a-requeued-RT-task-time.patch | |
parent | Merging upstream version 4.19.260. (diff) | |
download | linux-06343b27411344fc542f4f3a643f8441aa35252d.tar.xz linux-06343b27411344fc542f4f3a643f8441aa35252d.zip |
Adding debian version 4.19.260-1.debian/4.19.260-1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'debian/patches-rt/0272-Revert-futex-Fix-bug-on-when-a-requeued-RT-task-time.patch')
-rw-r--r-- | debian/patches-rt/0272-Revert-futex-Fix-bug-on-when-a-requeued-RT-task-time.patch | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/debian/patches-rt/0272-Revert-futex-Fix-bug-on-when-a-requeued-RT-task-time.patch b/debian/patches-rt/0272-Revert-futex-Fix-bug-on-when-a-requeued-RT-task-time.patch new file mode 100644 index 000000000..d622e9bf3 --- /dev/null +++ b/debian/patches-rt/0272-Revert-futex-Fix-bug-on-when-a-requeued-RT-task-time.patch @@ -0,0 +1,79 @@ +From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Date: Wed, 26 Jun 2019 17:44:18 +0200 +Subject: [PATCH 272/342] Revert "futex: Fix bug on when a requeued RT task + times out" +Origin: https://git.kernel.org/cgit/linux/kernel/git/rt/linux-stable-rt.git/commit?id=424bdc4ecbdf891bb9781c66827c6552d45ec9c3 + +[ Upstream commit f1a170cb3289a48df26cae3c60d77608f7a988bb ] + +Drop the RT fixup, the futex code will be changed to avoid the need for +the workaround. + +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> +--- + kernel/locking/rtmutex.c | 31 +------------------------------ + kernel/locking/rtmutex_common.h | 1 - + 2 files changed, 1 insertion(+), 31 deletions(-) + +diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c +index ded2296f848a..a87b65447991 100644 +--- a/kernel/locking/rtmutex.c ++++ b/kernel/locking/rtmutex.c +@@ -144,8 +144,7 @@ static void fixup_rt_mutex_waiters(struct rt_mutex *lock) + + static int rt_mutex_real_waiter(struct rt_mutex_waiter *waiter) + { +- return waiter && waiter != PI_WAKEUP_INPROGRESS && +- waiter != PI_REQUEUE_INPROGRESS; ++ return waiter && waiter != PI_WAKEUP_INPROGRESS; + } + + /* +@@ -2349,34 +2348,6 @@ int __rt_mutex_start_proxy_lock(struct rt_mutex *lock, + if (try_to_take_rt_mutex(lock, task, NULL)) + return 1; + +-#ifdef CONFIG_PREEMPT_RT_FULL +- /* +- * In PREEMPT_RT there's an added race. +- * If the task, that we are about to requeue, times out, +- * it can set the PI_WAKEUP_INPROGRESS. This tells the requeue +- * to skip this task. But right after the task sets +- * its pi_blocked_on to PI_WAKEUP_INPROGRESS it can then +- * block on the spin_lock(&hb->lock), which in RT is an rtmutex. +- * This will replace the PI_WAKEUP_INPROGRESS with the actual +- * lock that it blocks on. We *must not* place this task +- * on this proxy lock in that case. +- * +- * To prevent this race, we first take the task's pi_lock +- * and check if it has updated its pi_blocked_on. If it has, +- * we assume that it woke up and we return -EAGAIN. +- * Otherwise, we set the task's pi_blocked_on to +- * PI_REQUEUE_INPROGRESS, so that if the task is waking up +- * it will know that we are in the process of requeuing it. +- */ +- raw_spin_lock(&task->pi_lock); +- if (task->pi_blocked_on) { +- raw_spin_unlock(&task->pi_lock); +- return -EAGAIN; +- } +- task->pi_blocked_on = PI_REQUEUE_INPROGRESS; +- raw_spin_unlock(&task->pi_lock); +-#endif +- + /* We enforce deadlock detection for futexes */ + ret = task_blocks_on_rt_mutex(lock, waiter, task, + RT_MUTEX_FULL_CHAINWALK); +diff --git a/kernel/locking/rtmutex_common.h b/kernel/locking/rtmutex_common.h +index 8e0c592273e6..627340e7427e 100644 +--- a/kernel/locking/rtmutex_common.h ++++ b/kernel/locking/rtmutex_common.h +@@ -133,7 +133,6 @@ enum rtmutex_chainwalk { + * PI-futex support (proxy locking functions, etc.): + */ + #define PI_WAKEUP_INPROGRESS ((struct rt_mutex_waiter *) 1) +-#define PI_REQUEUE_INPROGRESS ((struct rt_mutex_waiter *) 2) + + extern struct task_struct *rt_mutex_next_owner(struct rt_mutex *lock); + extern void rt_mutex_init_proxy_locked(struct rt_mutex *lock, |