mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Randy.Dunlap" <rdunlap@xenotime.net>
To: Masatake YAMATO <jet@gyve.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [patch] sharing maximum errno symbol used in __syscall_return (i386)
Date: Tue, 20 Jun 2006 17:04:50 -0700	[thread overview]
Message-ID: <20060620170450.e2fd1e02.rdunlap@xenotime.net> (raw)
In-Reply-To: <20060620.184010.225581173.jet@gyve.org>

On Tue, 20 Jun 2006 18:40:10 +0900 (JST) Masatake YAMATO wrote:

> Hi,
> 
> __syscall_return in unistd.h is maintained?
> 
> In the macro the value returned from system call is
> compared with the maximum error number defined in a header file 
> to know the call is successful or not. However, the maximum error number 
> is hard-coded and is not updated.

Ack, this certainly needs some care & fixing.

> Here is an example(i386):
> 
>  /*
>   * user-visible error numbers are in the range -1 - -128: see
>   * <asm-i386/errno.h>
>   */
>  #define __syscall_return(type, res) \
>  do { \
> 	if ((unsigned long)(res) >= (unsigned long)(-(128 + 1))) { \
>  		errno = -(res); \
>  		res = -1; \
>  	} \
> 
> The comment says the maximum errno is 128.
> However, the actual C code says 128 + 1. What does "+ 1" mean?

I don't understand the -1 either.  A few asm-*/unistd.h files
use that, but most of them do not.


> Look at <asm-i386/errno.h>:
> 
>     #ifndef _I386_ERRNO_H
>     #define _I386_ERRNO_H
> 
>     #include <asm-generic/errno.h>
> 
>     #endif
> 
> The look at <asm-generic/errno.h>:
> 
>     #define	EKEYREVOKED	128	/* Key has been revoked */
>     #define	EKEYREJECTED	129	/* Key was rejected by service */
> 
>     /* for robust mutexes */
>     #define	EOWNERDEAD	130	/* Owner died */
>     #define	ENOTRECOVERABLE	131	/* State not recoverable */
> 
> Here the maximum errno is 131. 
> 
> 
> In many architectures, <asm-foo/errno.h> just includes 
> <asm-generic/errno.h>. So I think <asm-generic/errno.h> should
> exports the real maximum errno and the other headers can
> use it. So in many cases, we can just maintain
> the real maximum errno in <asm-generic/errno.h>.
> 
> Here is the patch for i386. If this patch is approved, I will write
> patches for the other architectures. (However, it may be better to be
> done by each architecture's maintainer.)

I like the patch.

> Signed-off-by: Masatake YAMATO <jet@gyve.org>
> 
> diff --git a/include/asm-generic/errno.h b/include/asm-generic/errno.h
> index e8852c0..4e1238e 100644
> --- a/include/asm-generic/errno.h
> +++ b/include/asm-generic/errno.h
> @@ -106,4 +106,8 @@ #define	EKEYREJECTED	129	/* Key was reje
>  #define	EOWNERDEAD	130	/* Owner died */
>  #define	ENOTRECOVERABLE	131	/* State not recoverable */
>  
> +/* 
> + * If you add a new error, Don't forget to update `GENERIC_ERRNO_MAX' 
> + */
> +#define GENERIC_ERRNO_MAX ENOTRECOVERABLE
>  #endif
> diff --git a/include/asm-i386/errno.h b/include/asm-i386/errno.h
> index 969b343..9892b2d 100644
> --- a/include/asm-i386/errno.h
> +++ b/include/asm-i386/errno.h
> @@ -2,5 +2,5 @@ #ifndef _I386_ERRNO_H
>  #define _I386_ERRNO_H
>  
>  #include <asm-generic/errno.h>
> -
> +#define  i386_ERRNO_MAX GENERIC_ERRNO_MAX
>  #endif
> diff --git a/include/asm-i386/unistd.h b/include/asm-i386/unistd.h
> index eb4b152..f52ec68 100644
> --- a/include/asm-i386/unistd.h
> +++ b/include/asm-i386/unistd.h
> @@ -326,12 +326,13 @@ #define __NR_vmsplice		316
>  #define NR_syscalls 317
>  
>  /*
> - * user-visible error numbers are in the range -1 - -128: see
> - * <asm-i386/errno.h>
> + * user-visible error numbers are in the range -1 - -i386_ERRNO_MAX
>   */
> +#include <asm-i386/errno.h>
> +
>  #define __syscall_return(type, res) \
>  do { \
> -	if ((unsigned long)(res) >= (unsigned long)(-(128 + 1))) { \
> +	if ((unsigned long)(res) >= (unsigned long)(-(i386_ERRNO_MAX))) { \
>  		errno = -(res); \
>  		res = -1; \
>  	} \
> -

Thanks.
---
~Randy

  reply	other threads:[~2006-06-21  0:02 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-20  9:40 Masatake YAMATO
2006-06-21  0:04 ` Randy.Dunlap [this message]
2006-06-21  4:21 ` H. Peter Anvin
2006-06-21  6:02   ` Masatake YAMATO
2006-06-21  6:05     ` H. Peter Anvin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060620170450.e2fd1e02.rdunlap@xenotime.net \
    --to=rdunlap@xenotime.net \
    --cc=jet@gyve.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®