From 18608b7c9f89c874449083510cfe3244bd97cd3c Mon Sep 17 00:00:00 2001 From: Heiko Carstens Date: Tue, 9 Jan 2007 10:18:50 +0100 Subject: [PATCH] --- yaml --- r: 45355 b: refs/heads/master c: d8ad075ef60ca33f1bd8e227eed2202108fd6cd8 h: refs/heads/master i: 45353: ce6012a1fd2510125db9993824b3d03b2ce9bd70 45351: 95177be3143b99ecf78a1c1e4ace167caf8298ca v: v3 --- [refs] | 2 +- trunk/arch/s390/lib/uaccess_pt.c | 3 +++ trunk/arch/s390/lib/uaccess_std.c | 3 --- trunk/include/asm-s390/futex.h | 4 +++- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index fbcf8dbb7d1d..58e02e209dd7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: de338a3795bbcb3c3d77591f65118cbec776cc39 +refs/heads/master: d8ad075ef60ca33f1bd8e227eed2202108fd6cd8 diff --git a/trunk/arch/s390/lib/uaccess_pt.c b/trunk/arch/s390/lib/uaccess_pt.c index 633249c3ba91..49c3e46b4065 100644 --- a/trunk/arch/s390/lib/uaccess_pt.c +++ b/trunk/arch/s390/lib/uaccess_pt.c @@ -8,6 +8,7 @@ */ #include +#include #include #include #include @@ -18,6 +19,8 @@ static inline int __handle_fault(struct mm_struct *mm, unsigned long address, struct vm_area_struct *vma; int ret = -EFAULT; + if (in_atomic()) + return ret; down_read(&mm->mmap_sem); vma = find_vma(mm, address); if (unlikely(!vma)) diff --git a/trunk/arch/s390/lib/uaccess_std.c b/trunk/arch/s390/lib/uaccess_std.c index bbaca66fa293..56a0214e9928 100644 --- a/trunk/arch/s390/lib/uaccess_std.c +++ b/trunk/arch/s390/lib/uaccess_std.c @@ -258,8 +258,6 @@ int futex_atomic_op(int op, int __user *uaddr, int oparg, int *old) { int oldval = 0, newval, ret; - pagefault_disable(); - switch (op) { case FUTEX_OP_SET: __futex_atomic_op("lr %2,%5\n", @@ -284,7 +282,6 @@ int futex_atomic_op(int op, int __user *uaddr, int oparg, int *old) default: ret = -ENOSYS; } - pagefault_enable(); *old = oldval; return ret; } diff --git a/trunk/include/asm-s390/futex.h b/trunk/include/asm-s390/futex.h index 5e261e1de671..5c5d02de49e9 100644 --- a/trunk/include/asm-s390/futex.h +++ b/trunk/include/asm-s390/futex.h @@ -4,8 +4,8 @@ #ifdef __KERNEL__ #include +#include #include -#include static inline int futex_atomic_op_inuser (int encoded_op, int __user *uaddr) { @@ -21,7 +21,9 @@ static inline int futex_atomic_op_inuser (int encoded_op, int __user *uaddr) if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) return -EFAULT; + pagefault_disable(); ret = uaccess.futex_atomic_op(op, uaddr, oparg, &oldval); + pagefault_enable(); if (!ret) { switch (cmp) {