From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/9404 Path: news.gmane.org!not-for-mail From: Alexander Monakov Newsgroups: gmane.linux.lib.musl.general Subject: Re: [PATCH] add sched_getcpu Date: Mon, 29 Feb 2016 20:23:33 +0300 (MSK) Message-ID: References: <1456765028-23958-1-git-send-email-nathan@nathan7.eu> <1456765216-24883-1-git-send-email-nathan@nathan7.eu> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Trace: ger.gmane.org 1456766628 28070 80.91.229.3 (29 Feb 2016 17:23:48 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 29 Feb 2016 17:23:48 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-9417-gllmg-musl=m.gmane.org@lists.openwall.com Mon Feb 29 18:23:47 2016 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1aaRXu-0003q2-LB for gllmg-musl@m.gmane.org; Mon, 29 Feb 2016 18:23:46 +0100 Original-Received: (qmail 14233 invoked by uid 550); 29 Feb 2016 17:23:45 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 14212 invoked from network); 29 Feb 2016 17:23:44 -0000 In-Reply-To: <1456765216-24883-1-git-send-email-nathan@nathan7.eu> User-Agent: Alpine 2.20 (LNX 67 2015-01-07) Xref: news.gmane.org gmane.linux.lib.musl.general:9404 Archived-At: On Mon, 29 Feb 2016, Nathan Zadoks wrote: > This is a GNU extension, but a fairly minor one, for a system call that > otherwise has no libc wrapper. > > Adding it was discussed previously, without any objections: > http://www.openwall.com/lists/musl/2015/05/08/24 > --- > include/sched.h | 3 +++ > src/sched/sched_getcpu.c | 10 ++++++++++ > 2 files changed, 13 insertions(+) > create mode 100644 src/sched/sched_getcpu.c > > diff --git a/include/sched.h b/include/sched.h > index 3e34a72..17f5e06 100644 > --- a/include/sched.h > +++ b/include/sched.h > @@ -76,6 +76,9 @@ void free(void *); > > typedef struct cpu_set_t { unsigned long __bits[128/sizeof(long)]; } cpu_set_t; > int __sched_cpucount(size_t, const cpu_set_t *); > +#ifdef _GNU_SOURCE This code is already under the same #ifdef. > +int sched_getcpu(void); > +#endif > int sched_getaffinity(pid_t, size_t, cpu_set_t *); > int sched_setaffinity(pid_t, size_t, const cpu_set_t *); > > diff --git a/src/sched/sched_getcpu.c b/src/sched/sched_getcpu.c > new file mode 100644 > index 0000000..070d6e7 > --- /dev/null > +++ b/src/sched/sched_getcpu.c > @@ -0,0 +1,10 @@ > +#define _GNU_SOURCE > +#include Do you need this include? > +#include (this include could also be dropped; I think it's a matter of policy whether such includes are desirable or not, so please wait for comment from Rich) > +#include "syscall.h" > + > +int sched_getcpu(void) { > + int c, s; > + s = syscall(SYS_getcpu, &c, NULL, NULL); > + return (s == 0) ? c : s; This is wrong, as it doesn't set errno on error, and does not produce -1. This should be something like 'return s ? __syscall_ret(s) : c;' or maybe 'return __syscall_ret(s ? s : c);'. Alexander