diff options
Diffstat (limited to '')
-rw-r--r-- | debian/patches-rt/0001-signal-Add-proper-comment-about-the-preempt-disable-.patch | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/debian/patches-rt/0001-signal-Add-proper-comment-about-the-preempt-disable-.patch b/debian/patches-rt/0001-signal-Add-proper-comment-about-the-preempt-disable-.patch new file mode 100644 index 0000000000..e00261d790 --- /dev/null +++ b/debian/patches-rt/0001-signal-Add-proper-comment-about-the-preempt-disable-.patch @@ -0,0 +1,47 @@ +From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Date: Thu, 3 Aug 2023 12:09:31 +0200 +Subject: [PATCH 1/2] signal: Add proper comment about the preempt-disable in + ptrace_stop(). +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz + +Commit 53da1d9456fe7 ("fix ptrace slowness") added a preempt-disable section +between read_unlock() and the following schedule() invocation without +explaining why it is needed. + +Replace the comment with an explanation why this is needed. Clarify that +it is needed for correctness but for performance reasons. + +Acked-by: Oleg Nesterov <oleg@redhat.com> +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Link: https://lore.kernel.org/r/20230803100932.325870-2-bigeasy@linutronix.de +--- + kernel/signal.c | 17 ++++++++++++++--- + 1 file changed, 14 insertions(+), 3 deletions(-) + +--- a/kernel/signal.c ++++ b/kernel/signal.c +@@ -2329,10 +2329,21 @@ static int ptrace_stop(int exit_code, in + do_notify_parent_cldstop(current, false, why); + + /* +- * Don't want to allow preemption here, because +- * sys_ptrace() needs this task to be inactive. ++ * The previous do_notify_parent_cldstop() invocation woke ptracer. ++ * One a PREEMPTION kernel this can result in preemption requirement ++ * which will be fulfilled after read_unlock() and the ptracer will be ++ * put on the CPU. ++ * The ptracer is in wait_task_inactive(, __TASK_TRACED) waiting for ++ * this task wait in schedule(). If this task gets preempted then it ++ * remains enqueued on the runqueue. The ptracer will observe this and ++ * then sleep for a delay of one HZ tick. In the meantime this task ++ * gets scheduled, enters schedule() and will wait for the ptracer. + * +- * XXX: implement read_unlock_no_resched(). ++ * This preemption point is not bad from correctness point of view but ++ * extends the runtime by one HZ tick time due to the ptracer's sleep. ++ * The preempt-disable section ensures that there will be no preemption ++ * between unlock and schedule() and so improving the performance since ++ * the ptracer has no reason to sleep. + */ + preempt_disable(); + read_unlock(&tasklist_lock); |