Signed-off-by: Alexey Dobriyan <adobriyan@xxxxxxxxx> --- arch/powerpc/oprofile/cell/spu_task_sync.c | 28 ++++++++++++---------------- 1 files changed, 12 insertions(+), 16 deletions(-) diff --git a/arch/powerpc/oprofile/cell/spu_task_sync.c b/arch/powerpc/oprofile/cell/spu_task_sync.c index 6b793ae..fe17a0a 100644 --- a/arch/powerpc/oprofile/cell/spu_task_sync.c +++ b/arch/powerpc/oprofile/cell/spu_task_sync.c @@ -26,6 +26,7 @@ #include <linux/notifier.h> #include <linux/numa.h> #include <linux/oprofile.h> +#include <linux/path.h> #include <linux/spinlock.h> #include "pr_util.h" @@ -303,9 +304,8 @@ static inline unsigned long fast_get_dcookie(struct path *path) return cookie; } -/* Look up the dcookie for the task's first VM_EXECUTABLE mapping, - * which corresponds loosely to "application name". Also, determine - * the offset for the SPU ELF object. If computed offset is +/* + * Determine the offset for the SPU ELF object. If computed offset is * non-zero, it implies an embedded SPU object; otherwise, it's a * separate SPU binary, in which case we retrieve it's dcookie. * For the embedded case, we must determine if SPU ELF is embedded @@ -320,26 +320,22 @@ get_exec_dcookie_and_offset(struct spu *spu, unsigned int *offsetp, { unsigned long app_cookie = 0; unsigned int my_offset = 0; - struct file *app = NULL; struct vm_area_struct *vma; + struct task_struct *tsk = spu->tsk; struct mm_struct *mm = spu->mm; + struct path exec_path; if (!mm) goto out; - down_read(&mm->mmap_sem); - - for (vma = mm->mmap; vma; vma = vma->vm_next) { - if (!vma->vm_file) - continue; - if (!(vma->vm_flags & VM_EXECUTABLE)) - continue; - app_cookie = fast_get_dcookie(&vma->vm_file->f_path); - pr_debug("got dcookie for %s\n", - vma->vm_file->f_dentry->d_name.name); - app = vma->vm_file; - break; + get_task_exec_path(tsk, &exec_path); + if (exec_path.mnt && exec_path.dentry) { + app_cookie = fast_get_dcookie(&exec_path); + pr_debug("got dcookie for %s\n", exec_path.dentry->d_name.name); } + path_put(&exec_path); + + down_read(&mm->mmap_sem); for (vma = mm->mmap; vma; vma = vma->vm_next) { if (vma->vm_start > spu_ref || vma->vm_end <= spu_ref) -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html