xol_area
struct xol_area;
struct xol_area *xol_area;
struct xol_area *area = vma->vm_mm->uprobes_state.xol_area;
static int xol_add_vma(struct mm_struct *mm, struct xol_area *area)
if (mm->uprobes_state.xol_area) {
smp_store_release(&mm->uprobes_state.xol_area, area); /* ^^^ */
static struct xol_area *__create_xol_area(unsigned long vaddr)
struct xol_area *area;
static struct xol_area *get_xol_area(void)
struct xol_area *area;
if (!mm->uprobes_state.xol_area)
area = READ_ONCE(mm->uprobes_state.xol_area); /* ^^^ */
struct xol_area *area = mm->uprobes_state.xol_area;
static unsigned long xol_get_slot_nr(struct xol_area *area)
struct xol_area *area = get_xol_area();
struct xol_area *area = current->mm->uprobes_state.xol_area;
struct xol_area *area;
area = mm->uprobes_state.xol_area;
struct xol_area *area;
area = READ_ONCE(current->mm->uprobes_state.xol_area); /* ^^^ */
mm->uprobes_state.xol_area = NULL;