Browse Source

add RT_THREAD_CTRL_SET_PRIORITY

wycwyhwyq 3 months ago
parent
commit
da1c5c7882
3 changed files with 16 additions and 3 deletions
  1. 3 3
      components/lwp/lwp_syscall.c
  2. 1 0
      include/rtdef.h
  3. 12 0
      src/thread.c

+ 3 - 3
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);

+ 1 - 0
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

+ 12 - 0
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;