diff options
Diffstat (limited to 'mm/memory.c')
-rw-r--r-- | mm/memory.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/mm/memory.c b/mm/memory.c index 673ebbf499c7..d902d0e25edc 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
@@ -2754,3 +2754,34 @@ int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, in | |||
2754 | 2754 | ||
2755 | return buf - old_buf; | 2755 | return buf - old_buf; |
2756 | } | 2756 | } |
2757 | |||
2758 | /* | ||
2759 | * Print the name of a VMA. | ||
2760 | */ | ||
2761 | void print_vma_addr(char *prefix, unsigned long ip) | ||
2762 | { | ||
2763 | struct mm_struct *mm = current->mm; | ||
2764 | struct vm_area_struct *vma; | ||
2765 | |||
2766 | down_read(&mm->mmap_sem); | ||
2767 | vma = find_vma(mm, ip); | ||
2768 | if (vma && vma->vm_file) { | ||
2769 | struct file *f = vma->vm_file; | ||
2770 | char *buf = (char *)__get_free_page(GFP_KERNEL); | ||
2771 | if (buf) { | ||
2772 | char *p, *s; | ||
2773 | |||
2774 | p = d_path(f->f_dentry, f->f_vfsmnt, buf, PAGE_SIZE); | ||
2775 | if (IS_ERR(p)) | ||
2776 | p = "?"; | ||
2777 | s = strrchr(p, '/'); | ||
2778 | if (s) | ||
2779 | p = s+1; | ||
2780 | printk("%s%s[%lx+%lx]", prefix, p, | ||
2781 | vma->vm_start, | ||
2782 | vma->vm_end - vma->vm_start); | ||
2783 | free_page((unsigned long)buf); | ||
2784 | } | ||
2785 | } | ||
2786 | up_read(¤t->mm->mmap_sem); | ||
2787 | } | ||