diff options
| -rw-r--r-- | arch/ia64/ia32/sys_ia32.c | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/arch/ia64/ia32/sys_ia32.c b/arch/ia64/ia32/sys_ia32.c index 3945d378bd7e..70dba1f0e2ee 100644 --- a/arch/ia64/ia32/sys_ia32.c +++ b/arch/ia64/ia32/sys_ia32.c | |||
| @@ -52,9 +52,9 @@ | |||
| 52 | #include <linux/compat.h> | 52 | #include <linux/compat.h> |
| 53 | #include <linux/vfs.h> | 53 | #include <linux/vfs.h> |
| 54 | #include <linux/mman.h> | 54 | #include <linux/mman.h> |
| 55 | #include <linux/mutex.h> | ||
| 55 | 56 | ||
| 56 | #include <asm/intrinsics.h> | 57 | #include <asm/intrinsics.h> |
| 57 | #include <asm/semaphore.h> | ||
| 58 | #include <asm/types.h> | 58 | #include <asm/types.h> |
| 59 | #include <asm/uaccess.h> | 59 | #include <asm/uaccess.h> |
| 60 | #include <asm/unistd.h> | 60 | #include <asm/unistd.h> |
| @@ -86,7 +86,7 @@ | |||
| 86 | * while doing so. | 86 | * while doing so. |
| 87 | */ | 87 | */ |
| 88 | /* XXX make per-mm: */ | 88 | /* XXX make per-mm: */ |
| 89 | static DECLARE_MUTEX(ia32_mmap_sem); | 89 | static DEFINE_MUTEX(ia32_mmap_mutex); |
| 90 | 90 | ||
| 91 | asmlinkage long | 91 | asmlinkage long |
| 92 | sys32_execve (char __user *name, compat_uptr_t __user *argv, compat_uptr_t __user *envp, | 92 | sys32_execve (char __user *name, compat_uptr_t __user *argv, compat_uptr_t __user *envp, |
| @@ -895,11 +895,11 @@ ia32_do_mmap (struct file *file, unsigned long addr, unsigned long len, int prot | |||
| 895 | prot = get_prot32(prot); | 895 | prot = get_prot32(prot); |
| 896 | 896 | ||
| 897 | #if PAGE_SHIFT > IA32_PAGE_SHIFT | 897 | #if PAGE_SHIFT > IA32_PAGE_SHIFT |
| 898 | down(&ia32_mmap_sem); | 898 | mutex_lock(&ia32_mmap_mutex); |
| 899 | { | 899 | { |
| 900 | addr = emulate_mmap(file, addr, len, prot, flags, offset); | 900 | addr = emulate_mmap(file, addr, len, prot, flags, offset); |
| 901 | } | 901 | } |
| 902 | up(&ia32_mmap_sem); | 902 | mutex_unlock(&ia32_mmap_mutex); |
| 903 | #else | 903 | #else |
| 904 | down_write(¤t->mm->mmap_sem); | 904 | down_write(¤t->mm->mmap_sem); |
| 905 | { | 905 | { |
| @@ -1000,11 +1000,9 @@ sys32_munmap (unsigned int start, unsigned int len) | |||
| 1000 | if (start >= end) | 1000 | if (start >= end) |
| 1001 | return 0; | 1001 | return 0; |
| 1002 | 1002 | ||
| 1003 | down(&ia32_mmap_sem); | 1003 | mutex_lock(&ia32_mmap_mutex); |
| 1004 | { | 1004 | ret = sys_munmap(start, end - start); |
| 1005 | ret = sys_munmap(start, end - start); | 1005 | mutex_unlock(&ia32_mmap_mutex); |
| 1006 | } | ||
| 1007 | up(&ia32_mmap_sem); | ||
| 1008 | #endif | 1006 | #endif |
| 1009 | return ret; | 1007 | return ret; |
| 1010 | } | 1008 | } |
| @@ -1056,7 +1054,7 @@ sys32_mprotect (unsigned int start, unsigned int len, int prot) | |||
| 1056 | if (retval < 0) | 1054 | if (retval < 0) |
| 1057 | return retval; | 1055 | return retval; |
| 1058 | 1056 | ||
| 1059 | down(&ia32_mmap_sem); | 1057 | mutex_lock(&ia32_mmap_mutex); |
| 1060 | { | 1058 | { |
| 1061 | if (offset_in_page(start)) { | 1059 | if (offset_in_page(start)) { |
| 1062 | /* start address is 4KB aligned but not page aligned. */ | 1060 | /* start address is 4KB aligned but not page aligned. */ |
| @@ -1080,7 +1078,7 @@ sys32_mprotect (unsigned int start, unsigned int len, int prot) | |||
| 1080 | retval = sys_mprotect(start, end - start, prot); | 1078 | retval = sys_mprotect(start, end - start, prot); |
| 1081 | } | 1079 | } |
| 1082 | out: | 1080 | out: |
| 1083 | up(&ia32_mmap_sem); | 1081 | mutex_unlock(&ia32_mmap_mutex); |
| 1084 | return retval; | 1082 | return retval; |
| 1085 | #endif | 1083 | #endif |
| 1086 | } | 1084 | } |
| @@ -1124,11 +1122,9 @@ sys32_mremap (unsigned int addr, unsigned int old_len, unsigned int new_len, | |||
| 1124 | old_len = PAGE_ALIGN(old_end) - addr; | 1122 | old_len = PAGE_ALIGN(old_end) - addr; |
| 1125 | new_len = PAGE_ALIGN(new_end) - addr; | 1123 | new_len = PAGE_ALIGN(new_end) - addr; |
| 1126 | 1124 | ||
| 1127 | down(&ia32_mmap_sem); | 1125 | mutex_lock(&ia32_mmap_mutex); |
| 1128 | { | 1126 | ret = sys_mremap(addr, old_len, new_len, flags, new_addr); |
| 1129 | ret = sys_mremap(addr, old_len, new_len, flags, new_addr); | 1127 | mutex_unlock(&ia32_mmap_mutex); |
| 1130 | } | ||
| 1131 | up(&ia32_mmap_sem); | ||
| 1132 | 1128 | ||
| 1133 | if ((ret >= 0) && (old_len < new_len)) { | 1129 | if ((ret >= 0) && (old_len < new_len)) { |
| 1134 | /* mremap expanded successfully */ | 1130 | /* mremap expanded successfully */ |
