xref: /linux-6.15/include/linux/sched/rt.h (revision ae04f69d)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
29ccd27ccSIngo Molnar #ifndef _LINUX_SCHED_RT_H
39ccd27ccSIngo Molnar #define _LINUX_SCHED_RT_H
48bd75c77SClark Williams 
59ccd27ccSIngo Molnar #include <linux/sched.h>
69ccd27ccSIngo Molnar 
79ccd27ccSIngo Molnar struct task_struct;
88bd75c77SClark Williams 
rt_prio(int prio)9b166af3dSQais Yousef static inline bool rt_prio(int prio)
108bd75c77SClark Williams {
11b166af3dSQais Yousef 	return unlikely(prio < MAX_RT_PRIO && prio >= MAX_DL_PRIO);
12130fd056SQais Yousef }
13130fd056SQais Yousef 
rt_or_dl_prio(int prio)14*ae04f69dSQais Yousef static inline bool rt_or_dl_prio(int prio)
15130fd056SQais Yousef {
16b166af3dSQais Yousef 	return unlikely(prio < MAX_RT_PRIO);
178bd75c77SClark Williams }
188bd75c77SClark Williams 
19130fd056SQais Yousef /*
20130fd056SQais Yousef  * Returns true if a task has a priority that belongs to RT class. PI-boosted
21130fd056SQais Yousef  * tasks will return true. Use rt_policy() to ignore PI-boosted tasks.
22130fd056SQais Yousef  */
rt_task(struct task_struct * p)23b166af3dSQais Yousef static inline bool rt_task(struct task_struct *p)
248bd75c77SClark Williams {
258bd75c77SClark Williams 	return rt_prio(p->prio);
268bd75c77SClark Williams }
278bd75c77SClark Williams 
28130fd056SQais Yousef /*
29130fd056SQais Yousef  * Returns true if a task has a priority that belongs to RT or DL classes.
30*ae04f69dSQais Yousef  * PI-boosted tasks will return true. Use rt_or_dl_task_policy() to ignore
31130fd056SQais Yousef  * PI-boosted tasks.
32130fd056SQais Yousef  */
rt_or_dl_task(struct task_struct * p)33*ae04f69dSQais Yousef static inline bool rt_or_dl_task(struct task_struct *p)
34130fd056SQais Yousef {
35*ae04f69dSQais Yousef 	return rt_or_dl_prio(p->prio);
36130fd056SQais Yousef }
37130fd056SQais Yousef 
38130fd056SQais Yousef /*
39130fd056SQais Yousef  * Returns true if a task has a policy that belongs to RT or DL classes.
40130fd056SQais Yousef  * PI-boosted tasks will return false.
41130fd056SQais Yousef  */
rt_or_dl_task_policy(struct task_struct * tsk)42*ae04f69dSQais Yousef static inline bool rt_or_dl_task_policy(struct task_struct *tsk)
43ff0d4a9dSSebastian Andrzej Siewior {
44ff0d4a9dSSebastian Andrzej Siewior 	int policy = tsk->policy;
45ff0d4a9dSSebastian Andrzej Siewior 
46ff0d4a9dSSebastian Andrzej Siewior 	if (policy == SCHED_FIFO || policy == SCHED_RR)
47ff0d4a9dSSebastian Andrzej Siewior 		return true;
48ff0d4a9dSSebastian Andrzej Siewior 	if (policy == SCHED_DEADLINE)
49ff0d4a9dSSebastian Andrzej Siewior 		return true;
50ff0d4a9dSSebastian Andrzej Siewior 	return false;
51ff0d4a9dSSebastian Andrzej Siewior }
52ff0d4a9dSSebastian Andrzej Siewior 
538bd75c77SClark Williams #ifdef CONFIG_RT_MUTEXES
546b596e62SPeter Zijlstra extern void rt_mutex_pre_schedule(void);
556b596e62SPeter Zijlstra extern void rt_mutex_schedule(void);
566b596e62SPeter Zijlstra extern void rt_mutex_post_schedule(void);
576b596e62SPeter Zijlstra 
58acd58620SPeter Zijlstra /*
59acd58620SPeter Zijlstra  * Must hold either p->pi_lock or task_rq(p)->lock.
60acd58620SPeter Zijlstra  */
rt_mutex_get_top_task(struct task_struct * p)61acd58620SPeter Zijlstra static inline struct task_struct *rt_mutex_get_top_task(struct task_struct *p)
62acd58620SPeter Zijlstra {
63acd58620SPeter Zijlstra 	return p->pi_top_task;
64acd58620SPeter Zijlstra }
65acd58620SPeter Zijlstra extern void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task);
668bd75c77SClark Williams extern void rt_mutex_adjust_pi(struct task_struct *p);
678bd75c77SClark Williams #else
rt_mutex_get_top_task(struct task_struct * task)682d3d891dSDario Faggioli static inline struct task_struct *rt_mutex_get_top_task(struct task_struct *task)
692d3d891dSDario Faggioli {
702d3d891dSDario Faggioli 	return NULL;
712d3d891dSDario Faggioli }
728bd75c77SClark Williams # define rt_mutex_adjust_pi(p)		do { } while (0)
738bd75c77SClark Williams #endif
748bd75c77SClark Williams 
758bd75c77SClark Williams extern void normalize_rt_tasks(void);
768bd75c77SClark Williams 
778bd75c77SClark Williams 
78bc681593SClark Williams /*
79bc681593SClark Williams  * default timeslice is 100 msecs (used only for SCHED_RR tasks).
80bc681593SClark Williams  * Timeslices get refilled after they expire.
81bc681593SClark Williams  */
82bc681593SClark Williams #define RR_TIMESLICE		(100 * HZ / 1000)
83bc681593SClark Williams 
849ccd27ccSIngo Molnar #endif /* _LINUX_SCHED_RT_H */
85