Lines Matching refs:rseq_cs

122 static int rseq_get_rseq_cs(struct task_struct *t, struct rseq_cs *rseq_cs)  in rseq_get_rseq_cs()  argument
124 struct rseq_cs __user *urseq_cs; in rseq_get_rseq_cs()
131 if (get_user(ptr, &t->rseq->rseq_cs.ptr64)) in rseq_get_rseq_cs()
134 if (copy_from_user(&ptr, &t->rseq->rseq_cs.ptr64, sizeof(ptr))) in rseq_get_rseq_cs()
138 memset(rseq_cs, 0, sizeof(*rseq_cs)); in rseq_get_rseq_cs()
143 urseq_cs = (struct rseq_cs __user *)(unsigned long)ptr; in rseq_get_rseq_cs()
144 if (copy_from_user(rseq_cs, urseq_cs, sizeof(*rseq_cs))) in rseq_get_rseq_cs()
147 if (rseq_cs->start_ip >= TASK_SIZE || in rseq_get_rseq_cs()
148 rseq_cs->start_ip + rseq_cs->post_commit_offset >= TASK_SIZE || in rseq_get_rseq_cs()
149 rseq_cs->abort_ip >= TASK_SIZE || in rseq_get_rseq_cs()
150 rseq_cs->version > 0) in rseq_get_rseq_cs()
153 if (rseq_cs->start_ip + rseq_cs->post_commit_offset < rseq_cs->start_ip) in rseq_get_rseq_cs()
156 if (rseq_cs->abort_ip - rseq_cs->start_ip < rseq_cs->post_commit_offset) in rseq_get_rseq_cs()
159 usig = (u32 __user *)(unsigned long)(rseq_cs->abort_ip - sizeof(u32)); in rseq_get_rseq_cs()
220 return put_user(0UL, &t->rseq->rseq_cs.ptr64); in clear_rseq_cs()
222 if (clear_user(&t->rseq->rseq_cs.ptr64, sizeof(t->rseq->rseq_cs.ptr64))) in clear_rseq_cs()
232 static bool in_rseq_cs(unsigned long ip, struct rseq_cs *rseq_cs) in in_rseq_cs() argument
234 return ip - rseq_cs->start_ip < rseq_cs->post_commit_offset; in in_rseq_cs()
241 struct rseq_cs rseq_cs; in rseq_ip_fixup() local
244 ret = rseq_get_rseq_cs(t, &rseq_cs); in rseq_ip_fixup()
253 if (!in_rseq_cs(ip, &rseq_cs)) in rseq_ip_fixup()
255 ret = rseq_need_restart(t, rseq_cs.flags); in rseq_ip_fixup()
261 trace_rseq_ip_fixup(ip, rseq_cs.start_ip, rseq_cs.post_commit_offset, in rseq_ip_fixup()
262 rseq_cs.abort_ip); in rseq_ip_fixup()
263 instruction_pointer_set(regs, (unsigned long)rseq_cs.abort_ip); in rseq_ip_fixup()
315 struct rseq_cs rseq_cs; in rseq_syscall() local
319 if (rseq_get_rseq_cs(t, &rseq_cs) || in_rseq_cs(ip, &rseq_cs)) in rseq_syscall()