提交 09287851 编写于 作者: C Chen Hui 提交者: Zheng Zengkai

sched: programmable: add bpf_sched_task_tag_of helper function

hulk inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I5KUFB
CVE: NA

--------------------------------

This helper function read the tag of the struct task.
The bpf prog obtains the tags to detect different workloads.
Signed-off-by: NChen Hui <judy.chenhui@huawei.com>
Signed-off-by: NRen Zhijie <renzhijie2@huawei.com>
上级 48c23bd7
......@@ -3785,6 +3785,13 @@ union bpf_attr {
* Return
* Task group tag, if CONFIG_CGROUP_SCHED enabled, 0 as default tag, or
* a negative error in case of failure.
*
* long bpf_sched_task_tag_of(struct task_struct *tsk)
* Description
* Return task tag of *tsk*.The bpf prog obtains the tags to detect
* different workloads.
* Return
* Task tag, if used, 0 as default tag, or a negative error in case of failure.
*/
#define __BPF_FUNC_MAPPER(FN) \
FN(unspec), \
......@@ -3949,6 +3956,7 @@ union bpf_attr {
FN(sched_entity_to_cgrpid), \
FN(sched_entity_belongs_to_cgrp), \
FN(sched_tg_tag_of), \
FN(sched_task_tag_of), \
/* */
/* integer value in 'imm' field of BPF_CALL instruction selects which helper
......
......@@ -659,6 +659,7 @@ const struct bpf_func_proto bpf_probe_read_user_str_proto __weak;
const struct bpf_func_proto bpf_probe_read_kernel_proto __weak;
const struct bpf_func_proto bpf_probe_read_kernel_str_proto __weak;
const struct bpf_func_proto bpf_sched_tg_tag_of_proto __weak;
const struct bpf_func_proto bpf_sched_task_tag_of_proto __weak;
const struct bpf_func_proto *
bpf_base_func_proto(enum bpf_func_id func_id)
......@@ -700,6 +701,8 @@ bpf_base_func_proto(enum bpf_func_id func_id)
return &bpf_ringbuf_query_proto;
case BPF_FUNC_sched_tg_tag_of:
return &bpf_sched_tg_tag_of_proto;
case BPF_FUNC_sched_task_tag_of:
return &bpf_sched_task_tag_of_proto;
default:
break;
}
......
......@@ -135,6 +135,23 @@ const struct bpf_func_proto bpf_sched_tg_tag_of_proto = {
.arg1_btf_id = &btf_sched_tg_ids[0],
};
BPF_CALL_1(bpf_sched_task_tag_of, struct task_struct *, tsk)
{
if (tsk == NULL)
return -EINVAL;
return tsk->tag;
}
BTF_ID_LIST_SINGLE(btf_sched_task_ids, struct, task_struct)
const struct bpf_func_proto bpf_sched_task_tag_of_proto = {
.func = bpf_sched_task_tag_of,
.gpl_only = false,
.ret_type = RET_INTEGER,
.arg1_type = PTR_MAYBE_NULL | ARG_PTR_TO_BTF_ID,
.arg1_btf_id = &btf_sched_task_ids[0],
};
static const struct bpf_func_proto *
bpf_sched_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
{
......
......@@ -3785,6 +3785,13 @@ union bpf_attr {
* Return
* Task group tag, if CONFIG_CGROUP_SCHED enabled, 0 as default tag, or
* a negative error in case of failure.
*
* long bpf_sched_task_tag_of(struct task_struct *tsk)
* Description
* Return task tag of *tsk*.The bpf prog obtains the tags to detect
* different workloads.
* Return
* Task tag, if used, 0 as default tag, or a negative error in case of failure.
*/
#define __BPF_FUNC_MAPPER(FN) \
FN(unspec), \
......@@ -3949,6 +3956,7 @@ union bpf_attr {
FN(sched_entity_to_cgrpid), \
FN(sched_entity_belongs_to_cgrp), \
FN(sched_tg_tag_of), \
FN(sched_task_tag_of), \
/* */
/* integer value in 'imm' field of BPF_CALL instruction selects which helper
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册