diff options
author | Ingo Molnar <mingo@elte.hu> | 2010-01-29 09:24:57 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2010-01-29 10:36:22 +0100 |
commit | ae7f6711d6231c9ba54feb5ba9856c3775e482f8 (patch) | |
tree | 89070c82204b2503348e4fd6c51d25a169375545 /drivers/s390/block/dasd_eckd.c | |
parent | 64abebf731df87e6f4ae7d9ffc340bdf0c033e44 (diff) | |
parent | b23ff0e9330e4b11e18af984d50573598e10e7f9 (diff) | |
download | linux-ae7f6711d6231c9ba54feb5ba9856c3775e482f8.tar.gz linux-ae7f6711d6231c9ba54feb5ba9856c3775e482f8.tar.bz2 linux-ae7f6711d6231c9ba54feb5ba9856c3775e482f8.zip |
Merge branch 'perf/urgent' into perf/core
Merge reason: We want to queue up a dependent patch. Also update to
later -rc's.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'drivers/s390/block/dasd_eckd.c')
-rw-r--r-- | drivers/s390/block/dasd_eckd.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index 5819dc02a143..1c500c462225 100644 --- a/drivers/s390/block/dasd_eckd.c +++ b/drivers/s390/block/dasd_eckd.c @@ -23,6 +23,7 @@ #include <asm/debug.h> #include <asm/idals.h> #include <asm/ebcdic.h> +#include <asm/compat.h> #include <asm/io.h> #include <asm/uaccess.h> #include <asm/cio.h> @@ -2844,13 +2845,16 @@ static int dasd_symm_io(struct dasd_device *device, void __user *argp) rc = -EFAULT; if (copy_from_user(&usrparm, argp, sizeof(usrparm))) goto out; -#ifndef CONFIG_64BIT - /* Make sure pointers are sane even on 31 bit. */ - if ((usrparm.psf_data >> 32) != 0 || (usrparm.rssd_result >> 32) != 0) { + if (is_compat_task() || sizeof(long) == 4) { + /* Make sure pointers are sane even on 31 bit. */ rc = -EINVAL; - goto out; + if ((usrparm.psf_data >> 32) != 0) + goto out; + if ((usrparm.rssd_result >> 32) != 0) + goto out; + usrparm.psf_data &= 0x7fffffffULL; + usrparm.rssd_result &= 0x7fffffffULL; } -#endif /* alloc I/O data area */ psf_data = kzalloc(usrparm.psf_data_len, GFP_KERNEL | GFP_DMA); rssd_result = kzalloc(usrparm.rssd_result_len, GFP_KERNEL | GFP_DMA); |