diff --git a/include/linux/sched/frame_rtg.h b/include/linux/sched/frame_rtg.h index 71ecf65c599e4b469c92ab5fe50c7cc84e581d4f..added0ed2c11bd2cc59a4c41dde2b1370fd58572 100644 --- a/include/linux/sched/frame_rtg.h +++ b/include/linux/sched/frame_rtg.h @@ -21,7 +21,7 @@ struct frame_info { * rtg->prev_window_exec -=> the thread's runtime of last frame * rtg->prev_window_time -=> the actual time of the last frame */ - rwlock_t lock; + struct mutex lock; struct related_thread_group *rtg; int prio; struct task_struct *thread[MAX_TID_NUM]; diff --git a/kernel/sched/rtg/frame_rtg.c b/kernel/sched/rtg/frame_rtg.c index 6daa51ebb70ea0496379526b7cd145c7d543994b..3c25363a5b5cf7265fc4064fe8415803c04b206d 100644 --- a/kernel/sched/rtg/frame_rtg.c +++ b/kernel/sched/rtg/frame_rtg.c @@ -381,14 +381,14 @@ void set_frame_prio(struct frame_info *frame_info, int prio) if (!frame_info) return; - write_lock(&frame_info->lock); + mutex_lock(&frame_info->lock); if (frame_info->prio == prio) goto out; update_frame_task_prio(frame_info, prio); frame_info->prio = prio; out: - write_unlock(&frame_info->lock); + mutex_unlock(&frame_info->lock); } static int do_set_rtg_sched(struct task_struct *task, bool is_rtg, @@ -558,7 +558,7 @@ void update_frame_thread_info(struct frame_info *frame_info, // reset curr_rt_thread_num atomic_set(&frame_info->curr_rt_thread_num, 0); - write_lock(&frame_info->lock); + mutex_lock(&frame_info->lock); old_prio = frame_info->prio; real_thread = 0; for (i = 0; i < thread_num; i++) { @@ -570,7 +570,7 @@ void update_frame_thread_info(struct frame_info *frame_info, } frame_info->prio = prio; frame_info->thread_num = real_thread; - write_unlock(&frame_info->lock); + mutex_unlock(&frame_info->lock); } static void do_set_frame_sched_state(struct frame_info *frame_info, @@ -629,14 +629,14 @@ void set_frame_sched_state(struct frame_info *frame_info, bool enable) /* reset curr_rt_thread_num */ atomic_set(&frame_info->curr_rt_thread_num, 0); - write_lock(&frame_info->lock); + mutex_lock(&frame_info->lock); prio = frame_info->prio; for (i = 0; i < MAX_TID_NUM; i++) { if (frame_info->thread[i]) do_set_frame_sched_state(frame_info, frame_info->thread[i], enable, prio); } - write_unlock(&frame_info->lock); + mutex_unlock(&frame_info->lock); trace_rtg_frame_sched(frame_info->rtg->id, "FRAME_STATUS", frame_info->status); @@ -1167,9 +1167,9 @@ static int _init_frame_info(struct frame_info *frame_info, int id) unsigned long flags; memset(frame_info, 0, sizeof(struct frame_info)); - rwlock_init(&frame_info->lock); + mutex_init(&frame_info->lock); - write_lock(&frame_info->lock); + mutex_lock(&frame_info->lock); frame_info->frame_rate = DEFAULT_FRAME_RATE; frame_info->frame_time = div_u64(NSEC_PER_SEC, frame_info->frame_rate); frame_info->thread_num = 0; @@ -1190,7 +1190,7 @@ static int _init_frame_info(struct frame_info *frame_info, int id) grp = frame_rtg(id); if (unlikely(!grp)) { - write_unlock(&frame_info->lock); + mutex_unlock(&frame_info->lock); return -EINVAL; } @@ -1200,7 +1200,7 @@ static int _init_frame_info(struct frame_info *frame_info, int id) raw_spin_unlock_irqrestore(&grp->lock, flags); frame_info->rtg = grp; - write_unlock(&frame_info->lock); + mutex_unlock(&frame_info->lock); return 0; } diff --git a/kernel/sched/rtg/rtg.c b/kernel/sched/rtg/rtg.c index 91e2c6abfa4e65e85ecb4f823b0dcb58870d7d79..8db694d22f2c0774e941af7a0ea7fae66c981b6d 100644 --- a/kernel/sched/rtg/rtg.c +++ b/kernel/sched/rtg/rtg.c @@ -313,8 +313,6 @@ static int __sched_set_group_id(struct task_struct *p, unsigned int group_id) remove_task_from_group(p); } else { #endif - pr_err("%s[%d] switching group from %d to %d failed.\n", - p->comm, p->pid, old_grp->id, group_id); rc = -EINVAL; goto done; #ifdef CONFIG_SCHED_RTG_CGROUP diff --git a/kernel/sched/rtg/rtg_ctrl.c b/kernel/sched/rtg/rtg_ctrl.c index 54460086ce7308051922dad8f3f4ab978659055f..231aeaeb0507542bc9c4c6c8ea62cde98be62ecf 100644 --- a/kernel/sched/rtg/rtg_ctrl.c +++ b/kernel/sched/rtg/rtg_ctrl.c @@ -162,7 +162,7 @@ static int do_update_rt_frame_num(struct frame_info *frame_info, int new_type) int old_type; int ret = SUCC; - read_lock(&frame_info->lock); + mutex_lock(&frame_info->lock); old_type = frame_info->prio - DEFAULT_RT_PRIO; if (is_rt_type(new_type) == is_rt_type(old_type)) goto out; @@ -180,7 +180,7 @@ static int do_update_rt_frame_num(struct frame_info *frame_info, int new_type) } } out: - read_unlock(&frame_info->lock); + mutex_unlock(&frame_info->lock); return ret; } @@ -697,16 +697,15 @@ static int parse_add_rtg_thread(const struct rtg_grp_data *rs_data) pr_err("[SCHED_RTG] grp not created yet.\n"); return -INVALID_ARG; } - write_lock(&frame_info->lock); + mutex_lock(&frame_info->lock); add_num = rs_data->tid_num; if ((frame_info->thread_num < 0) || (add_num < 0)) { + mutex_unlock(&frame_info->lock); pr_err("[SCHED_RTG] Unexception err: frame_info num < 0.\n"); - write_unlock(&frame_info->lock); return -INVALID_RTG_ID; } if (frame_info->thread_num + add_num > MAX_TID_NUM) { - pr_err("[SCHED_RTG] frame info thread up to max already.\n"); - write_unlock(&frame_info->lock); + mutex_unlock(&frame_info->lock); return -INVALID_RTG_ID; } add_index = frame_info->thread_num; @@ -722,7 +721,7 @@ static int parse_add_rtg_thread(const struct rtg_grp_data *rs_data) fail_num++; } } - write_unlock(&frame_info->lock); + mutex_unlock(&frame_info->lock); return fail_num; }