I'm trying to do a full rebase (history clean) of the klibc kernel tree, 
and came across the following changesets between klibc 1.3.12 and .16:
--- a/usr/klibc/arch/s390/syscall.c
+++ b/usr/klibc/arch/s390/syscall.c
@@ -11,6 +11,6 @@ long int __syscall_common(long int err)
  {
         if ((unsigned long)(err) < (unsigned long)(-125))
                 return err;
-       errno = err;
+       errno = -err;
         return -1;
  }
diff --git a/usr/klibc/arch/s390x/syscall.c b/usr/klibc/arch/s390x/syscall.c
index 0d6b27e..c0f17c4 100644
--- a/usr/klibc/arch/s390x/syscall.c
+++ b/usr/klibc/arch/s390x/syscall.c
@@ -11,6 +11,6 @@ long int __syscall_common(long int err)
  {
         if ((unsigned long)(err) < (unsigned long)(-125))
                 return err;
-       errno = -err;
+       errno = err;
         return -1;
  }
The former is clearly right and the latter is clearly wrong.  Should I 
change the s390x version to match s390?
	-hpa
On Mon, May 01, 2006 at 10:58:16AM -0700, H. Peter Anvin wrote:> I'm trying to do a full rebase (history clean) of the klibc kernel tree, and came across the following changesets between klibc 1.3.12 and .16: > > --- a/usr/klibc/arch/s390/syscall.c > +++ b/usr/klibc/arch/s390/syscall.c > @@ -11,6 +11,6 @@ long int __syscall_common(long int err) > { > if ((unsigned long)(err) < (unsigned long)(-125)) > return err; > - errno = err; > + errno = -err; > return -1; > } > diff --git a/usr/klibc/arch/s390x/syscall.c b/usr/klibc/arch/s390x/syscall.c > index 0d6b27e..c0f17c4 100644 > --- a/usr/klibc/arch/s390x/syscall.c > +++ b/usr/klibc/arch/s390x/syscall.c > @@ -11,6 +11,6 @@ long int __syscall_common(long int err) > { > if ((unsigned long)(err) < (unsigned long)(-125)) > return err; > - errno = -err; > + errno = err; > return -1; > } > > > The former is clearly right and the latter is clearly wrong. Should I change the s390x version to match s390?Looks like the right thing to do. Even though -125 seems to be wrong since we have already #define ENOTRECOVERABLE 131 /* State not recoverable */ Testing against -4095 is probably better.
Fix s390/s390x errno handling.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
---
 usr/klibc/arch/s390/syscall.c  |    2 +-
 usr/klibc/arch/s390x/syscall.c |    4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/usr/klibc/arch/s390/syscall.c b/usr/klibc/arch/s390/syscall.c
index 0d6b27e..baf473b 100644
--- a/usr/klibc/arch/s390/syscall.c
+++ b/usr/klibc/arch/s390/syscall.c
@@ -9,7 +9,7 @@ #include <errno.h>
 
 long int __syscall_common(long int err)
 {
-	if ((unsigned long)(err) < (unsigned long)(-125))
+	if ((unsigned long)(err) < (unsigned long)(-4095))
 		return err;
 	errno = -err;
 	return -1;
diff --git a/usr/klibc/arch/s390x/syscall.c b/usr/klibc/arch/s390x/syscall.c
index c0f17c4..baf473b 100644
--- a/usr/klibc/arch/s390x/syscall.c
+++ b/usr/klibc/arch/s390x/syscall.c
@@ -9,8 +9,8 @@ #include <errno.h>
 
 long int __syscall_common(long int err)
 {
-	if ((unsigned long)(err) < (unsigned long)(-125))
+	if ((unsigned long)(err) < (unsigned long)(-4095))
 		return err;
-	errno = err;
+	errno = -err;
 	return -1;
 }