Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 177423
b: refs/heads/master
c: ec91336
h: refs/heads/master
i:
  177421: 243f8b4
  177419: d5eaf1a
  177415: f1ed561
  177407: b509307
v: v3
  • Loading branch information
Arnaldo Carvalho de Melo authored and Ingo Molnar committed Dec 14, 2009
1 parent eca6f0c commit 3826f34
Show file tree
Hide file tree
Showing 11 changed files with 36 additions and 38 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 13df45ca1c9a430d5f53862854070fcc324e015c
refs/heads/master: ec913369733923dbfd6bdff5953a918107059701
3 changes: 1 addition & 2 deletions trunk/tools/perf/builtin-annotate.c
Original file line number Diff line number Diff line change
Expand Up @@ -469,8 +469,7 @@ static int __cmd_annotate(void)
if (session == NULL)
return -ENOMEM;

ret = perf_session__process_events(session, &event_ops, 0,
&event__cwdlen, &event__cwd);
ret = perf_session__process_events(session, &event_ops);
if (ret)
goto out_delete;

Expand Down
3 changes: 1 addition & 2 deletions trunk/tools/perf/builtin-kmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -372,8 +372,7 @@ static int read_events(void)
if (session == NULL)
return -ENOMEM;

err = perf_session__process_events(session, &event_ops, 0,
&event__cwdlen, &event__cwd);
err = perf_session__process_events(session, &event_ops);
perf_session__delete(session);
return err;
}
Expand Down
6 changes: 2 additions & 4 deletions trunk/tools/perf/builtin-report.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ static struct strlist *dso_list, *comm_list, *sym_list;

static int force;

static int full_paths;
static int show_nr_samples;

static int show_threads;
Expand Down Expand Up @@ -771,8 +770,7 @@ static int __cmd_report(void)
if (show_threads)
perf_read_values_init(&show_threads_values);

ret = perf_session__process_events(session, &event_ops, full_paths,
&event__cwdlen, &event__cwd);
ret = perf_session__process_events(session, &event_ops);
if (ret)
goto out_delete;

Expand Down Expand Up @@ -877,7 +875,7 @@ static const struct option options[] = {
"pretty printing style key: normal raw"),
OPT_STRING('s', "sort", &sort_order, "key[,key2...]",
"sort by key(s): pid, comm, dso, symbol, parent"),
OPT_BOOLEAN('P', "full-paths", &full_paths,
OPT_BOOLEAN('P', "full-paths", &event_ops.full_paths,
"Don't shorten the pathnames taking into account the cwd"),
OPT_STRING('p', "parent", &parent_pattern, "regex",
"regex filter to identify parent, see: '--sort parent'"),
Expand Down
3 changes: 1 addition & 2 deletions trunk/tools/perf/builtin-sched.c
Original file line number Diff line number Diff line change
Expand Up @@ -1670,8 +1670,7 @@ static int read_events(void)
if (session == NULL)
return -ENOMEM;

err = perf_session__process_events(session, &event_ops, 0,
&event__cwdlen, &event__cwd);
err = perf_session__process_events(session, &event_ops);
perf_session__delete(session);
return err;
}
Expand Down
3 changes: 1 addition & 2 deletions trunk/tools/perf/builtin-timechart.c
Original file line number Diff line number Diff line change
Expand Up @@ -1062,8 +1062,7 @@ static int __cmd_timechart(void)
if (session == NULL)
return -ENOMEM;

ret = perf_session__process_events(session, &event_ops, 0,
&event__cwdlen, &event__cwd);
ret = perf_session__process_events(session, &event_ops);
if (ret)
goto out_delete;

Expand Down
3 changes: 1 addition & 2 deletions trunk/tools/perf/builtin-trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,7 @@ static struct perf_event_ops event_ops = {

static int __cmd_trace(struct perf_session *session)
{
return perf_session__process_events(session, &event_ops, 0,
&event__cwdlen, &event__cwd);
return perf_session__process_events(session, &event_ops);
}

struct script_spec {
Expand Down
32 changes: 16 additions & 16 deletions trunk/tools/perf/util/data_map.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@
#include "thread.h"
#include "session.h"

static unsigned long mmap_window = 32;
static char __cwd[PATH_MAX];

static int process_event_stub(event_t *event __used,
struct perf_session *session __used)
{
Expand Down Expand Up @@ -141,8 +138,7 @@ static struct thread *perf_session__register_idle_thread(struct perf_session *se
}

int perf_session__process_events(struct perf_session *self,
struct perf_event_ops *ops,
int full_paths, int *cwdlen, char **cwd)
struct perf_event_ops *ops)
{
int err;
unsigned long head, shift;
Expand All @@ -168,25 +164,29 @@ int perf_session__process_events(struct perf_session *self,
ops->sample_type_check(sample_type) < 0)
goto out_err;

if (!full_paths) {
if (getcwd(__cwd, sizeof(__cwd)) == NULL) {
pr_err("failed to get the current directory\n");
if (!ops->full_paths) {
char bf[PATH_MAX];

if (getcwd(bf, sizeof(bf)) == NULL) {
err = -errno;
out_getcwd_err:
pr_err("failed to get the current directory\n");
goto out_err;
}
*cwd = __cwd;
*cwdlen = strlen(*cwd);
} else {
*cwd = NULL;
*cwdlen = 0;
self->cwd = strdup(bf);
if (self->cwd == NULL) {
err = -ENOMEM;
goto out_getcwd_err;
}
self->cwdlen = strlen(self->cwd);
}

shift = page_size * (head / page_size);
offset += shift;
head -= shift;

remap:
buf = mmap(NULL, page_size * mmap_window, PROT_READ,
buf = mmap(NULL, page_size * self->mmap_window, PROT_READ,
MAP_SHARED, self->fd, offset);
if (buf == MAP_FAILED) {
pr_err("failed to mmap file\n");
Expand All @@ -201,12 +201,12 @@ int perf_session__process_events(struct perf_session *self,
if (!size)
size = 8;

if (head + event->header.size >= page_size * mmap_window) {
if (head + event->header.size >= page_size * self->mmap_window) {
int munmap_ret;

shift = page_size * (head / page_size);

munmap_ret = munmap(buf, page_size * mmap_window);
munmap_ret = munmap(buf, page_size * self->mmap_window);
assert(munmap_ret == 0);

offset += shift;
Expand Down
8 changes: 3 additions & 5 deletions trunk/tools/perf/util/event.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include <linux/types.h>
#include "event.h"
#include "debug.h"
#include "session.h"
#include "string.h"
#include "thread.h"

Expand Down Expand Up @@ -186,9 +187,6 @@ void event__synthesize_threads(int (*process)(event_t *event,
closedir(proc);
}

char *event__cwd;
int event__cwdlen;

struct events_stats event__stats;

int event__process_comm(event_t *self, struct perf_session *session __used)
Expand All @@ -212,11 +210,11 @@ int event__process_lost(event_t *self, struct perf_session *session __used)
return 0;
}

int event__process_mmap(event_t *self, struct perf_session *session __used)
int event__process_mmap(event_t *self, struct perf_session *session)
{
struct thread *thread = threads__findnew(self->mmap.pid);
struct map *map = map__new(&self->mmap, MAP__FUNCTION,
event__cwd, event__cwdlen);
session->cwd, session->cwdlen);

dump_printf(" %d/%d: [%p(%p) @ %p]: %s\n",
self->mmap.pid, self->mmap.tid,
Expand Down
4 changes: 4 additions & 0 deletions trunk/tools/perf/util/session.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ struct perf_session *perf_session__new(const char *filename, int mode,
goto out_delete;

memcpy(self->filename, filename, len);
self->mmap_window = 32;
self->cwd = NULL;
self->cwdlen = 0;

if (mode == O_RDONLY && perf_session__open(self, force) < 0) {
perf_session__delete(self);
Expand All @@ -77,5 +80,6 @@ void perf_session__delete(struct perf_session *self)
{
perf_header__exit(&self->header);
close(self->fd);
free(self->cwd);
free(self);
}
7 changes: 5 additions & 2 deletions trunk/tools/perf/util/session.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
struct perf_session {
struct perf_header header;
unsigned long size;
unsigned long mmap_window;
int fd;
int cwdlen;
char *cwd;
char filename[0];
};

Expand All @@ -25,15 +28,15 @@ struct perf_event_ops {
event_op process_unthrottle_event;
int (*sample_type_check)(u64 sample_type);
unsigned long total_unknown;
bool full_paths;
};

struct perf_session *perf_session__new(const char *filename, int mode,
bool force);
void perf_session__delete(struct perf_session *self);

int perf_session__process_events(struct perf_session *self,
struct perf_event_ops *event_ops,
int full_paths, int *cwdlen, char **cwd);
struct perf_event_ops *event_ops);

int perf_header__read_build_ids(int input, u64 offset, u64 file_size);

Expand Down

0 comments on commit 3826f34

Please sign in to comment.