6 #include <linux/futex.h>
 
   8 #include <asm/uaccess.h>
 
  11 futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
 
  13         int op = (encoded_op >> 28) & 7;
 
  14         int cmp = (encoded_op >> 24) & 15;
 
  15         int oparg = (encoded_op << 8) >> 20;
 
  16         int cmparg = (encoded_op << 20) >> 20;
 
  18         if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
 
  21         if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
 
  40                 case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
 
  41                 case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
 
  42                 case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
 
  43                 case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
 
  44                 case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
 
  45                 case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
 
  46                 default: ret = -ENOSYS;