Lines Matching defs:area
101 * Execute out of line area: anonymous executable mapping installed
484 * @vma: the probed virtual memory area.
608 * @vma: the probed virtual memory area.
622 * @vma: the probed virtual memory area.
1682 struct xol_area *area = vma->vm_mm->uprobes_state.xol_area;
1684 vmf->page = area->page;
1707 static int xol_add_vma(struct mm_struct *mm, struct xol_area *area)
1720 if (!area->vaddr) {
1721 area->vaddr = arch_uprobe_get_xol_area();
1722 if (IS_ERR_VALUE(area->vaddr)) {
1723 ret = area->vaddr;
1728 vma = _install_special_mapping(mm, area->vaddr, PAGE_SIZE,
1739 smp_store_release(&mm->uprobes_state.xol_area, area); /* ^^^ */
1758 struct xol_area *area;
1761 area = kzalloc_obj(*area);
1762 if (unlikely(!area))
1765 area->bitmap = kcalloc(BITS_TO_LONGS(UINSNS_PER_PAGE), sizeof(long),
1767 if (!area->bitmap)
1770 area->page = alloc_page(GFP_HIGHUSER | __GFP_ZERO);
1771 if (!area->page)
1774 area->vaddr = vaddr;
1775 init_waitqueue_head(&area->wq);
1777 set_bit(0, area->bitmap);
1779 arch_uprobe_copy_ixol(area->page, 0, insns, insns_size);
1781 if (!xol_add_vma(mm, area))
1782 return area;
1784 __free_page(area->page);
1786 kfree(area->bitmap);
1788 kfree(area);
1795 * This area will be used for storing instructions for execution out of line.
1797 * Returns the allocated area or NULL.
1802 struct xol_area *area;
1808 area = READ_ONCE(mm->uprobes_state.xol_area); /* ^^^ */
1809 return area;
1813 * uprobe_clear_state - Free the area allocated for slots.
1817 struct xol_area *area = mm->uprobes_state.xol_area;
1823 if (!area)
1826 put_page(area->page);
1827 kfree(area->bitmap);
1828 kfree(area);
1850 static unsigned long xol_get_slot_nr(struct xol_area *area)
1854 slot_nr = find_first_zero_bit(area->bitmap, UINSNS_PER_PAGE);
1856 if (!test_and_set_bit(slot_nr, area->bitmap))
1868 struct xol_area *area = get_xol_area();
1871 if (!area)
1874 wait_event(area->wq, (slot_nr = xol_get_slot_nr(area)) < UINSNS_PER_PAGE);
1876 utask->xol_vaddr = area->vaddr + slot_nr * UPROBE_XOL_SLOT_BYTES;
1877 arch_uprobe_copy_ixol(area->page, utask->xol_vaddr,
1887 struct xol_area *area = current->mm->uprobes_state.xol_area;
1888 unsigned long offset = utask->xol_vaddr - area->vaddr;
1892 /* xol_vaddr must fit into [area->vaddr, area->vaddr + PAGE_SIZE) */
1897 clear_bit(slot_nr, area->bitmap);
1899 if (waitqueue_active(&area->wq))
1900 wake_up(&area->wq);
2174 uprobe_warn(current, "dup xol area");
2184 struct xol_area *area;
2198 area = mm->uprobes_state.xol_area;
2199 if (!area)
2200 return uprobe_warn(t, "dup xol area");
2205 t->utask->dup_xol_addr = area->vaddr;
2211 * Current area->vaddr notion assume the trampoline address is always
2212 * equal area->vaddr.
2219 struct xol_area *area;
2222 area = READ_ONCE(current->mm->uprobes_state.xol_area); /* ^^^ */
2223 if (area)
2224 trampoline_vaddr = area->vaddr;