Symbol: rseq
fs/binfmt_elf.c
289
NEW_AUX_ENT(AT_RSEQ_FEATURE_SIZE, offsetof(struct rseq, end));
include/linux/futex.h
130
if (!current->rseq.event.user_irq)
include/linux/rseq.h
102
if (current->rseq.event.has_rseq) {
include/linux/rseq.h
103
current->rseq.event.ids_changed = true;
include/linux/rseq.h
104
current->rseq.event.sched_switch = true;
include/linux/rseq.h
128
current->rseq.event.sched_switch)
include/linux/rseq.h
136
memset(&t->rseq, 0, sizeof(t->rseq));
include/linux/rseq.h
137
t->rseq.ids.cpu_id = RSEQ_CPU_ID_UNINITIALIZED;
include/linux/rseq.h
14
return IS_ENABLED(CONFIG_GENERIC_IRQ_ENTRY) && likely(t->rseq.event.has_rseq > 1);
include/linux/rseq.h
160
t->rseq = current->rseq;
include/linux/rseq.h
172
return 1U << get_count_order(offsetof(struct rseq, end));
include/linux/rseq.h
21
if (current->rseq.event.slowpath)
include/linux/rseq.h
24
if (current->rseq.event.sched_switch && current->rseq.event.has_rseq)
include/linux/rseq.h
39
if (current->rseq.event.user_irq)
include/linux/rseq.h
42
if (current->rseq.event.has_rseq)
include/linux/rseq.h
55
struct rseq_event *ev = &t->rseq.event;
include/linux/rseq.h
80
t->rseq.event.ids_changed = true;
include/linux/rseq.h
81
t->rseq.event.sched_switch = true;
include/linux/rseq.h
96
t->rseq.event.ids_changed = true;
include/linux/rseq_entry.h
101
if (likely(!current->rseq.slice.state.granted))
include/linux/rseq_entry.h
109
if (IS_ENABLED(CONFIG_RSEQ_STATS) && t->rseq.slice.state.granted)
include/linux/rseq_entry.h
111
t->rseq.slice.state.granted = false;
include/linux/rseq_entry.h
122
#define rseq_slice_clear_user(rseq, efault) \
include/linux/rseq_entry.h
125
unsafe_put_user(0U, &rseq->slice_ctrl.all, efault); \
include/linux/rseq_entry.h
133
struct rseq __user *rseq;
include/linux/rseq_entry.h
139
state = curr->rseq.slice.state;
include/linux/rseq_entry.h
140
state.enabled &= curr->rseq.event.user_irq;
include/linux/rseq_entry.h
144
rseq = curr->rseq.usrptr;
include/linux/rseq_entry.h
145
scoped_user_rw_access(rseq, efault) {
include/linux/rseq_entry.h
159
unsafe_put_user(0U, &rseq->slice_ctrl.all, efault);
include/linux/rseq_entry.h
164
unsafe_get_user(usr_ctrl.all, &rseq->slice_ctrl.all, efault);
include/linux/rseq_entry.h
171
unsafe_put_user(usr_ctrl.all, &rseq->slice_ctrl.all, efault);
include/linux/rseq_entry.h
176
curr->rseq.slice.state.granted = true;
include/linux/rseq_entry.h
178
curr->rseq.slice.expires = data_race(rseq_slice_ext_nsecs) + ktime_get_mono_fast_ns();
include/linux/rseq_entry.h
247
#define rseq_slice_clear_user(rseq, efault) do { } while (0)
include/linux/rseq_entry.h
255
current->rseq.event.user_irq = true;
include/linux/rseq_entry.h
342
if (unlikely(usig != t->rseq.sig))
include/linux/rseq_entry.h
348
if (unlikely(!t->rseq.event.user_irq))
include/linux/rseq_entry.h
351
unsafe_put_user(0ULL, &t->rseq.usrptr->rseq_cs, efault);
include/linux/rseq_entry.h
356
unsafe_put_user(0ULL, &t->rseq.usrptr->rseq_cs, efault);
include/linux/rseq_entry.h
365
t->rseq.event.fatal = true;
include/linux/rseq_entry.h
390
t->rseq.event.fatal = true;
include/linux/rseq_entry.h
432
if (unlikely(usig != t->rseq.sig))
include/linux/rseq_entry.h
436
unsafe_put_user(0ULL, &t->rseq.usrptr->rseq_cs, efault);
include/linux/rseq_entry.h
442
unsafe_put_user(0ULL, &t->rseq.usrptr->rseq_cs, efault);
include/linux/rseq_entry.h
451
t->rseq.event.fatal = true;
include/linux/rseq_entry.h
481
struct rseq __user *rseq = t->rseq.usrptr;
include/linux/rseq_entry.h
483
scoped_user_rw_access(rseq, efault) {
include/linux/rseq_entry.h
488
unsafe_get_user(cpu_id, &rseq->cpu_id_start, efault);
include/linux/rseq_entry.h
489
if (cpu_id != t->rseq.ids.cpu_id)
include/linux/rseq_entry.h
491
unsafe_get_user(uval, &rseq->cpu_id, efault);
include/linux/rseq_entry.h
494
unsafe_get_user(uval, &rseq->node_id, efault);
include/linux/rseq_entry.h
495
if (uval != t->rseq.ids.node_id)
include/linux/rseq_entry.h
497
unsafe_get_user(uval, &rseq->mm_cid, efault);
include/linux/rseq_entry.h
498
if (uval != t->rseq.ids.mm_cid)
include/linux/rseq_entry.h
502
unsafe_put_user(ids->cpu_id, &rseq->cpu_id_start, efault);
include/linux/rseq_entry.h
503
unsafe_put_user(ids->cpu_id, &rseq->cpu_id, efault);
include/linux/rseq_entry.h
504
unsafe_put_user(ids->node_id, &rseq->node_id, efault);
include/linux/rseq_entry.h
505
unsafe_put_user(ids->mm_cid, &rseq->mm_cid, efault);
include/linux/rseq_entry.h
507
unsafe_get_user(*csaddr, &rseq->rseq_cs, efault);
include/linux/rseq_entry.h
511
rseq_slice_clear_user(rseq, efault);
include/linux/rseq_entry.h
516
t->rseq.ids = *ids;
include/linux/rseq_entry.h
522
t->rseq.event.fatal = true;
include/linux/rseq_entry.h
546
if (likely(!t->rseq.event.user_irq))
include/linux/rseq_entry.h
613
if (likely(!t->rseq.event.ids_changed)) {
include/linux/rseq_entry.h
614
struct rseq __user *rseq = t->rseq.usrptr;
include/linux/rseq_entry.h
621
scoped_user_rw_access(rseq, efault) {
include/linux/rseq_entry.h
622
unsafe_get_user(csaddr, &rseq->rseq_cs, efault);
include/linux/rseq_entry.h
626
rseq_slice_clear_user(rseq, efault);
include/linux/rseq_entry.h
671
if (unlikely((t->rseq.event.sched_switch))) {
include/linux/rseq_entry.h
678
t->rseq.event.events = 0;
include/linux/rseq_entry.h
704
current->rseq.event.slowpath = true;
include/linux/rseq_entry.h
726
struct rseq_event *ev = &current->rseq.event;
include/linux/rseq_entry.h
739
struct rseq_event *ev = &current->rseq.event;
include/linux/rseq_types.h
10
struct rseq;
include/linux/rseq_types.h
120
struct rseq __user *usrptr;
include/linux/sched.h
1429
struct rseq_data rseq;
include/linux/syscalls.h
66
struct rseq;
include/linux/syscalls.h
966
asmlinkage long sys_rseq(struct rseq __user *rseq, uint32_t rseq_len,
include/trace/events/rseq.h
24
__entry->cpu_id = t->rseq.ids.cpu_id;
include/trace/events/rseq.h
26
__entry->mm_cid = t->rseq.ids.mm_cid;
include/trace/events/rseq.h
3
#define TRACE_SYSTEM rseq
kernel/ptrace.c
822
.rseq_abi_pointer = (u64)(uintptr_t)task->rseq.usrptr,
kernel/ptrace.c
823
.rseq_abi_size = task->rseq.len,
kernel/ptrace.c
824
.signature = task->rseq.sig,
kernel/rseq.c
241
struct rseq __user *urseq = t->rseq.usrptr;
kernel/rseq.c
292
event = t->rseq.event.sched_switch;
kernel/rseq.c
293
t->rseq.event.all &= evt_mask.all;
kernel/rseq.c
308
t->rseq.event.error = 0;
kernel/rseq.c
347
current->rseq.event.error = 0;
kernel/rseq.c
368
if (!t->rseq.event.has_rseq)
kernel/rseq.c
370
if (get_user(csaddr, &t->rseq.usrptr->rseq_cs))
kernel/rseq.c
392
struct rseq __user *rseq = current->rseq.usrptr;
kernel/rseq.c
399
scoped_user_rw_access(rseq, efault) {
kernel/rseq.c
400
unsafe_put_user(0, &rseq->cpu_id_start, efault);
kernel/rseq.c
401
unsafe_put_user(RSEQ_CPU_ID_UNINITIALIZED, &rseq->cpu_id, efault);
kernel/rseq.c
402
unsafe_put_user(0, &rseq->node_id, efault);
kernel/rseq.c
403
unsafe_put_user(0, &rseq->mm_cid, efault);
kernel/rseq.c
415
static long rseq_register(struct rseq __user * rseq, u32 rseq_len, int flags, u32 sig)
kernel/rseq.c
420
if (!access_ok(rseq, rseq_len))
kernel/rseq.c
440
scoped_user_write_access(rseq, efault) {
kernel/rseq.c
448
unsafe_put_user(0UL, &rseq->rseq_cs, efault);
kernel/rseq.c
449
unsafe_put_user(rseqfl, &rseq->flags, efault);
kernel/rseq.c
451
unsafe_put_user(RSEQ_CPU_ID_UNINITIALIZED, &rseq->cpu_id_start, efault);
kernel/rseq.c
452
unsafe_put_user(RSEQ_CPU_ID_UNINITIALIZED, &rseq->cpu_id, efault);
kernel/rseq.c
453
unsafe_put_user(0U, &rseq->node_id, efault);
kernel/rseq.c
454
unsafe_put_user(0U, &rseq->mm_cid, efault);
kernel/rseq.c
462
unsafe_put_user(0U, &rseq->slice_ctrl.all, efault);
kernel/rseq.c
470
current->rseq.usrptr = rseq;
kernel/rseq.c
471
current->rseq.len = rseq_len;
kernel/rseq.c
472
current->rseq.sig = sig;
kernel/rseq.c
475
current->rseq.slice.state.enabled = !!(rseqfl & RSEQ_CS_FLAG_SLICE_EXT_ENABLED);
kernel/rseq.c
482
current->rseq.event.has_rseq = version;
kernel/rseq.c
490
static long rseq_unregister(struct rseq __user * rseq, u32 rseq_len, int flags, u32 sig)
kernel/rseq.c
494
if (current->rseq.usrptr != rseq || !current->rseq.usrptr)
kernel/rseq.c
496
if (rseq_len != current->rseq.len)
kernel/rseq.c
498
if (current->rseq.sig != sig)
kernel/rseq.c
506
static long rseq_reregister(struct rseq __user * rseq, u32 rseq_len, u32 sig)
kernel/rseq.c
512
if (current->rseq.usrptr != rseq || rseq_len != current->rseq.len)
kernel/rseq.c
514
if (current->rseq.sig != sig)
kernel/rseq.c
520
static bool rseq_length_valid(struct rseq __user *rseq, unsigned int rseq_len)
kernel/rseq.c
536
return IS_ALIGNED((unsigned long)rseq, ORIG_RSEQ_SIZE);
kernel/rseq.c
538
return IS_ALIGNED((unsigned long)rseq, rseq_alloc_align()) &&
kernel/rseq.c
539
rseq_len >= offsetof(struct rseq, end);
kernel/rseq.c
547
SYSCALL_DEFINE4(rseq, struct rseq __user *, rseq, u32, rseq_len, int, flags, u32, sig)
kernel/rseq.c
550
return rseq_unregister(rseq, rseq_len, flags, sig);
kernel/rseq.c
555
if (current->rseq.usrptr)
kernel/rseq.c
556
return rseq_reregister(rseq, rseq_len, sig);
kernel/rseq.c
558
if (!rseq_length_valid(rseq, rseq_len))
kernel/rseq.c
561
return rseq_register(rseq, rseq_len, flags, sig);
kernel/rseq.c
593
if (st->cookie == current && current->rseq.slice.state.granted) {
kernel/rseq.c
614
if ((unlikely(curr->rseq.slice.expires < ktime_get_mono_fast_ns()))) {
kernel/rseq.c
625
hrtimer_start(&st->timer, curr->rseq.slice.expires, HRTIMER_MODE_ABS_PINNED_HARD);
kernel/rseq.c
678
u32 __user *sctrl = &current->rseq.usrptr->slice_ctrl.all;
kernel/rseq.c
698
struct rseq_slice_ctrl ctrl = { .granted = curr->rseq.slice.state.granted };
kernel/rseq.c
725
if (!curr->rseq.event.sched_switch) {
kernel/rseq.c
731
curr->rseq.slice.yielded = 1;
kernel/rseq.c
741
curr->rseq.slice.state.granted = false;
kernel/rseq.c
742
if (put_user(0U, &curr->rseq.usrptr->slice_ctrl.all))
kernel/rseq.c
752
return current->rseq.slice.state.enabled ? PR_RSEQ_SLICE_EXT_ENABLE : 0;
kernel/rseq.c
762
if (!current->rseq.usrptr)
kernel/rseq.c
768
if (enable == !!current->rseq.slice.state.enabled)
kernel/rseq.c
771
if (get_user(rflags, &current->rseq.usrptr->flags))
kernel/rseq.c
774
if (current->rseq.slice.state.enabled)
kernel/rseq.c
785
if (put_user(rflags, &current->rseq.usrptr->flags))
kernel/rseq.c
788
current->rseq.slice.state.enabled = enable;
kernel/rseq.c
814
int yielded = !!current->rseq.slice.yielded;
kernel/rseq.c
816
current->rseq.slice.yielded = 0;
kernel/sys_ni.c
392
COND_SYSCALL(rseq);
tools/testing/selftests/membarrier/membarrier_rseq_stress.c
187
static int rseq_register_thread_at(struct rseq_abi *rseq)
tools/testing/selftests/membarrier/membarrier_rseq_stress.c
189
int r = syscall(SYS_rseq, rseq, sizeof(*rseq), 0, RSEQ_SIG);