Lines Matching refs:mm
155 struct mm_struct *mm = vma->vm_mm; in __replace_page() local
171 mmu_notifier_invalidate_range_start(mm, mmun_start, mmun_end); in __replace_page()
173 ptep = page_check_address(page, mm, addr, &ptl, 0); in __replace_page()
183 dec_mm_counter(mm, MM_FILEPAGES); in __replace_page()
184 inc_mm_counter(mm, MM_ANONPAGES); in __replace_page()
189 set_pte_at_notify(mm, addr, ptep, mk_pte(kpage, vma->vm_page_prot)); in __replace_page()
203 mmu_notifier_invalidate_range_end(mm, mmun_start, mmun_end); in __replace_page()
292 int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr, in uprobe_write_opcode() argument
301 ret = get_user_pages(NULL, mm, vaddr, 1, 0, 1, &old_page, &vma); in uprobe_write_opcode()
341 int __weak set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) in set_swbp() argument
343 return uprobe_write_opcode(mm, vaddr, UPROBE_SWBP_INSN); in set_swbp()
356 set_orig_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) in set_orig_insn() argument
358 return uprobe_write_opcode(mm, vaddr, *(uprobe_opcode_t *)&auprobe->insn); in set_orig_insn()
580 struct mm_struct *mm, unsigned long vaddr) in prepare_uprobe() argument
600 ret = arch_uprobe_analyze_insn(&uprobe->arch, mm, vaddr); in prepare_uprobe()
618 enum uprobe_filter_ctx ctx, struct mm_struct *mm) in consumer_filter() argument
620 return !uc->filter || uc->filter(uc, ctx, mm); in consumer_filter()
624 enum uprobe_filter_ctx ctx, struct mm_struct *mm) in filter_chain() argument
631 ret = consumer_filter(uc, ctx, mm); in filter_chain()
641 install_breakpoint(struct uprobe *uprobe, struct mm_struct *mm, in install_breakpoint() argument
647 ret = prepare_uprobe(uprobe, vma->vm_file, mm, vaddr); in install_breakpoint()
655 first_uprobe = !test_bit(MMF_HAS_UPROBES, &mm->flags); in install_breakpoint()
657 set_bit(MMF_HAS_UPROBES, &mm->flags); in install_breakpoint()
659 ret = set_swbp(&uprobe->arch, mm, vaddr); in install_breakpoint()
661 clear_bit(MMF_RECALC_UPROBES, &mm->flags); in install_breakpoint()
663 clear_bit(MMF_HAS_UPROBES, &mm->flags); in install_breakpoint()
669 remove_breakpoint(struct uprobe *uprobe, struct mm_struct *mm, unsigned long vaddr) in remove_breakpoint() argument
671 set_bit(MMF_RECALC_UPROBES, &mm->flags); in remove_breakpoint()
672 return set_orig_insn(&uprobe->arch, mm, vaddr); in remove_breakpoint()
699 struct mm_struct *mm; member
749 info->mm = vma->vm_mm; in build_map_info()
759 mmput(curr->mm); in build_map_info()
796 struct mm_struct *mm = info->mm; in register_for_each_vma() local
802 down_write(&mm->mmap_sem); in register_for_each_vma()
803 vma = find_vma(mm, info->vaddr); in register_for_each_vma()
815 UPROBE_FILTER_REGISTER, mm)) in register_for_each_vma()
816 err = install_breakpoint(uprobe, mm, vma, info->vaddr); in register_for_each_vma()
817 } else if (test_bit(MMF_HAS_UPROBES, &mm->flags)) { in register_for_each_vma()
819 UPROBE_FILTER_UNREGISTER, mm)) in register_for_each_vma()
820 err |= remove_breakpoint(uprobe, mm, info->vaddr); in register_for_each_vma()
824 up_write(&mm->mmap_sem); in register_for_each_vma()
826 mmput(mm); in register_for_each_vma()
960 static int unapply_uprobe(struct uprobe *uprobe, struct mm_struct *mm) in unapply_uprobe() argument
965 down_read(&mm->mmap_sem); in unapply_uprobe()
966 for (vma = mm->mmap; vma; vma = vma->vm_next) { in unapply_uprobe()
980 err |= remove_breakpoint(uprobe, mm, vaddr); in unapply_uprobe()
982 up_read(&mm->mmap_sem); in unapply_uprobe()
1127 static int xol_add_vma(struct mm_struct *mm, struct xol_area *area) in xol_add_vma() argument
1132 down_write(&mm->mmap_sem); in xol_add_vma()
1133 if (mm->uprobes_state.xol_area) { in xol_add_vma()
1148 vma = _install_special_mapping(mm, area->vaddr, PAGE_SIZE, in xol_add_vma()
1158 mm->uprobes_state.xol_area = area; in xol_add_vma()
1160 up_write(&mm->mmap_sem); in xol_add_vma()
1167 struct mm_struct *mm = current->mm; in __create_xol_area() local
1193 if (!xol_add_vma(mm, area)) in __create_xol_area()
1213 struct mm_struct *mm = current->mm; in get_xol_area() local
1216 if (!mm->uprobes_state.xol_area) in get_xol_area()
1219 area = mm->uprobes_state.xol_area; in get_xol_area()
1227 void uprobe_clear_state(struct mm_struct *mm) in uprobe_clear_state() argument
1229 struct xol_area *area = mm->uprobes_state.xol_area; in uprobe_clear_state()
1320 if (!tsk->mm || !tsk->mm->uprobes_state.xol_area || !tsk->utask) in xol_free_insn_slot()
1327 area = tsk->mm->uprobes_state.xol_area; in xol_free_insn_slot()
1480 struct mm_struct *mm = current->mm; in uprobe_copy_process() local
1488 if (mm == t->mm && !(flags & CLONE_VFORK)) in uprobe_copy_process()
1495 area = mm->uprobes_state.xol_area; in uprobe_copy_process()
1499 if (mm == t->mm) in uprobe_copy_process()
1518 area = current->mm->uprobes_state.xol_area; in get_trampoline_vaddr()
1668 static void mmf_recalc_uprobes(struct mm_struct *mm) in mmf_recalc_uprobes() argument
1672 for (vma = mm->mmap; vma; vma = vma->vm_next) { in mmf_recalc_uprobes()
1685 clear_bit(MMF_HAS_UPROBES, &mm->flags); in mmf_recalc_uprobes()
1688 static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr) in is_trap_at_addr() argument
1702 result = get_user_pages(NULL, mm, vaddr, 1, 0, 1, &page, NULL); in is_trap_at_addr()
1715 struct mm_struct *mm = current->mm; in find_active_uprobe() local
1719 down_read(&mm->mmap_sem); in find_active_uprobe()
1720 vma = find_vma(mm, bp_vaddr); in find_active_uprobe()
1730 *is_swbp = is_trap_at_addr(mm, bp_vaddr); in find_active_uprobe()
1735 if (!uprobe && test_and_clear_bit(MMF_RECALC_UPROBES, &mm->flags)) in find_active_uprobe()
1736 mmf_recalc_uprobes(mm); in find_active_uprobe()
1737 up_read(&mm->mmap_sem); in find_active_uprobe()
1769 unapply_uprobe(uprobe, current->mm); in handler_chain()
1980 if (!current->mm) in uprobe_pre_sstep_notifier()
1983 if (!test_bit(MMF_HAS_UPROBES, ¤t->mm->flags) && in uprobe_pre_sstep_notifier()
1999 if (!current->mm || !utask || !utask->active_uprobe) in uprobe_post_sstep_notifier()