Commit f39dfb58 authored by Martin Schwidefsky's avatar Martin Schwidefsky Committed by Linus Torvalds

[PATCH] s390: core changes.

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: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 683a0c7f
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/smp.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/page-flags.h> #include <linux/page-flags.h>
......
...@@ -11,7 +11,6 @@ CONFIG_UID16=y ...@@ -11,7 +11,6 @@ CONFIG_UID16=y
# #
CONFIG_EXPERIMENTAL=y CONFIG_EXPERIMENTAL=y
CONFIG_CLEAN_COMPILE=y CONFIG_CLEAN_COMPILE=y
CONFIG_STANDALONE=y
# #
# General setup # General setup
...@@ -93,6 +92,7 @@ CONFIG_NO_IDLE_HZ_INIT=y ...@@ -93,6 +92,7 @@ CONFIG_NO_IDLE_HZ_INIT=y
# #
# Generic Driver Options # Generic Driver Options
# #
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set # CONFIG_FW_LOADER is not set
# CONFIG_DEBUG_DRIVER is not set # CONFIG_DEBUG_DRIVER is not set
...@@ -511,7 +511,7 @@ CONFIG_CRYPTO=y ...@@ -511,7 +511,7 @@ CONFIG_CRYPTO=y
# CONFIG_CRYPTO_BLOWFISH is not set # CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set # CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT 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_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set # CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_TEA is not set # CONFIG_CRYPTO_TEA is not set
......
...@@ -214,4 +214,7 @@ struct sigevent32 { ...@@ -214,4 +214,7 @@ struct sigevent32 {
} _sigev_un; } _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 */ #endif /* _ASM_S390X_S390_H */
...@@ -106,6 +106,53 @@ int copy_siginfo_to_user32(siginfo_t32 __user *to, siginfo_t *from) ...@@ -106,6 +106,53 @@ int copy_siginfo_to_user32(siginfo_t32 __user *to, siginfo_t *from)
return err; 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. * Atomically swap in the new signal mask, and wait for a signal.
*/ */
......
...@@ -553,6 +553,19 @@ do_ptrace_emu31(struct task_struct *child, long request, long addr, long data) ...@@ -553,6 +553,19 @@ do_ptrace_emu31(struct task_struct *child, long request, long addr, long data)
copied += sizeof(unsigned int); copied += sizeof(unsigned int);
} }
return 0; 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); return ptrace_request(child, request, addr, data);
} }
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/smp.h>
#include "../../../drivers/s390/net/smsgiucv.h" #include "../../../drivers/s390/net/smsgiucv.h"
......
/* /*
* $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 * IUCV network driver
* *
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * 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 $
* *
*/ */
...@@ -53,6 +53,7 @@ ...@@ -53,6 +53,7 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/s390_ext.h> #include <asm/s390_ext.h>
#include <asm/ebcdic.h> #include <asm/ebcdic.h>
#include <asm/smp.h>
#include <asm/ccwdev.h> //for root device stuff #include <asm/ccwdev.h> //for root device stuff
/* FLAGS: /* FLAGS:
...@@ -354,7 +355,7 @@ do { \ ...@@ -354,7 +355,7 @@ do { \
static void static void
iucv_banner(void) iucv_banner(void)
{ {
char vbuf[] = "$Revision: 1.39 $"; char vbuf[] = "$Revision: 1.40 $";
char *version = vbuf; char *version = vbuf;
if ((version = strchr(version, ':'))) { if ((version = strchr(version, ':'))) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment