9 #include <linux/linkage.h>
12 #include <linux/futex.h>
13 #include <linux/ptrace.h>
15 #include <asm/uaccess.h>
28 *entry = compat_ptr((*uentry) & ~1);
29 *pi = (
unsigned int)(*uentry) & 1;
38 void __user *
uaddr = compat_ptr(base + futex_offset);
51 struct compat_robust_list_head __user *head = curr->compat_robust_list;
66 if (fetch_robust_entry(&uentry, &entry, &head->list.
next, &pi))
71 if (
get_user(futex_offset, &head->futex_offset))
77 if (fetch_robust_entry(&upending, &pending,
78 &head->list_op_pending, &pip))
82 while (entry != (
struct robust_list __user *) &head->list) {
87 rc = fetch_robust_entry(&next_uentry, &next_entry,
93 if (entry != pending) {
94 void __user *
uaddr = futex_uaddr(entry, futex_offset);
101 uentry = next_uentry;
113 void __user *
uaddr = futex_uaddr(pending, futex_offset);
138 struct compat_robust_list_head __user *
head;
145 WARN_ONCE(1,
"deprecated: get_robust_list will be deleted in 2013.\n");
162 head = p->compat_robust_list;
165 if (
put_user(
sizeof(*head), len_ptr))
167 return put_user(ptr_to_compat(head), head_ptr);
189 if (!timespec_valid(&ts))
192 t = timespec_to_ktime(ts);
201 return do_futex(uaddr, op, val, tp, uaddr2, val2, val3);