mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-14 12:36:52 +07:00
c365c292d0
If a PI boosted task policy/priority is modified by a setscheduler() call we unconditionally dequeue and requeue the task if it is on the runqueue even if the new priority is lower than the current effective boosted priority. This can result in undesired reordering of the priority bucket list. If the new priority is less or equal than the current effective we just store the new parameters in the task struct and leave the scheduler class and the runqueue untouched. This is handled when the task deboosts itself. Only if the new priority is higher than the effective boosted priority we apply the change immediately. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> [ Rebase ontop of v3.14-rc1. ] Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: Dario Faggioli <raistlin@linux.it> Signed-off-by: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/1391803122-4425-7-git-send-email-bigeasy@linutronix.de Signed-off-by: Ingo Molnar <mingo@kernel.org>
60 lines
1.3 KiB
C
60 lines
1.3 KiB
C
#ifndef _SCHED_RT_H
|
|
#define _SCHED_RT_H
|
|
|
|
#include <linux/sched/prio.h>
|
|
|
|
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
|
|
extern int rt_mutex_getprio(struct task_struct *p);
|
|
extern void rt_mutex_setprio(struct task_struct *p, int prio);
|
|
extern int rt_mutex_check_prio(struct task_struct *task, int newprio);
|
|
extern struct task_struct *rt_mutex_get_top_task(struct task_struct *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 int rt_mutex_getprio(struct task_struct *p)
|
|
{
|
|
return p->normal_prio;
|
|
}
|
|
|
|
static inline int rt_mutex_check_prio(struct task_struct *task, int newprio)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
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 /* _SCHED_RT_H */
|