mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-04 01:49:36 +00:00
![Peter Zijlstra](/assets/img/avatar_default.png)
With the introduction of SCHED_DEADLINE the whole notion that priority is a single number is gone, therefore the @prio argument to rt_mutex_setprio() doesn't make sense anymore. So rework the code to pass a pi_task instead. Note this also fixes a problem with pi_top_task caching; previously we would not set the pointer (call rt_mutex_update_top_task) if the priority didn't change, this could lead to a stale pointer. As for the XXX, I think its fine to use pi_task->prio, because if it differs from waiter->prio, a PI chain update is immenent. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: juri.lelli@arm.com Cc: bigeasy@linutronix.de Cc: xlpang@redhat.com Cc: rostedt@goodmis.org Cc: mathieu.desnoyers@efficios.com Cc: jdesfossez@efficios.com Cc: bristot@redhat.com Link: http://lkml.kernel.org/r/20170323150216.303827095@infradead.org Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
55 lines
1.2 KiB
C
55 lines
1.2 KiB
C
#ifndef _LINUX_SCHED_RT_H
|
|
#define _LINUX_SCHED_RT_H
|
|
|
|
#include <linux/sched.h>
|
|
|
|
struct task_struct;
|
|
|
|
static inline int rt_prio(int prio)
|
|
{
|
|
if (unlikely(prio < MAX_RT_PRIO))
|
|
return 1;
|
|
return 0;
|
|
}
|
|
|
|
static inline int rt_task(struct task_struct *p)
|
|
{
|
|
return rt_prio(p->prio);
|
|
}
|
|
|
|
#ifdef CONFIG_RT_MUTEXES
|
|
/*
|
|
* Must hold either p->pi_lock or task_rq(p)->lock.
|
|
*/
|
|
static inline struct task_struct *rt_mutex_get_top_task(struct task_struct *p)
|
|
{
|
|
return p->pi_top_task;
|
|
}
|
|
extern void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task);
|
|
extern void rt_mutex_adjust_pi(struct task_struct *p);
|
|
static inline bool tsk_is_pi_blocked(struct task_struct *tsk)
|
|
{
|
|
return tsk->pi_blocked_on != NULL;
|
|
}
|
|
#else
|
|
static inline struct task_struct *rt_mutex_get_top_task(struct task_struct *task)
|
|
{
|
|
return NULL;
|
|
}
|
|
# define rt_mutex_adjust_pi(p) do { } while (0)
|
|
static inline bool tsk_is_pi_blocked(struct task_struct *tsk)
|
|
{
|
|
return false;
|
|
}
|
|
#endif
|
|
|
|
extern void normalize_rt_tasks(void);
|
|
|
|
|
|
/*
|
|
* default timeslice is 100 msecs (used only for SCHED_RR tasks).
|
|
* Timeslices get refilled after they expire.
|
|
*/
|
|
#define RR_TIMESLICE (100 * HZ / 1000)
|
|
|
|
#endif /* _LINUX_SCHED_RT_H */
|