Lines Matching refs:mm
163 struct mm_struct *mm = vma->vm_mm; in __replace_page() local
179 mmu_notifier_invalidate_range_start(mm, mmun_start, mmun_end); in __replace_page()
181 ptep = page_check_address(page, mm, addr, &ptl, 0); in __replace_page()
191 dec_mm_counter(mm, MM_FILEPAGES); in __replace_page()
192 inc_mm_counter(mm, MM_ANONPAGES); in __replace_page()
197 set_pte_at_notify(mm, addr, ptep, mk_pte(kpage, vma->vm_page_prot)); in __replace_page()
211 mmu_notifier_invalidate_range_end(mm, mmun_start, mmun_end); in __replace_page()
300 int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr, in uprobe_write_opcode() argument
309 ret = get_user_pages(NULL, mm, vaddr, 1, 0, 1, &old_page, &vma); in uprobe_write_opcode()
349 int __weak set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) in set_swbp() argument
351 return uprobe_write_opcode(mm, vaddr, UPROBE_SWBP_INSN); in set_swbp()
364 set_orig_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) in set_orig_insn() argument
366 return uprobe_write_opcode(mm, vaddr, *(uprobe_opcode_t *)&auprobe->insn); in set_orig_insn()
586 struct mm_struct *mm, unsigned long vaddr) in prepare_uprobe() argument
606 ret = arch_uprobe_analyze_insn(&uprobe->arch, mm, vaddr); in prepare_uprobe()
624 enum uprobe_filter_ctx ctx, struct mm_struct *mm) in consumer_filter() argument
626 return !uc->filter || uc->filter(uc, ctx, mm); in consumer_filter()
630 enum uprobe_filter_ctx ctx, struct mm_struct *mm) in filter_chain() argument
637 ret = consumer_filter(uc, ctx, mm); in filter_chain()
647 install_breakpoint(struct uprobe *uprobe, struct mm_struct *mm, in install_breakpoint() argument
653 ret = prepare_uprobe(uprobe, vma->vm_file, mm, vaddr); in install_breakpoint()
661 first_uprobe = !test_bit(MMF_HAS_UPROBES, &mm->flags); in install_breakpoint()
663 set_bit(MMF_HAS_UPROBES, &mm->flags); in install_breakpoint()
665 ret = set_swbp(&uprobe->arch, mm, vaddr); in install_breakpoint()
667 clear_bit(MMF_RECALC_UPROBES, &mm->flags); in install_breakpoint()
669 clear_bit(MMF_HAS_UPROBES, &mm->flags); in install_breakpoint()
675 remove_breakpoint(struct uprobe *uprobe, struct mm_struct *mm, unsigned long vaddr) in remove_breakpoint() argument
677 set_bit(MMF_RECALC_UPROBES, &mm->flags); in remove_breakpoint()
678 return set_orig_insn(&uprobe->arch, mm, vaddr); in remove_breakpoint()
705 struct mm_struct *mm; member
755 info->mm = vma->vm_mm; in build_map_info()
765 mmput(curr->mm); in build_map_info()
802 struct mm_struct *mm = info->mm; in register_for_each_vma() local
808 down_write(&mm->mmap_sem); in register_for_each_vma()
809 vma = find_vma(mm, info->vaddr); in register_for_each_vma()
821 UPROBE_FILTER_REGISTER, mm)) in register_for_each_vma()
822 err = install_breakpoint(uprobe, mm, vma, info->vaddr); in register_for_each_vma()
823 } else if (test_bit(MMF_HAS_UPROBES, &mm->flags)) { in register_for_each_vma()
825 UPROBE_FILTER_UNREGISTER, mm)) in register_for_each_vma()
826 err |= remove_breakpoint(uprobe, mm, info->vaddr); in register_for_each_vma()
830 up_write(&mm->mmap_sem); in register_for_each_vma()
832 mmput(mm); in register_for_each_vma()
966 static int unapply_uprobe(struct uprobe *uprobe, struct mm_struct *mm) in unapply_uprobe() argument
971 down_read(&mm->mmap_sem); in unapply_uprobe()
972 for (vma = mm->mmap; vma; vma = vma->vm_next) { in unapply_uprobe()
986 err |= remove_breakpoint(uprobe, mm, vaddr); in unapply_uprobe()
988 up_read(&mm->mmap_sem); in unapply_uprobe()
1133 static int xol_add_vma(struct mm_struct *mm, struct xol_area *area) in xol_add_vma() argument
1137 down_write(&mm->mmap_sem); in xol_add_vma()
1138 if (mm->uprobes_state.xol_area) in xol_add_vma()
1151 ret = install_special_mapping(mm, area->vaddr, PAGE_SIZE, in xol_add_vma()
1157 mm->uprobes_state.xol_area = area; in xol_add_vma()
1159 up_write(&mm->mmap_sem); in xol_add_vma()
1166 struct mm_struct *mm = current->mm; in __create_xol_area() local
1189 if (!xol_add_vma(mm, area)) in __create_xol_area()
1209 struct mm_struct *mm = current->mm; in get_xol_area() local
1212 if (!mm->uprobes_state.xol_area) in get_xol_area()
1215 area = mm->uprobes_state.xol_area; in get_xol_area()
1223 void uprobe_clear_state(struct mm_struct *mm) in uprobe_clear_state() argument
1225 struct xol_area *area = mm->uprobes_state.xol_area; in uprobe_clear_state()
1316 if (!tsk->mm || !tsk->mm->uprobes_state.xol_area || !tsk->utask) in xol_free_insn_slot()
1323 area = tsk->mm->uprobes_state.xol_area; in xol_free_insn_slot()
1472 struct mm_struct *mm = current->mm; in uprobe_copy_process() local
1480 if (mm == t->mm && !(flags & CLONE_VFORK)) in uprobe_copy_process()
1487 area = mm->uprobes_state.xol_area; in uprobe_copy_process()
1491 if (mm == t->mm) in uprobe_copy_process()
1510 area = current->mm->uprobes_state.xol_area; in get_trampoline_vaddr()
1649 static void mmf_recalc_uprobes(struct mm_struct *mm) in mmf_recalc_uprobes() argument
1653 for (vma = mm->mmap; vma; vma = vma->vm_next) { in mmf_recalc_uprobes()
1666 clear_bit(MMF_HAS_UPROBES, &mm->flags); in mmf_recalc_uprobes()
1669 static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr) in is_trap_at_addr() argument
1683 result = get_user_pages(NULL, mm, vaddr, 1, 0, 1, &page, NULL); in is_trap_at_addr()
1696 struct mm_struct *mm = current->mm; in find_active_uprobe() local
1700 down_read(&mm->mmap_sem); in find_active_uprobe()
1701 vma = find_vma(mm, bp_vaddr); in find_active_uprobe()
1711 *is_swbp = is_trap_at_addr(mm, bp_vaddr); in find_active_uprobe()
1716 if (!uprobe && test_and_clear_bit(MMF_RECALC_UPROBES, &mm->flags)) in find_active_uprobe()
1717 mmf_recalc_uprobes(mm); in find_active_uprobe()
1718 up_read(&mm->mmap_sem); in find_active_uprobe()
1750 unapply_uprobe(uprobe, current->mm); in handler_chain()
1948 if (!current->mm) in uprobe_pre_sstep_notifier()
1951 if (!test_bit(MMF_HAS_UPROBES, ¤t->mm->flags) && in uprobe_pre_sstep_notifier()
1967 if (!current->mm || !utask || !utask->active_uprobe) in uprobe_post_sstep_notifier()