From cfd1f94a3ddfbb198230b762675d1b885c7862ac Mon Sep 17 00:00:00 2001 From: wanxiaoqing Date: Wed, 29 Nov 2023 18:12:48 +0800 Subject: [PATCH] fix up app add rtg group failed when change backgroup to Signed-off-by: wanxiaoqing --- kernel/sched/rtg/frame_rtg.c | 33 +++++++++++++++++++++++++++++++++ kernel/sched/rtg/rtg_ctrl.c | 5 +++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/kernel/sched/rtg/frame_rtg.c b/kernel/sched/rtg/frame_rtg.c index 79db645228c4..e28dff2c9a9d 100644 --- a/kernel/sched/rtg/frame_rtg.c +++ b/kernel/sched/rtg/frame_rtg.c @@ -364,6 +364,39 @@ int search_rtg(int pid) return 0; } +/*Attention: only current invoke this function*/ +struct frame_info *lookup_frame_info_by_task(struct task_struct *task) +{ + struct rtg_info grp_info; + struct frame_info *frame_info = NULL; + int i = 0; + int j = 0; + + grp_info.rtg_num = 0; + + read_lock(&g_id_manager.lock); + for (i = MULTI_FRAME_ID; i < MULTI_FRAME_ID + MULTI_FRAME_NUM; i++) { + if (test_bit(i - MULTI_FRAME_ID, g_id_manager.id_map)) { + grp_info.rtgs[grp_info.rtg_num] = i; + grp_info.rtg_num++; + } + } + read_unlock(&g_id_manager.lock); + for (i = 0; i < grp_info.rtg_num; i++) { + frame_info = lookup_frame_info_by_grp_id(grp_info.rtgs[i]); + if (!frame_info) { + pr_err("[FRAME_RTG] unexpected grp %d find error\n", i); + return NULL; + } + for (j = 0; j < frame_info->thread_num; j++) { + if(frame_info->thread[j] && frame_info->thread[j]->pid == task->pid) + return frame_info; + } + } + + return NULL; +} + static void update_frame_task_prio(struct frame_info *frame_info, int prio) { int i; diff --git a/kernel/sched/rtg/rtg_ctrl.c b/kernel/sched/rtg/rtg_ctrl.c index 0931e93dc5fa..c8df83ecc8e9 100644 --- a/kernel/sched/rtg/rtg_ctrl.c +++ b/kernel/sched/rtg/rtg_ctrl.c @@ -487,9 +487,10 @@ int update_frame_state(int grp_id, int margin, bool in_frame) { struct frame_info *frame_info = NULL; - frame_info = lookup_frame_info_by_grp_id(grp_id); - if (!frame_info || !frame_info->rtg) + frame_info = lookup_frame_info_by_task(current); + if (!frame_info || !frame_info->rtg) { return -INVALID_RTG_ID; + } if (in_frame) { start_frame_freq(frame_info); -- Gitee