mm_id
struct mm_id id;
int syscall_stub_flush(struct mm_id *mm_idp);
struct stub_syscall *syscall_stub_alloc(struct mm_id *mm_idp);
void syscall_stub_dump_error(struct mm_id *mm_idp);
int map(struct mm_id *mm_idp, unsigned long virt,
int unmap(struct mm_id *mm_idp, unsigned long addr, unsigned long len);
extern int start_userspace(struct mm_id *mm_id);
struct mutex *__get_turnstile(struct mm_id *mm_id);
void enter_turnstile(struct mm_id *mm_id) __acquires(__get_turnstile(mm_id));
void exit_turnstile(struct mm_id *mm_id) __releases(__get_turnstile(mm_id));
extern struct mm_id *current_mm_id(void);
struct mutex *__get_turnstile(struct mm_id *mm_id)
struct mm_context *ctx = container_of(mm_id, struct mm_context, id);
void enter_turnstile(struct mm_id *mm_id)
mutex_lock(__get_turnstile(mm_id));
void exit_turnstile(struct mm_id *mm_id)
mutex_unlock(__get_turnstile(mm_id));
struct mm_id *new_id = &mm->context.id;
struct mm_id *current_mm_id(void)
struct mm_id *mm_idp;
int (*mmap)(struct mm_id *mm_idp,
int (*unmap)(struct mm_id *mm_idp,
static int kern_map(struct mm_id *mm_idp,
static int kern_unmap(struct mm_id *mm_idp,
void wait_stub_done_seccomp(struct mm_id *mm_idp, int running, int wait_sigsys);
int syscall_stub_flush(struct mm_id *mm_idp)
struct stub_syscall *syscall_stub_alloc(struct mm_id *mm_idp)
static struct stub_syscall *syscall_stub_get_previous(struct mm_id *mm_idp,
static int get_stub_fd(struct mm_id *mm_idp, int fd)
int map(struct mm_id *mm_idp, unsigned long virt, unsigned long len, int prot,
void syscall_stub_dump_error(struct mm_id *mm_idp)
int unmap(struct mm_id *mm_idp, unsigned long addr, unsigned long len)
static inline unsigned long *check_init_stack(struct mm_id * mm_idp,
static inline long do_syscall_stub(struct mm_id *mm_idp)
void wait_stub_done_seccomp(struct mm_id *mm_idp, int running, int wait_sigsys)
int start_userspace(struct mm_id *mm_id)
struct stub_data *proc_data = (void *)mm_id->stack;
mm_id->pid = clone(userspace_tramp, (void *) sp,
if (mm_id->pid < 0) {
wait_stub_done_seccomp(mm_id, 1, 1);
CATCH_EINTR(n = waitpid(mm_id->pid, &status,
if (ptrace(PTRACE_SETOPTIONS, mm_id->pid, NULL,
mm_id->sock = tramp_data.sockpair[1];
os_kill_ptraced_process(mm_id->pid, 1);
mm_id->pid = -1;
struct mm_id *mm_id = current_mm_id();
enter_turnstile(mm_id);
struct stub_data *proc_data = (void *) mm_id->stack;
proc_data->syscall_data_len = mm_id->syscall_data_len;
wait_stub_done_seccomp(mm_id, 0, 0);
syscall_stub_dump_error(mm_id);
mm_id->syscall_data_len = proc_data->err;
mm_id->syscall_data_len = 0;
mm_id->syscall_fd_num = 0;
int pid = mm_id->pid;
err = syscall_stub_flush(mm_id);
exit_turnstile(mm_id);
mm_id_t mm_id;
int diff, mm_id_t mm_id)
VM_WARN_ON_ONCE(mm_id < MM_ID_MIN || mm_id > MM_ID_MAX);
__folio_large_mapcount_sanity_checks(folio, mapcount, vma->vm_mm->mm_id);
folio_set_mm_id(folio, 0, vma->vm_mm->mm_id);
const mm_id_t mm_id = vma->vm_mm->mm_id;
__folio_large_mapcount_sanity_checks(folio, diff, mm_id);
if (folio_mm_id(folio, 0) == mm_id) {
} else if (folio_mm_id(folio, 1) == mm_id) {
folio_set_mm_id(folio, 0, mm_id);
folio_set_mm_id(folio, 1, mm_id);
const mm_id_t mm_id = vma->vm_mm->mm_id;
__folio_large_mapcount_sanity_checks(folio, diff, mm_id);
if (folio_mm_id(folio, 0) == mm_id) {
} else if (folio_mm_id(folio, 1) == mm_id) {
__field(unsigned int, mm_id)
__entry->mm_id = mm_ptr_to_hash(mm);
__entry->mm_id,
mm->mm_id = ret;
const mm_id_t id = mm->mm_id;
mm->mm_id = MM_ID_DUMMY;
VM_WARN_ON_ONCE(folio_mm_id(folio, 0) != vma->vm_mm->mm_id &&
folio_mm_id(folio, 1) != vma->vm_mm->mm_id);