diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c index 1532d08807b049a9915a477fee982ebfa5d6bfc9..a9038186d067e808beffbe0a8437ddc5c1120c83 100644 --- a/components/lwp/lwp_syscall.c +++ b/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 #include @@ -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)