From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/9407 Path: news.gmane.org!not-for-mail From: "nathan@nathan7.eu" Newsgroups: gmane.linux.lib.musl.general Subject: Re: [PATCH] add sched_getcpu Date: Mon, 29 Feb 2016 17:52:59 +0000 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: multipart/alternative; boundary=047d7b07240055fab3052cec52f9 X-Trace: ger.gmane.org 1456768412 26774 80.91.229.3 (29 Feb 2016 17:53:32 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 29 Feb 2016 17:53:32 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-9420-gllmg-musl=m.gmane.org@lists.openwall.com Mon Feb 29 18:53:25 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 1aaS0Z-0003Qv-Ch for gllmg-musl@m.gmane.org; Mon, 29 Feb 2016 18:53:23 +0100 Original-Received: (qmail 3678 invoked by uid 550); 29 Feb 2016 17:53:21 -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 3660 invoked from network); 29 Feb 2016 17:53:20 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nathan7.eu; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=/X/GAmKUa1fmsbBXQayDJux836uPfw+iS2zzjV/+tIM=; b=LG9rzRsMue82X+8Lzsy9f9rZF2u5ckZYh/c9zEBHVZ/F0f9BLaMRNSn3Nrch0N5bFt XXG7M9eFy1Int+ymCNw1HdT5XC7F1UeBAJVe1jopTOVCSqDWJF7HhQGanldy2HTe/ir+ 6xsUUOpIO2i+rAFg+nOOpF5tsd/pvoKGE7WDk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=/X/GAmKUa1fmsbBXQayDJux836uPfw+iS2zzjV/+tIM=; b=JZUaGlsKNiyZBfJAxnwTNK4lw/0b9O1WuamIYE/ZIf0BHE3FXGVvXdWzqRabxOvn4G rE0FrlOPaALmU0GsAiWi+RU8iLMF2fPNjnh1sMkNm5vfwxH2BEApJyV59/5Q8YY+ZlKh 2tj/qTPhwHK/JZZA/L+3/++4m/NgI/Q9Ie6thLYbPx+MKOhyuedE6xlEV83epAs+oTQD p/IDsmB+wVh7Q3CprANZT3vaJokqnNfEqOAG1nmsPxDf+esTcF0FppkPJsvO8tdBctfd xPlYMjbICa8M4CyySbw1HuUPU73DQsXJ6KiyJP4vDjOrXlK4eOj1/q/eyKqqccfZNbAa /s1w== X-Gm-Message-State: AD7BkJLJ9i51pr6FPm0SkG7P+ZmXwCdAMCcrYAlcyZbHHXSr8AoTIhP1YQJdaht5YUS/DNTZimVJR98nUuUaOg== X-Received: by 10.66.118.7 with SMTP id ki7mr23851800pab.153.1456768388783; Mon, 29 Feb 2016 09:53:08 -0800 (PST) In-Reply-To: Xref: news.gmane.org gmane.linux.lib.musl.general:9407 Archived-At: --047d7b07240055fab3052cec52f9 Content-Type: text/plain; charset=UTF-8 On Mon, Feb 29, 2016 at 6:49 PM nathan@nathan7.eu wrote: > As far as I can tell, syscall() is supposed to set errno (using > __sycall_ret), but maybe src/misc/syscall.c isn't what I think it is? > I indeed got the return value backwards, and I'll fix that, along with the > #ifdef. > Actually, nope, that ternary is the right way round, and __sycall_ret handles the -1 return. > > > On Mon, Feb 29, 2016 at 6:23 PM Alexander Monakov > wrote: > >> 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 >> > --047d7b07240055fab3052cec52f9 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable


On Mon= , Feb 29, 2016 at 6:49 PM nathan@natha= n7.eu <nathan@nathan7.eu>= ; wrote:
As far as= I can tell, syscall() is supposed to set errno (using __sycall_ret), but m= aybe src/misc/syscall.c isn't what I think it is?=C2=A0
I indeed got the re= turn value backwards, and I'll fix that, along with the #ifdef.
Act= ually, nope, that ternary is the right way round, and __sycall_ret handles = the -1 return.
=


On Mon, Feb 29, 20= 16 at 6:23 PM Alexander Monakov <amonakov@ispras.ru> wrote:
On Mon, 29 Feb 2016, Nathan Zadoks wrote:

> This is a GNU extension, but a fairly minor one, for a system call tha= t
> otherwise has no libc wrapper.
>
> Adding it was discussed previously, without any objections:
> http://www.openwall.com/lists/musl/2015/05/08/2= 4
> ---
>=C2=A0 include/sched.h=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 3 +++<= br> >=C2=A0 src/sched/sched_getcpu.c | 10 ++++++++++
>=C2=A0 2 files changed, 13 insertions(+)
>=C2=A0 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 *);
>
>=C2=A0 typedef struct cpu_set_t { unsigned long __bits[128/sizeof(long)= ]; } cpu_set_t;
>=C2=A0 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
>=C2=A0 int sched_getaffinity(pid_t, size_t, cpu_set_t *);
>=C2=A0 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 <stdlib.h>

Do you need this include?

> +#include <sched.h>

(this include could also be dropped; I think it's a matter of policy wh= ether
such includes are desirable or not, so please wait for comment from Rich)
> +#include "syscall.h"
> +
> +int sched_getcpu(void) {
> +=C2=A0 int c, s;
> +=C2=A0 s =3D syscall(SYS_getcpu, &c, NULL, NULL);
> +=C2=A0 return (s =3D=3D 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 mayb= e
'return __syscall_ret(s ? s : c);'.

Alexander
--047d7b07240055fab3052cec52f9--