1/* SPDX-License-Identifier: GPL-2.0 */
2#include <linux/atomic.h>
3#include <linux/cpumask.h>
4#include <linux/sched/rt.h>
5
6#define CPUPRI_NR_PRIORITIES (MAX_RT_PRIO+1)
7
8#define CPUPRI_INVALID -1
9#define CPUPRI_NORMAL 0
10/* values 1-99 are for RT1-RT99 priorities */
11#define CPUPRI_HIGHER 100
12
13struct cpupri_vec {
14 atomic_t count;
15 cpumask_var_t mask;
16};
17
18struct cpupri {
19 struct cpupri_vec pri_to_cpu[CPUPRI_NR_PRIORITIES];
20 int *cpu_to_pri;
21};
22
23int cpupri_find(struct cpupri *cp, struct task_struct *p,
24 struct cpumask *lowest_mask);
25int cpupri_find_fitness(struct cpupri *cp, struct task_struct *p,
26 struct cpumask *lowest_mask,
27 bool (*fitness_fn)(struct task_struct *p, int cpu));
28void cpupri_set(struct cpupri *cp, int cpu, int pri);
29int cpupri_init(struct cpupri *cp);
30void cpupri_cleanup(struct cpupri *cp);
31