1
0
liangjiayuan 3 жил өмнө
parent
commit
a3860bade6

+ 16 - 4
components/lwp/lwp_syscall.c

@@ -11,7 +11,7 @@
  * 2021-02-12     lizhirui     add 64-bit support for sys_brk
  * 2021-02-20     lizhirui     fix some warnings
  */
-
+#define _GNU_SOURCE
 /* RT-Thread System call */
 #include <rthw.h>
 #include <board.h>
@@ -4021,9 +4021,20 @@ int sys_madvise(void *addr, size_t len, int behav)
 }
 #endif
 
-int sys_setaffinity(pid_t pid, int cpu)
+int sys_setaffinity(pid_t pid, size_t size, void *set)
 {
-    return lwp_setaffinity(pid, cpu);
+    if (!lwp_user_accessable(set, sizeof(cpu_set_t)))
+    {
+        return -EFAULT;
+    }
+    for (int i = 0;i < size * 8; i++)
+    {
+        if (CPU_ISSET(i, (cpu_set_t *)set))
+        {
+            return lwp_setaffinity(pid, i);
+        }
+    }
+    return -1;
 }
 
 int sys_sched_setparam(pid_t pid, void *param)
@@ -4252,7 +4263,7 @@ const static void* func_table[] =
     (void *)sys_thread_sigprocmask,
 #ifdef ARCH_MM_MMU
     (void *)sys_cacheflush,
-    (void *)sys_setaffinity,
+    (void *)sys_notimpl,
     (void *)sys_notimpl,
 #else
     (void *)sys_notimpl,
@@ -4309,6 +4320,7 @@ const static void* func_table[] =
     (void *)sys_sched_get_priority_min,
     (void *)sys_sched_setscheduler,
     (void *)sys_sched_getscheduler,
+    (void *)sys_setaffinity
 };
 
 const void *lwp_get_sys_api(rt_uint32_t number)