diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/oprofile/cell/spu_task_sync.c | 15 | ||||
-rw-r--r-- | arch/tile/mm/elf.c | 19 |
2 files changed, 11 insertions, 23 deletions
diff --git a/arch/powerpc/oprofile/cell/spu_task_sync.c b/arch/powerpc/oprofile/cell/spu_task_sync.c index 642fca137ccb..28f1af2db1f5 100644 --- a/arch/powerpc/oprofile/cell/spu_task_sync.c +++ b/arch/powerpc/oprofile/cell/spu_task_sync.c | |||
@@ -304,7 +304,7 @@ static inline unsigned long fast_get_dcookie(struct path *path) | |||
304 | return cookie; | 304 | return cookie; |
305 | } | 305 | } |
306 | 306 | ||
307 | /* Look up the dcookie for the task's first VM_EXECUTABLE mapping, | 307 | /* Look up the dcookie for the task's mm->exe_file, |
308 | * which corresponds loosely to "application name". Also, determine | 308 | * which corresponds loosely to "application name". Also, determine |
309 | * the offset for the SPU ELF object. If computed offset is | 309 | * the offset for the SPU ELF object. If computed offset is |
310 | * non-zero, it implies an embedded SPU object; otherwise, it's a | 310 | * non-zero, it implies an embedded SPU object; otherwise, it's a |
@@ -321,7 +321,6 @@ get_exec_dcookie_and_offset(struct spu *spu, unsigned int *offsetp, | |||
321 | { | 321 | { |
322 | unsigned long app_cookie = 0; | 322 | unsigned long app_cookie = 0; |
323 | unsigned int my_offset = 0; | 323 | unsigned int my_offset = 0; |
324 | struct file *app = NULL; | ||
325 | struct vm_area_struct *vma; | 324 | struct vm_area_struct *vma; |
326 | struct mm_struct *mm = spu->mm; | 325 | struct mm_struct *mm = spu->mm; |
327 | 326 | ||
@@ -330,16 +329,10 @@ get_exec_dcookie_and_offset(struct spu *spu, unsigned int *offsetp, | |||
330 | 329 | ||
331 | down_read(&mm->mmap_sem); | 330 | down_read(&mm->mmap_sem); |
332 | 331 | ||
333 | for (vma = mm->mmap; vma; vma = vma->vm_next) { | 332 | if (mm->exe_file) { |
334 | if (!vma->vm_file) | 333 | app_cookie = fast_get_dcookie(&mm->exe_file->f_path); |
335 | continue; | ||
336 | if (!(vma->vm_flags & VM_EXECUTABLE)) | ||
337 | continue; | ||
338 | app_cookie = fast_get_dcookie(&vma->vm_file->f_path); | ||
339 | pr_debug("got dcookie for %s\n", | 334 | pr_debug("got dcookie for %s\n", |
340 | vma->vm_file->f_dentry->d_name.name); | 335 | mm->exe_file->f_dentry->d_name.name); |
341 | app = vma->vm_file; | ||
342 | break; | ||
343 | } | 336 | } |
344 | 337 | ||
345 | for (vma = mm->mmap; vma; vma = vma->vm_next) { | 338 | for (vma = mm->mmap; vma; vma = vma->vm_next) { |
diff --git a/arch/tile/mm/elf.c b/arch/tile/mm/elf.c index 758b6038c2b7..3cfa98bf9125 100644 --- a/arch/tile/mm/elf.c +++ b/arch/tile/mm/elf.c | |||
@@ -36,19 +36,14 @@ static void sim_notify_exec(const char *binary_name) | |||
36 | } while (c); | 36 | } while (c); |
37 | } | 37 | } |
38 | 38 | ||
39 | static int notify_exec(void) | 39 | static int notify_exec(struct mm_struct *mm) |
40 | { | 40 | { |
41 | int retval = 0; /* failure */ | 41 | int retval = 0; /* failure */ |
42 | struct vm_area_struct *vma = current->mm->mmap; | 42 | |
43 | while (vma) { | 43 | if (mm->exe_file) { |
44 | if ((vma->vm_flags & VM_EXECUTABLE) && vma->vm_file) | ||
45 | break; | ||
46 | vma = vma->vm_next; | ||
47 | } | ||
48 | if (vma) { | ||
49 | char *buf = (char *) __get_free_page(GFP_KERNEL); | 44 | char *buf = (char *) __get_free_page(GFP_KERNEL); |
50 | if (buf) { | 45 | if (buf) { |
51 | char *path = d_path(&vma->vm_file->f_path, | 46 | char *path = d_path(&mm->exe_file->f_path, |
52 | buf, PAGE_SIZE); | 47 | buf, PAGE_SIZE); |
53 | if (!IS_ERR(path)) { | 48 | if (!IS_ERR(path)) { |
54 | sim_notify_exec(path); | 49 | sim_notify_exec(path); |
@@ -106,16 +101,16 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, | |||
106 | unsigned long vdso_base; | 101 | unsigned long vdso_base; |
107 | int retval = 0; | 102 | int retval = 0; |
108 | 103 | ||
104 | down_write(&mm->mmap_sem); | ||
105 | |||
109 | /* | 106 | /* |
110 | * Notify the simulator that an exec just occurred. | 107 | * Notify the simulator that an exec just occurred. |
111 | * If we can't find the filename of the mapping, just use | 108 | * If we can't find the filename of the mapping, just use |
112 | * whatever was passed as the linux_binprm filename. | 109 | * whatever was passed as the linux_binprm filename. |
113 | */ | 110 | */ |
114 | if (!notify_exec()) | 111 | if (!notify_exec(mm)) |
115 | sim_notify_exec(bprm->filename); | 112 | sim_notify_exec(bprm->filename); |
116 | 113 | ||
117 | down_write(&mm->mmap_sem); | ||
118 | |||
119 | /* | 114 | /* |
120 | * MAYWRITE to allow gdb to COW and set breakpoints | 115 | * MAYWRITE to allow gdb to COW and set breakpoints |
121 | */ | 116 | */ |