mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-19 02:34:01 +08:00
Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: perf tools: Add group event scheduling option to perf record/stat MAINTAINERS: Fix list of perf events source files perf tools: Fix build against newer glibc perf tools: Fix error handling of unknown events perf evlist: Fix missing event name init for default event perf list: Fix exit value
This commit is contained in:
commit
8f6544edb2
@ -4971,7 +4971,7 @@ M: Paul Mackerras <paulus@samba.org>
|
||||
M: Ingo Molnar <mingo@elte.hu>
|
||||
M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
|
||||
S: Supported
|
||||
F: kernel/perf_event*.c
|
||||
F: kernel/events/*
|
||||
F: include/linux/perf_event.h
|
||||
F: arch/*/kernel/perf_event*.c
|
||||
F: arch/*/kernel/*/perf_event*.c
|
||||
|
@ -45,7 +45,7 @@ static int freq = 1000;
|
||||
static int output;
|
||||
static int pipe_output = 0;
|
||||
static const char *output_name = NULL;
|
||||
static int group = 0;
|
||||
static bool group = false;
|
||||
static int realtime_prio = 0;
|
||||
static bool nodelay = false;
|
||||
static bool raw_samples = false;
|
||||
@ -753,6 +753,8 @@ const struct option record_options[] = {
|
||||
"child tasks do not inherit counters"),
|
||||
OPT_UINTEGER('F', "freq", &user_freq, "profile at this frequency"),
|
||||
OPT_UINTEGER('m', "mmap-pages", &mmap_pages, "number of mmap data pages"),
|
||||
OPT_BOOLEAN(0, "group", &group,
|
||||
"put the counters into a counter group"),
|
||||
OPT_BOOLEAN('g', "call-graph", &call_graph,
|
||||
"do call-graph (stack chain/backtrace) recording"),
|
||||
OPT_INCR('v', "verbose", &verbose,
|
||||
|
@ -193,6 +193,7 @@ static int big_num_opt = -1;
|
||||
static const char *cpu_list;
|
||||
static const char *csv_sep = NULL;
|
||||
static bool csv_output = false;
|
||||
static bool group = false;
|
||||
|
||||
static volatile int done = 0;
|
||||
|
||||
@ -280,14 +281,14 @@ static int create_perf_stat_counter(struct perf_evsel *evsel)
|
||||
attr->inherit = !no_inherit;
|
||||
|
||||
if (system_wide)
|
||||
return perf_evsel__open_per_cpu(evsel, evsel_list->cpus, false);
|
||||
return perf_evsel__open_per_cpu(evsel, evsel_list->cpus, group);
|
||||
|
||||
if (target_pid == -1 && target_tid == -1) {
|
||||
attr->disabled = 1;
|
||||
attr->enable_on_exec = 1;
|
||||
}
|
||||
|
||||
return perf_evsel__open_per_thread(evsel, evsel_list->threads, false);
|
||||
return perf_evsel__open_per_thread(evsel, evsel_list->threads, group);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1043,6 +1044,8 @@ static const struct option options[] = {
|
||||
"stat events on existing thread id"),
|
||||
OPT_BOOLEAN('a', "all-cpus", &system_wide,
|
||||
"system-wide collection from all CPUs"),
|
||||
OPT_BOOLEAN('g', "group", &group,
|
||||
"put the counters into a counter group"),
|
||||
OPT_BOOLEAN('c', "scale", &scale,
|
||||
"scale/normalize counters"),
|
||||
OPT_INCR('v', "verbose", &verbose,
|
||||
|
@ -85,10 +85,19 @@ int perf_evlist__add_default(struct perf_evlist *evlist)
|
||||
struct perf_evsel *evsel = perf_evsel__new(&attr, 0);
|
||||
|
||||
if (evsel == NULL)
|
||||
return -ENOMEM;
|
||||
goto error;
|
||||
|
||||
/* use strdup() because free(evsel) assumes name is allocated */
|
||||
evsel->name = strdup("cycles");
|
||||
if (!evsel->name)
|
||||
goto error_free;
|
||||
|
||||
perf_evlist__add(evlist, evsel);
|
||||
return 0;
|
||||
error_free:
|
||||
perf_evsel__delete(evsel);
|
||||
error:
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
void perf_evlist__disable(struct perf_evlist *evlist)
|
||||
|
@ -5,7 +5,9 @@
|
||||
#define __always_inline inline
|
||||
#endif
|
||||
#define __user
|
||||
#ifndef __attribute_const__
|
||||
#define __attribute_const__
|
||||
#endif
|
||||
|
||||
#define __used __attribute__((__unused__))
|
||||
|
||||
|
@ -697,7 +697,11 @@ parse_raw_event(const char **strp, struct perf_event_attr *attr)
|
||||
return EVT_FAILED;
|
||||
n = hex2u64(str + 1, &config);
|
||||
if (n > 0) {
|
||||
*strp = str + n + 1;
|
||||
const char *end = str + n + 1;
|
||||
if (*end != '\0' && *end != ',' && *end != ':')
|
||||
return EVT_FAILED;
|
||||
|
||||
*strp = end;
|
||||
attr->type = PERF_TYPE_RAW;
|
||||
attr->config = config;
|
||||
return EVT_HANDLED;
|
||||
@ -1097,6 +1101,4 @@ void print_events(const char *event_glob)
|
||||
printf("\n");
|
||||
|
||||
print_tracepoint_events(NULL, NULL);
|
||||
|
||||
exit(129);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user