xref: /openbmc/linux/include/linux/sched/rt.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1*b2441318SGreg 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)98bd75c77SClark Williams static inline int rt_prio(int prio)
108bd75c77SClark Williams {
118bd75c77SClark Williams 	if (unlikely(prio < MAX_RT_PRIO))
128bd75c77SClark Williams 		return 1;
138bd75c77SClark Williams 	return 0;
148bd75c77SClark Williams }
158bd75c77SClark Williams 
rt_task(struct task_struct * p)168bd75c77SClark Williams static inline int rt_task(struct task_struct *p)
178bd75c77SClark Williams {
188bd75c77SClark Williams 	return rt_prio(p->prio);
198bd75c77SClark Williams }
208bd75c77SClark Williams 
task_is_realtime(struct task_struct * tsk)21ff0d4a9dSSebastian Andrzej Siewior static inline bool task_is_realtime(struct task_struct *tsk)
22ff0d4a9dSSebastian Andrzej Siewior {
23ff0d4a9dSSebastian Andrzej Siewior 	int policy = tsk->policy;
24ff0d4a9dSSebastian Andrzej Siewior 
25ff0d4a9dSSebastian Andrzej Siewior 	if (policy == SCHED_FIFO || policy == SCHED_RR)
26ff0d4a9dSSebastian Andrzej Siewior 		return true;
27ff0d4a9dSSebastian Andrzej Siewior 	if (policy == SCHED_DEADLINE)
28ff0d4a9dSSebastian Andrzej Siewior 		return true;
29ff0d4a9dSSebastian Andrzej Siewior 	return false;
30ff0d4a9dSSebastian Andrzej Siewior }
31ff0d4a9dSSebastian Andrzej Siewior 
328bd75c77SClark Williams #ifdef CONFIG_RT_MUTEXES
33acd58620SPeter Zijlstra /*
34acd58620SPeter Zijlstra  * Must hold either p->pi_lock or task_rq(p)->lock.
35acd58620SPeter Zijlstra  */
rt_mutex_get_top_task(struct task_struct * p)36acd58620SPeter Zijlstra static inline struct task_struct *rt_mutex_get_top_task(struct task_struct *p)
37acd58620SPeter Zijlstra {
38acd58620SPeter Zijlstra 	return p->pi_top_task;
39acd58620SPeter Zijlstra }
40acd58620SPeter Zijlstra extern void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task);
418bd75c77SClark Williams extern void rt_mutex_adjust_pi(struct task_struct *p);
428bd75c77SClark Williams #else
rt_mutex_get_top_task(struct task_struct * task)432d3d891dSDario Faggioli static inline struct task_struct *rt_mutex_get_top_task(struct task_struct *task)
442d3d891dSDario Faggioli {
452d3d891dSDario Faggioli 	return NULL;
462d3d891dSDario Faggioli }
478bd75c77SClark Williams # define rt_mutex_adjust_pi(p)		do { } while (0)
488bd75c77SClark Williams #endif
498bd75c77SClark Williams 
508bd75c77SClark Williams extern void normalize_rt_tasks(void);
518bd75c77SClark Williams 
528bd75c77SClark Williams 
53bc681593SClark Williams /*
54bc681593SClark Williams  * default timeslice is 100 msecs (used only for SCHED_RR tasks).
55bc681593SClark Williams  * Timeslices get refilled after they expire.
56bc681593SClark Williams  */
57bc681593SClark Williams #define RR_TIMESLICE		(100 * HZ / 1000)
58bc681593SClark Williams 
599ccd27ccSIngo Molnar #endif /* _LINUX_SCHED_RT_H */
60