diff options
Diffstat (limited to 'kernel/futex.c')
-rw-r--r-- | kernel/futex.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/kernel/futex.c b/kernel/futex.c index 93ef30ba209f..af7b81cbde30 100644 --- a/kernel/futex.c +++ b/kernel/futex.c | |||
@@ -282,9 +282,9 @@ static inline int get_futex_value_locked(u32 *dest, u32 __user *from) | |||
282 | { | 282 | { |
283 | int ret; | 283 | int ret; |
284 | 284 | ||
285 | inc_preempt_count(); | 285 | pagefault_disable(); |
286 | ret = __copy_from_user_inatomic(dest, from, sizeof(u32)); | 286 | ret = __copy_from_user_inatomic(dest, from, sizeof(u32)); |
287 | dec_preempt_count(); | 287 | pagefault_enable(); |
288 | 288 | ||
289 | return ret ? -EFAULT : 0; | 289 | return ret ? -EFAULT : 0; |
290 | } | 290 | } |
@@ -585,9 +585,9 @@ static int wake_futex_pi(u32 __user *uaddr, u32 uval, struct futex_q *this) | |||
585 | if (!(uval & FUTEX_OWNER_DIED)) { | 585 | if (!(uval & FUTEX_OWNER_DIED)) { |
586 | newval = FUTEX_WAITERS | new_owner->pid; | 586 | newval = FUTEX_WAITERS | new_owner->pid; |
587 | 587 | ||
588 | inc_preempt_count(); | 588 | pagefault_disable(); |
589 | curval = futex_atomic_cmpxchg_inatomic(uaddr, uval, newval); | 589 | curval = futex_atomic_cmpxchg_inatomic(uaddr, uval, newval); |
590 | dec_preempt_count(); | 590 | pagefault_enable(); |
591 | if (curval == -EFAULT) | 591 | if (curval == -EFAULT) |
592 | return -EFAULT; | 592 | return -EFAULT; |
593 | if (curval != uval) | 593 | if (curval != uval) |
@@ -618,9 +618,9 @@ static int unlock_futex_pi(u32 __user *uaddr, u32 uval) | |||
618 | * There is no waiter, so we unlock the futex. The owner died | 618 | * There is no waiter, so we unlock the futex. The owner died |
619 | * bit has not to be preserved here. We are the owner: | 619 | * bit has not to be preserved here. We are the owner: |
620 | */ | 620 | */ |
621 | inc_preempt_count(); | 621 | pagefault_disable(); |
622 | oldval = futex_atomic_cmpxchg_inatomic(uaddr, uval, 0); | 622 | oldval = futex_atomic_cmpxchg_inatomic(uaddr, uval, 0); |
623 | dec_preempt_count(); | 623 | pagefault_enable(); |
624 | 624 | ||
625 | if (oldval == -EFAULT) | 625 | if (oldval == -EFAULT) |
626 | return oldval; | 626 | return oldval; |
@@ -1158,9 +1158,9 @@ static int futex_lock_pi(u32 __user *uaddr, int detect, unsigned long sec, | |||
1158 | */ | 1158 | */ |
1159 | newval = current->pid; | 1159 | newval = current->pid; |
1160 | 1160 | ||
1161 | inc_preempt_count(); | 1161 | pagefault_disable(); |
1162 | curval = futex_atomic_cmpxchg_inatomic(uaddr, 0, newval); | 1162 | curval = futex_atomic_cmpxchg_inatomic(uaddr, 0, newval); |
1163 | dec_preempt_count(); | 1163 | pagefault_enable(); |
1164 | 1164 | ||
1165 | if (unlikely(curval == -EFAULT)) | 1165 | if (unlikely(curval == -EFAULT)) |
1166 | goto uaddr_faulted; | 1166 | goto uaddr_faulted; |
@@ -1183,9 +1183,9 @@ static int futex_lock_pi(u32 __user *uaddr, int detect, unsigned long sec, | |||
1183 | uval = curval; | 1183 | uval = curval; |
1184 | newval = uval | FUTEX_WAITERS; | 1184 | newval = uval | FUTEX_WAITERS; |
1185 | 1185 | ||
1186 | inc_preempt_count(); | 1186 | pagefault_disable(); |
1187 | curval = futex_atomic_cmpxchg_inatomic(uaddr, uval, newval); | 1187 | curval = futex_atomic_cmpxchg_inatomic(uaddr, uval, newval); |
1188 | dec_preempt_count(); | 1188 | pagefault_enable(); |
1189 | 1189 | ||
1190 | if (unlikely(curval == -EFAULT)) | 1190 | if (unlikely(curval == -EFAULT)) |
1191 | goto uaddr_faulted; | 1191 | goto uaddr_faulted; |
@@ -1215,10 +1215,10 @@ static int futex_lock_pi(u32 __user *uaddr, int detect, unsigned long sec, | |||
1215 | newval = current->pid | | 1215 | newval = current->pid | |
1216 | FUTEX_OWNER_DIED | FUTEX_WAITERS; | 1216 | FUTEX_OWNER_DIED | FUTEX_WAITERS; |
1217 | 1217 | ||
1218 | inc_preempt_count(); | 1218 | pagefault_disable(); |
1219 | curval = futex_atomic_cmpxchg_inatomic(uaddr, | 1219 | curval = futex_atomic_cmpxchg_inatomic(uaddr, |
1220 | uval, newval); | 1220 | uval, newval); |
1221 | dec_preempt_count(); | 1221 | pagefault_enable(); |
1222 | 1222 | ||
1223 | if (unlikely(curval == -EFAULT)) | 1223 | if (unlikely(curval == -EFAULT)) |
1224 | goto uaddr_faulted; | 1224 | goto uaddr_faulted; |
@@ -1390,9 +1390,9 @@ retry_locked: | |||
1390 | * anyone else up: | 1390 | * anyone else up: |
1391 | */ | 1391 | */ |
1392 | if (!(uval & FUTEX_OWNER_DIED)) { | 1392 | if (!(uval & FUTEX_OWNER_DIED)) { |
1393 | inc_preempt_count(); | 1393 | pagefault_disable(); |
1394 | uval = futex_atomic_cmpxchg_inatomic(uaddr, current->pid, 0); | 1394 | uval = futex_atomic_cmpxchg_inatomic(uaddr, current->pid, 0); |
1395 | dec_preempt_count(); | 1395 | pagefault_enable(); |
1396 | } | 1396 | } |
1397 | 1397 | ||
1398 | if (unlikely(uval == -EFAULT)) | 1398 | if (unlikely(uval == -EFAULT)) |