From da1c5c788279dab423458dafa79a85c29a9e31f6 Mon Sep 17 00:00:00 2001 From: wycwyhwyq <5f20.6d9b@gmail.com> Date: Wed, 12 Mar 2025 18:17:35 +0800 Subject: [PATCH] add RT_THREAD_CTRL_SET_PRIORITY --- components/lwp/lwp_syscall.c | 6 +++--- include/rtdef.h | 1 + src/thread.c | 12 ++++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c index 429861f50e..4e171ce07d 100644 --- a/components/lwp/lwp_syscall.c +++ b/components/lwp/lwp_syscall.c @@ -1634,7 +1634,7 @@ sysret_t sys_setpriority(int which, id_t who, int prio) for (list = lwp->t_grp.next; list != &lwp->t_grp; list = list->next) { thread = rt_list_entry(list, struct rt_thread, sibling); - rt_thread_control(thread, RT_THREAD_CTRL_CHANGE_PRIORITY, &prio); + rt_thread_control(thread, RT_THREAD_CTRL_SET_PRIORITY, &prio); } lwp_pid_lock_release(); return 0; @@ -8789,7 +8789,7 @@ sysret_t sys_sched_setparam(pid_t tid, void *param) if (thread) { - ret = rt_thread_control(thread, RT_THREAD_CTRL_CHANGE_PRIORITY, (void *)&sched_param->sched_priority); + ret = rt_thread_control(thread, RT_THREAD_CTRL_SET_PRIORITY, (void *)&sched_param->sched_priority); } lwp_tid_dec_ref(thread); @@ -8959,7 +8959,7 @@ sysret_t sys_sched_setscheduler(int tid, int policy, void *param) } thread = lwp_tid_get_thread_and_inc_ref(tid); - ret = rt_thread_control(thread, RT_THREAD_CTRL_CHANGE_PRIORITY, (void *)&sched_param->sched_priority); + ret = rt_thread_control(thread, RT_THREAD_CTRL_SET_PRIORITY, (void *)&sched_param->sched_priority); lwp_tid_dec_ref(thread); kmem_put(sched_param); diff --git a/include/rtdef.h b/include/rtdef.h index a0bfeb48be..e214828c24 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -643,6 +643,7 @@ enum #define RT_THREAD_CTRL_CHANGE_PRIORITY 0x02 /**< Change thread priority. */ #define RT_THREAD_CTRL_INFO 0x03 /**< Get thread information. */ #define RT_THREAD_CTRL_BIND_CPU 0x04 /**< Set thread bind cpu. */ +#define RT_THREAD_CTRL_SET_PRIORITY 0x05 /**< Set thread priority. */ /** * CPU usage statistics data diff --git a/src/thread.c b/src/thread.c index 09cba18131..475ed9d5b2 100644 --- a/src/thread.c +++ b/src/thread.c @@ -779,6 +779,8 @@ RTM_EXPORT(rt_thread_mdelay); * * RT_THREAD_CTRL_BIND_CPU for bind the thread to a CPU. * + * RT_THREAD_CTRL_SET_PRIORITY for set priority level of thread. + * * @param arg is the argument of control command. * * @return Return the operation status. If the return value is RT_EOK, the function is successfully executed. @@ -793,6 +795,16 @@ rt_err_t rt_thread_control(rt_thread_t thread, int cmd, void *arg) switch (cmd) { case RT_THREAD_CTRL_CHANGE_PRIORITY: + { + rt_err_t error; + rt_sched_lock_level_t slvl; + rt_sched_lock(&slvl); + error = rt_sched_thread_change_priority(thread, *(rt_uint8_t *)arg); + rt_sched_unlock(slvl); + return error; + } + + case RT_THREAD_CTRL_SET_PRIORITY: { rt_err_t error; rt_sched_lock_level_t slvl;