]> git.hungrycats.org Git - linux/commitdiff
[PATCH] s390: core changes.
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Sat, 7 Aug 2004 07:55:02 +0000 (00:55 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sat, 7 Aug 2004 07:55:02 +0000 (00:55 -0700)
From: Martin Schwidefsky <schwidefsky@de.ibm.com>

s390 core changes:
 - Add 32 bit compat code for ptrace requests PTRACE_GETEVENTMSG,
   PTRACE_GETSIGINFO and PTRACE_SETSIGINFO.
 - Make non-smp kernel compile.
 - Regenerate default configuration.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/s390/appldata/appldata_base.c
arch/s390/defconfig
arch/s390/kernel/compat_linux.h
arch/s390/kernel/compat_signal.c
arch/s390/kernel/ptrace.c
arch/s390/mm/cmm.c
drivers/s390/net/iucv.c

index d957683d6165aec1f8e9cf8c13375ed33dcfac0e..1395840ba98f7d3a03d6e49ca99ee572d2553ffd 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/errno.h>
 #include <asm/uaccess.h>
 #include <asm/io.h>
+#include <asm/smp.h>
 #include <linux/interrupt.h>
 #include <linux/proc_fs.h>
 #include <linux/page-flags.h>
index ec342423d0d9eb17f9c6cc6714c6978e41ace3b1..5e6b80c217bf7425d0809f90d8e6eda05a93f95d 100644 (file)
@@ -11,7 +11,6 @@ CONFIG_UID16=y
 #
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
-CONFIG_STANDALONE=y
 
 #
 # General setup
@@ -93,6 +92,7 @@ CONFIG_NO_IDLE_HZ_INIT=y
 #
 # Generic Driver Options
 #
+CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
 # CONFIG_DEBUG_DRIVER is not set
@@ -511,7 +511,7 @@ CONFIG_CRYPTO=y
 # CONFIG_CRYPTO_BLOWFISH is not set
 # CONFIG_CRYPTO_TWOFISH is not set
 # CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_AES_GENERIC is not set
 # CONFIG_CRYPTO_CAST5 is not set
 # CONFIG_CRYPTO_CAST6 is not set
 # CONFIG_CRYPTO_TEA is not set
index a0e6722b6981b3e671286ddef0d2429e7c0af459..48209a81ae9fbc6df2cfe0273bd05518e8352f99 100644 (file)
@@ -214,4 +214,7 @@ struct sigevent32 {
        } _sigev_un;
 };
 
+extern int copy_siginfo_to_user32(siginfo_t32 __user *to, siginfo_t *from);
+extern int copy_siginfo_from_user32(siginfo_t *to, siginfo_t32 __user *from);
+
 #endif /* _ASM_S390X_S390_H */
index 70c83cb56c3e9535dde928e3923bb73d672d492a..e8c8b2fe7af5789b436b47d5990984b71c5cdc6c 100644 (file)
@@ -106,6 +106,53 @@ int copy_siginfo_to_user32(siginfo_t32 __user *to, siginfo_t *from)
        return err;
 }
 
+int copy_siginfo_from_user32(siginfo_t *to, siginfo_t32 __user *from)
+{
+       int err;
+       u32 tmp;
+
+       if (!access_ok (VERIFY_READ, from, sizeof(siginfo_t32)))
+               return -EFAULT;
+
+       err = __get_user(to->si_signo, &from->si_signo);
+       err |= __get_user(to->si_errno, &from->si_errno);
+       err |= __get_user(to->si_code, &from->si_code);
+
+       if (from->si_code < 0)
+               err |= __copy_from_user(&to->_sifields._pad, &from->_sifields._pad, SI_PAD_SIZE);
+       else {
+               switch (from->si_code >> 16) {
+               case __SI_RT >> 16: /* This is not generated by the kernel as of now.  */
+               case __SI_MESGQ >> 16:
+                       err |= __get_user(to->si_int, &from->si_int);
+                       /* fallthrough */
+               case __SI_KILL >> 16:
+                       err |= __get_user(to->si_pid, &from->si_pid);
+                       err |= __get_user(to->si_uid, &from->si_uid);
+                       break;
+               case __SI_CHLD >> 16:
+                       err |= __get_user(to->si_pid, &from->si_pid);
+                       err |= __get_user(to->si_uid, &from->si_uid);
+                       err |= __get_user(to->si_utime, &from->si_utime);
+                       err |= __get_user(to->si_stime, &from->si_stime);
+                       err |= __get_user(to->si_status, &from->si_status);
+                       break;
+               case __SI_FAULT >> 16:
+                       err |= __get_user(tmp, &from->si_addr);
+                       to->si_addr = (void *)(u64) (tmp & PSW32_ADDR_INSN);
+                       break;
+               case __SI_POLL >> 16:
+               case __SI_TIMER >> 16:
+                       err |= __get_user(to->si_band, &from->si_band);
+                       err |= __get_user(to->si_fd, &from->si_fd);
+                       break;
+               default:
+                       break;
+               }
+       }
+       return err;
+}
+
 /*
  * Atomically swap in the new signal mask, and wait for a signal.
  */
index a0ddc4f7d9e5060a00bc4601f345ce9358ee65fd..26b89e55d9c1bdbf46dbfc6375b22cd7de869bc2 100644 (file)
@@ -553,6 +553,19 @@ do_ptrace_emu31(struct task_struct *child, long request, long addr, long data)
                        copied += sizeof(unsigned int);
                }
                return 0;
+       case PTRACE_GETEVENTMSG:
+               return put_user((__u32) child->ptrace_message,
+                               (unsigned int __user *) data);
+       case PTRACE_GETSIGINFO:
+               if (child->last_siginfo == NULL)
+                       return -EINVAL;
+               return copy_siginfo_to_user32((siginfo_t32 __user *) data,
+                                             child->last_siginfo);
+       case PTRACE_SETSIGINFO:
+               if (child->last_siginfo == NULL)
+                       return -EINVAL;
+               return copy_siginfo_from_user32(child->last_siginfo,
+                                               (siginfo_t32 __user *) data);
        }
        return ptrace_request(child, request, addr, data);
 }
index 72d4f1e6ff7b70d14bd31d2c60056129243e77b5..170da71fa2ff3c380da6bfa9cfdb1da41f7e9137 100644 (file)
@@ -19,6 +19,7 @@
 
 #include <asm/pgalloc.h>
 #include <asm/uaccess.h>
+#include <asm/smp.h>
 
 #include "../../../drivers/s390/net/smsgiucv.h"
 
index a3e4d0f83a95e4aaa70d35b5ab0c165826f293a6..8c63753c35e669cd4f2d44fc835a3c97c95f5732 100644 (file)
@@ -1,5 +1,5 @@
 /* 
- * $Id: iucv.c,v 1.39 2004/07/12 06:54:14 braunu Exp $
+ * $Id: iucv.c,v 1.40 2004/08/04 12:29:33 cborntra Exp $
  *
  * IUCV network driver
  *
@@ -29,7 +29,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
- * RELEASE-TAG: IUCV lowlevel driver $Revision: 1.39 $
+ * RELEASE-TAG: IUCV lowlevel driver $Revision: 1.40 $
  *
  */
 \f
@@ -53,6 +53,7 @@
 #include <asm/io.h>
 #include <asm/s390_ext.h>
 #include <asm/ebcdic.h>
+#include <asm/smp.h>
 #include <asm/ccwdev.h> //for root device stuff
 
 /* FLAGS:
@@ -354,7 +355,7 @@ do { \
 static void
 iucv_banner(void)
 {
-       char vbuf[] = "$Revision: 1.39 $";
+       char vbuf[] = "$Revision: 1.40 $";
        char *version = vbuf;
 
        if ((version = strchr(version, ':'))) {