core/locking changes for v3.4
Linus,
Please pull the latest core-locking-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core-locking-for-linus
HEAD: 81b40539e748b108d143a5e38526ab00a6a784b6 futex: Simplify return logic
Thanks,
Ingo
------------------>
Thomas Gleixner (2):
futex: Cover all PI opcodes with cmpxchg enabled check
futex: Simplify return logic
kernel/futex.c | 51 +++++++++++++++++++++++---------------------------- 1 files changed, 23 insertions(+), 28 deletions(-)
kernel/futex.c +23 -28
@@ -2616,7 +2616,7 @@ void exit_robust_list(struct task_struct *curr)long do_futex (u32 __user *uaddr,int op,u32 val,ktime_t *timeout,u32 __user *uaddr2,u32 val2,u32 val3) { -int ret = -ENOSYS , cmd = op &FUTEX_CMD_MASK ; +int cmd = op &FUTEX_CMD_MASK ;unsigned int flags =0 ;if (!(op &FUTEX_PRIVATE_FLAG ))
@@ -2629,49 +2629,44 @@ long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout, }switch (cmd) { +case FUTEX_LOCK_PI : +case FUTEX_UNLOCK_PI : +case FUTEX_TRYLOCK_PI : +case FUTEX_WAIT_REQUEUE_PI : +case FUTEX_CMP_REQUEUE_PI : +if (!futex_cmpxchg_enabled) +return -ENOSYS ; + } + +switch (cmd) {case FUTEX_WAIT : val3 =FUTEX_BITSET_MATCH_ANY ;case FUTEX_WAIT_BITSET : - ret =futex_wait (uaddr, flags, val, timeout, val3); -break ; +return futex_wait (uaddr, flags, val, timeout, val3);case FUTEX_WAKE : val3 =FUTEX_BITSET_MATCH_ANY ;case FUTEX_WAKE_BITSET : - ret =futex_wake (uaddr, flags, val, val3); -break ; +return futex_wake (uaddr, flags, val, val3);case FUTEX_REQUEUE : - ret =futex_requeue (uaddr, flags, uaddr2, val, val2,NULL ,0 ); -break ; +return futex_requeue (uaddr, flags, uaddr2, val, val2,NULL ,0 );case FUTEX_CMP_REQUEUE : - ret =futex_requeue (uaddr, flags, uaddr2, val, val2, &val3,0 ); -break ; +return futex_requeue (uaddr, flags, uaddr2, val, val2, &val3,0 );case FUTEX_WAKE_OP : - ret =futex_wake_op (uaddr, flags, uaddr2, val, val2, val3); -break ; +return futex_wake_op (uaddr, flags, uaddr2, val, val2, val3);case FUTEX_LOCK_PI : -if (futex_cmpxchg_enabled) - ret =futex_lock_pi (uaddr, flags, val, timeout,0 ); -break ; +return futex_lock_pi (uaddr, flags, val, timeout,0 );case FUTEX_UNLOCK_PI : -if (futex_cmpxchg_enabled) - ret =futex_unlock_pi (uaddr, flags); -break ; +return futex_unlock_pi (uaddr, flags);case FUTEX_TRYLOCK_PI : -if (futex_cmpxchg_enabled) - ret =futex_lock_pi (uaddr, flags,0 , timeout,1 ); -break ; +return futex_lock_pi (uaddr, flags,0 , timeout,1 );case FUTEX_WAIT_REQUEUE_PI : val3 =FUTEX_BITSET_MATCH_ANY ; - ret =futex_wait_requeue_pi (uaddr, flags, val, timeout, val3, - uaddr2); -break ; +return futex_wait_requeue_pi (uaddr, flags, val, timeout, val3, + uaddr2);case FUTEX_CMP_REQUEUE_PI : - ret =futex_requeue (uaddr, flags, uaddr2, val, val2, &val3,1 ); -break ; -default : - ret = -ENOSYS ; +return futex_requeue (uaddr, flags, uaddr2, val, val2, &val3,1 ); } -return ret; +return -ENOSYS ; }