mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 13:14:02 +02:00
perf tools: Add global list of opened dso objects
Adding global list of opened dso objects, so we can track them and use the list for caching dso data file descriptors. Acked-by: Namhyung Kim <namhyung@kernel.org> Cc: Arnaldo Carvalho de Melo <acme@kernel.org> Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jean Pihet <jean.pihet@linaro.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1401892622-30848-5-git-send-email-jolsa@kernel.org Signed-off-by: Jiri Olsa <jolsa@kernel.org>
This commit is contained in:
parent
53fa8eaa09
commit
eba5102d2f
|
|
@ -136,7 +136,22 @@ int dso__read_binary_type_filename(const struct dso *dso,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int open_dso(struct dso *dso, struct machine *machine)
|
/*
|
||||||
|
* Global list of open DSOs.
|
||||||
|
*/
|
||||||
|
static LIST_HEAD(dso__data_open);
|
||||||
|
|
||||||
|
static void dso__list_add(struct dso *dso)
|
||||||
|
{
|
||||||
|
list_add_tail(&dso->data.open_entry, &dso__data_open);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dso__list_del(struct dso *dso)
|
||||||
|
{
|
||||||
|
list_del(&dso->data.open_entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __open_dso(struct dso *dso, struct machine *machine)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
char *root_dir = (char *)"";
|
char *root_dir = (char *)"";
|
||||||
|
|
@ -159,14 +174,35 @@ static int open_dso(struct dso *dso, struct machine *machine)
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dso__data_close(struct dso *dso)
|
static int open_dso(struct dso *dso, struct machine *machine)
|
||||||
|
{
|
||||||
|
int fd = __open_dso(dso, machine);
|
||||||
|
|
||||||
|
if (fd > 0)
|
||||||
|
dso__list_add(dso);
|
||||||
|
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void close_data_fd(struct dso *dso)
|
||||||
{
|
{
|
||||||
if (dso->data.fd >= 0) {
|
if (dso->data.fd >= 0) {
|
||||||
close(dso->data.fd);
|
close(dso->data.fd);
|
||||||
dso->data.fd = -1;
|
dso->data.fd = -1;
|
||||||
|
dso__list_del(dso);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void close_dso(struct dso *dso)
|
||||||
|
{
|
||||||
|
close_data_fd(dso);
|
||||||
|
}
|
||||||
|
|
||||||
|
void dso__data_close(struct dso *dso)
|
||||||
|
{
|
||||||
|
close_dso(dso);
|
||||||
|
}
|
||||||
|
|
||||||
int dso__data_fd(struct dso *dso, struct machine *machine)
|
int dso__data_fd(struct dso *dso, struct machine *machine)
|
||||||
{
|
{
|
||||||
enum dso_binary_type binary_type_data[] = {
|
enum dso_binary_type binary_type_data[] = {
|
||||||
|
|
@ -499,6 +535,7 @@ struct dso *dso__new(const char *name)
|
||||||
dso->kernel = DSO_TYPE_USER;
|
dso->kernel = DSO_TYPE_USER;
|
||||||
dso->needs_swap = DSO_SWAP__UNSET;
|
dso->needs_swap = DSO_SWAP__UNSET;
|
||||||
INIT_LIST_HEAD(&dso->node);
|
INIT_LIST_HEAD(&dso->node);
|
||||||
|
INIT_LIST_HEAD(&dso->data.open_entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
return dso;
|
return dso;
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@ struct dso {
|
||||||
struct {
|
struct {
|
||||||
struct rb_root cache;
|
struct rb_root cache;
|
||||||
int fd;
|
int fd;
|
||||||
|
struct list_head open_entry;
|
||||||
} data;
|
} data;
|
||||||
|
|
||||||
char name[0];
|
char name[0];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user