mirror of https://github.com/torvalds/linux.git
sched_ext: Add scx_bpf_task_set_slice() and scx_bpf_task_set_dsq_vtime()
With the planned hierarchical scheduler support, sub-schedulers will need to be verified for authority before being allowed to modify task->scx.slice and task->scx.dsq_vtime. Add scx_bpf_task_set_slice() and scx_bpf_task_set_dsq_vtime() which will perform the necessary permission checks. Root schedulers can still directly write to these fields, so this doesn't affect existing schedulers. Reviewed-by: Emil Tsalapatis <emil@etsalapatis.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
111a79800a
commit
3035addfaf
|
|
@ -5936,6 +5936,34 @@ static const struct btf_kfunc_id_set scx_kfunc_set_unlocked = {
|
|||
|
||||
__bpf_kfunc_start_defs();
|
||||
|
||||
/**
|
||||
* scx_bpf_task_set_slice - Set task's time slice
|
||||
* @p: task of interest
|
||||
* @slice: time slice to set in nsecs
|
||||
*
|
||||
* Set @p's time slice to @slice. Returns %true on success, %false if the
|
||||
* calling scheduler doesn't have authority over @p.
|
||||
*/
|
||||
__bpf_kfunc bool scx_bpf_task_set_slice(struct task_struct *p, u64 slice)
|
||||
{
|
||||
p->scx.slice = slice;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* scx_bpf_task_set_dsq_vtime - Set task's virtual time for DSQ ordering
|
||||
* @p: task of interest
|
||||
* @vtime: virtual time to set
|
||||
*
|
||||
* Set @p's virtual time to @vtime. Returns %true on success, %false if the
|
||||
* calling scheduler doesn't have authority over @p.
|
||||
*/
|
||||
__bpf_kfunc bool scx_bpf_task_set_dsq_vtime(struct task_struct *p, u64 vtime)
|
||||
{
|
||||
p->scx.dsq_vtime = vtime;
|
||||
return true;
|
||||
}
|
||||
|
||||
static void scx_kick_cpu(struct scx_sched *sch, s32 cpu, u64 flags)
|
||||
{
|
||||
struct rq *this_rq;
|
||||
|
|
@ -6741,6 +6769,8 @@ __bpf_kfunc void scx_bpf_events(struct scx_event_stats *events,
|
|||
__bpf_kfunc_end_defs();
|
||||
|
||||
BTF_KFUNCS_START(scx_kfunc_ids_any)
|
||||
BTF_ID_FLAGS(func, scx_bpf_task_set_slice, KF_RCU);
|
||||
BTF_ID_FLAGS(func, scx_bpf_task_set_dsq_vtime, KF_RCU);
|
||||
BTF_ID_FLAGS(func, scx_bpf_kick_cpu)
|
||||
BTF_ID_FLAGS(func, scx_bpf_dsq_nr_queued)
|
||||
BTF_ID_FLAGS(func, scx_bpf_destroy_dsq)
|
||||
|
|
|
|||
|
|
@ -102,6 +102,8 @@ s32 scx_bpf_pick_any_cpu_node(const cpumask_t *cpus_allowed, int node, u64 flags
|
|||
s32 scx_bpf_pick_any_cpu(const cpumask_t *cpus_allowed, u64 flags) __ksym;
|
||||
bool scx_bpf_task_running(const struct task_struct *p) __ksym;
|
||||
s32 scx_bpf_task_cpu(const struct task_struct *p) __ksym;
|
||||
bool scx_bpf_task_set_slice(struct task_struct *p, u64 slice) __ksym __weak;
|
||||
bool scx_bpf_task_set_dsq_vtime(struct task_struct *p, u64 vtime) __ksym __weak;
|
||||
struct rq *scx_bpf_cpu_rq(s32 cpu) __ksym;
|
||||
struct rq *scx_bpf_locked_rq(void) __ksym;
|
||||
struct task_struct *scx_bpf_cpu_curr(s32 cpu) __ksym __weak;
|
||||
|
|
|
|||
Loading…
Reference in New Issue