perf tools: Add machine__module_dso function
Separate the dso object addition and update when adding new kernel module. Currently we update dso's symtab_type any time we find it in the list, because we can't distinguish between new and found dso from __dsos__findnew function. Adding machine__module_dso that separates finding and adding new dso objects, so there's no superfluous update of dso. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Acked-by: Namhyung Kim <namhyung@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-uvqgs5tyq4wssnq6fm43hgvk@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
701d8d7f86
commit
da17ea33e5
@ -460,12 +460,35 @@ int machine__process_lost_event(struct machine *machine __maybe_unused,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct dso *machine__module_dso(struct machine *machine, const char *filename)
|
||||||
|
{
|
||||||
|
struct dso *dso;
|
||||||
|
bool compressed;
|
||||||
|
|
||||||
|
dso = dsos__find(&machine->kernel_dsos, filename, false);
|
||||||
|
if (!dso) {
|
||||||
|
dso = dsos__addnew(&machine->kernel_dsos, filename);
|
||||||
|
if (dso == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (machine__is_host(machine))
|
||||||
|
dso->symtab_type = DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE;
|
||||||
|
else
|
||||||
|
dso->symtab_type = DSO_BINARY_TYPE__GUEST_KMODULE;
|
||||||
|
|
||||||
|
/* _KMODULE_COMP should be next to _KMODULE */
|
||||||
|
if (is_kernel_module(filename, &compressed) && compressed)
|
||||||
|
dso->symtab_type++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dso;
|
||||||
|
}
|
||||||
|
|
||||||
struct map *machine__new_module(struct machine *machine, u64 start,
|
struct map *machine__new_module(struct machine *machine, u64 start,
|
||||||
const char *filename)
|
const char *filename)
|
||||||
{
|
{
|
||||||
struct map *map;
|
struct map *map;
|
||||||
struct dso *dso = __dsos__findnew(&machine->kernel_dsos, filename);
|
struct dso *dso = machine__module_dso(machine, filename);
|
||||||
bool compressed;
|
|
||||||
|
|
||||||
if (dso == NULL)
|
if (dso == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -474,15 +497,6 @@ struct map *machine__new_module(struct machine *machine, u64 start,
|
|||||||
if (map == NULL)
|
if (map == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (machine__is_host(machine))
|
|
||||||
dso->symtab_type = DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE;
|
|
||||||
else
|
|
||||||
dso->symtab_type = DSO_BINARY_TYPE__GUEST_KMODULE;
|
|
||||||
|
|
||||||
/* _KMODULE_COMP should be next to _KMODULE */
|
|
||||||
if (is_kernel_module(filename, &compressed) && compressed)
|
|
||||||
dso->symtab_type++;
|
|
||||||
|
|
||||||
map_groups__insert(&machine->kmaps, map);
|
map_groups__insert(&machine->kmaps, map);
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user