summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0001-sched-core-Provide-a-method-to-check-if-a-task-is-PI.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0001-sched-core-Provide-a-method-to-check-if-a-task-is-PI.patch')
-rw-r--r--debian/patches-rt/0001-sched-core-Provide-a-method-to-check-if-a-task-is-PI.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/debian/patches-rt/0001-sched-core-Provide-a-method-to-check-if-a-task-is-PI.patch b/debian/patches-rt/0001-sched-core-Provide-a-method-to-check-if-a-task-is-PI.patch
new file mode 100644
index 000000000..35892558e
--- /dev/null
+++ b/debian/patches-rt/0001-sched-core-Provide-a-method-to-check-if-a-task-is-PI.patch
@@ -0,0 +1,54 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 4 Aug 2023 13:30:37 +0200
+Subject: [PATCH 1/3] sched/core: Provide a method to check if a task is
+ PI-boosted.
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/6.6/older/patches-6.6.7-rt18.tar.xz
+
+Provide a method to check if a task inherited the priority from another
+task. This happens if a task owns a lock which is requested by a task
+with higher priority. This can be used as a hint to add a preemption
+point to the critical section.
+
+Provide a function which reports true if the task is PI-boosted.
+
+Link: https://lore.kernel.org/r/20230804113039.419794-2-bigeasy@linutronix.de
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/sched.h | 1 +
+ kernel/sched/core.c | 15 +++++++++++++++
+ 2 files changed, 16 insertions(+)
+
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -1905,6 +1905,7 @@ static inline int dl_task_check_affinity
+ }
+ #endif
+
++extern bool task_is_pi_boosted(const struct task_struct *p);
+ extern int yield_to(struct task_struct *p, bool preempt);
+ extern void set_user_nice(struct task_struct *p, long nice);
+ extern int task_prio(const struct task_struct *p);
+--- a/kernel/sched/core.c
++++ b/kernel/sched/core.c
+@@ -8923,6 +8923,21 @@ static inline void preempt_dynamic_init(
+
+ #endif /* #ifdef CONFIG_PREEMPT_DYNAMIC */
+
++/*
++ * task_is_pi_boosted - Check if task has been PI boosted.
++ * @p: Task to check.
++ *
++ * Return true if task is subject to priority inheritance.
++ */
++bool task_is_pi_boosted(const struct task_struct *p)
++{
++ int prio = p->prio;
++
++ if (!rt_prio(prio))
++ return false;
++ return prio != p->normal_prio;
++}
++
+ /**
+ * yield - yield the current processor to other threads.
+ *