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 @@
#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>
......
......@@ -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
......
......@@ -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 */
......@@ -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.
*/
......
......@@ -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);
}
......
......@@ -19,6 +19,7 @@
#include <asm/pgalloc.h>
#include <asm/uaccess.h>
#include <asm/smp.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
*
......@@ -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 $
*
*/
......@@ -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, ':'))) {
......
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