Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 304906
b: refs/heads/master
c: 4bd0f2d
h: refs/heads/master
v: v3
  • Loading branch information
Namhyung Kim authored and Arnaldo Carvalho de Melo committed May 2, 2012
1 parent 3269faf commit de35c1a
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 30 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: fe9d18a71d2018f8021fd2bd2aaf5137954ef839
refs/heads/master: 4bd0f2d2c0cf14de9c84c2fe689120c6b0f667c8
9 changes: 3 additions & 6 deletions trunk/tools/perf/builtin-record.c
Original file line number Diff line number Diff line change
Expand Up @@ -884,16 +884,13 @@ int cmd_record(int argc, const char **argv, const char *prefix __used)
goto out_symbol_exit;
}

rec->opts.target.uid = parse_target_uid(rec->opts.target.uid_str,
rec->opts.target.tid,
rec->opts.target.pid);
perf_target__validate(&rec->opts.target);

rec->opts.target.uid = parse_target_uid(rec->opts.target.uid_str);
if (rec->opts.target.uid_str != NULL &&
rec->opts.target.uid == UINT_MAX - 1)
goto out_free_fd;

if (rec->opts.target.pid)
rec->opts.target.tid = rec->opts.target.pid;

if (perf_evlist__create_maps(evsel_list, rec->opts.target.pid,
rec->opts.target.tid, rec->opts.target.uid,
rec->opts.target.cpu_list) < 0)
Expand Down
3 changes: 1 addition & 2 deletions trunk/tools/perf/builtin-stat.c
Original file line number Diff line number Diff line change
Expand Up @@ -1203,8 +1203,7 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used)
if (add_default_attributes())
goto out;

if (target.pid)
target.tid = target.pid;
perf_target__validate(&target);

evsel_list->threads = thread_map__new_str(target.pid,
target.tid, UINT_MAX);
Expand Down
15 changes: 3 additions & 12 deletions trunk/tools/perf/builtin-top.c
Original file line number Diff line number Diff line change
Expand Up @@ -1252,21 +1252,12 @@ int cmd_top(int argc, const char **argv, const char *prefix __used)

setup_browser(false);

top.target.uid = parse_target_uid(top.target.uid_str, top.target.tid,
top.target.pid);
perf_target__validate(&top.target);

top.target.uid = parse_target_uid(top.target.uid_str);
if (top.target.uid_str != NULL && top.target.uid == UINT_MAX - 1)
goto out_delete_evlist;

/* CPU and PID are mutually exclusive */
if (top.target.tid && top.target.cpu_list) {
printf("WARNING: PID switch overriding CPU\n");
sleep(1);
top.target.cpu_list = NULL;
}

if (top.target.pid)
top.target.tid = top.target.pid;

if (perf_evlist__create_maps(top.evlist, top.target.pid,
top.target.tid, top.target.uid,
top.target.cpu_list) < 0)
Expand Down
29 changes: 21 additions & 8 deletions trunk/tools/perf/util/usage.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,21 +83,14 @@ void warning(const char *warn, ...)
va_end(params);
}

uid_t parse_target_uid(const char *str, const char *tid, const char *pid)
uid_t parse_target_uid(const char *str)
{
struct passwd pwd, *result;
char buf[1024];

if (str == NULL)
return UINT_MAX;

/* UID and PID are mutually exclusive */
if (tid || pid) {
ui__warning("PID/TID switch overriding UID\n");
sleep(1);
return UINT_MAX;
}

getpwnam_r(str, &pwd, buf, sizeof(buf), &result);

if (result == NULL) {
Expand All @@ -120,3 +113,23 @@ uid_t parse_target_uid(const char *str, const char *tid, const char *pid)

return result->pw_uid;
}

void perf_target__validate(struct perf_target *target)
{
if (target->pid)
target->tid = target->pid;

/* CPU and PID are mutually exclusive */
if (target->tid && target->cpu_list) {
ui__warning("WARNING: PID switch overriding CPU\n");
sleep(1);
target->cpu_list = NULL;
}

/* UID and PID are mutually exclusive */
if (target->tid && target->uid_str) {
ui__warning("PID/TID switch overriding UID\n");
sleep(1);
target->uid_str = NULL;
}
}
4 changes: 3 additions & 1 deletion trunk/tools/perf/util/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -246,10 +246,12 @@ unsigned long convert_unit(unsigned long value, char *unit);
int readn(int fd, void *buf, size_t size);

struct perf_event_attr;
struct perf_target;

void event_attr_init(struct perf_event_attr *attr);

uid_t parse_target_uid(const char *str, const char *tid, const char *pid);
uid_t parse_target_uid(const char *str);
void perf_target__validate(struct perf_target *target);

#define _STR(x) #x
#define STR(x) _STR(x)
Expand Down

0 comments on commit de35c1a

Please sign in to comment.