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 Yousefstatic 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 Yousefstatic 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 Yousefstatic 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 Yousefstatic 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 Yousefstatic 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 Zijlstrastatic 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 Faggiolistatic 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