mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-17 18:56:24 +00:00
perf machine: Search for modules in %s/lib/modules/%s
Modules installed outside of the kernel's build system should go into "%s/lib/modules/%s/extra", but at present, perf will only look at them when they are in "%s/lib/modules/%s/kernel". Lets encourage good citizenship by relaxing this requirement to "%s/lib/modules/%s". This way open source modules that are out-of-tree have no incentive to start populating a directory reserved for in-kernel modules and I can stop hex-editing my system's perf binary when profiling OSS out-of-tree modules. Feedback from Namhyung Kim correctly revealed that the hex-edits that I had been doing meant that perf was also traversing the build and source symlinks in %s/lib/modules/%s. That is undesireable, so we explicitly exclude them from traversal with a minor tweak to the traversal routine. Signed-off-by: Richard Yao <ryao@gentoo.org> Acked-by: Namhyung kim <namhyung@kernel.org> Link: http://lkml.kernel.org/r/1398532675-13684-1-git-send-email-ryao@gentoo.org Signed-off-by: Jiri Olsa <jolsa@kernel.org>
This commit is contained in:
parent
611ec12716
commit
61d4290cc1
@ -717,7 +717,7 @@ static char *get_kernel_version(const char *root_dir)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int map_groups__set_modules_path_dir(struct map_groups *mg,
|
static int map_groups__set_modules_path_dir(struct map_groups *mg,
|
||||||
const char *dir_name)
|
const char *dir_name, int depth)
|
||||||
{
|
{
|
||||||
struct dirent *dent;
|
struct dirent *dent;
|
||||||
DIR *dir = opendir(dir_name);
|
DIR *dir = opendir(dir_name);
|
||||||
@ -742,7 +742,15 @@ static int map_groups__set_modules_path_dir(struct map_groups *mg,
|
|||||||
!strcmp(dent->d_name, ".."))
|
!strcmp(dent->d_name, ".."))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ret = map_groups__set_modules_path_dir(mg, path);
|
/* Do not follow top-level source and build symlinks */
|
||||||
|
if (depth == 0) {
|
||||||
|
if (!strcmp(dent->d_name, "source") ||
|
||||||
|
!strcmp(dent->d_name, "build"))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = map_groups__set_modules_path_dir(mg, path,
|
||||||
|
depth + 1);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out;
|
goto out;
|
||||||
} else {
|
} else {
|
||||||
@ -786,11 +794,11 @@ static int machine__set_modules_path(struct machine *machine)
|
|||||||
if (!version)
|
if (!version)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
snprintf(modules_path, sizeof(modules_path), "%s/lib/modules/%s/kernel",
|
snprintf(modules_path, sizeof(modules_path), "%s/lib/modules/%s",
|
||||||
machine->root_dir, version);
|
machine->root_dir, version);
|
||||||
free(version);
|
free(version);
|
||||||
|
|
||||||
return map_groups__set_modules_path_dir(&machine->kmaps, modules_path);
|
return map_groups__set_modules_path_dir(&machine->kmaps, modules_path, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int machine__create_module(void *arg, const char *name, u64 start)
|
static int machine__create_module(void *arg, const char *name, u64 start)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user