|
@@ -61,8 +61,6 @@ static bool call_graph = false;
|
|
static bool inherit_stat = false;
|
|
static bool inherit_stat = false;
|
|
static bool no_samples = false;
|
|
static bool no_samples = false;
|
|
static bool sample_address = false;
|
|
static bool sample_address = false;
|
|
-static bool multiplex = false;
|
|
|
|
-static int multiplex_fd = -1;
|
|
|
|
|
|
|
|
static long samples = 0;
|
|
static long samples = 0;
|
|
static u64 bytes_written = 0;
|
|
static u64 bytes_written = 0;
|
|
@@ -366,27 +364,19 @@ try_again:
|
|
*/
|
|
*/
|
|
if (group && group_fd == -1)
|
|
if (group && group_fd == -1)
|
|
group_fd = fd[nr_cpu][counter][thread_index];
|
|
group_fd = fd[nr_cpu][counter][thread_index];
|
|
- if (multiplex && multiplex_fd == -1)
|
|
|
|
- multiplex_fd = fd[nr_cpu][counter][thread_index];
|
|
|
|
|
|
|
|
- if (multiplex && fd[nr_cpu][counter][thread_index] != multiplex_fd) {
|
|
|
|
-
|
|
|
|
- ret = ioctl(fd[nr_cpu][counter][thread_index], PERF_EVENT_IOC_SET_OUTPUT, multiplex_fd);
|
|
|
|
- assert(ret != -1);
|
|
|
|
- } else {
|
|
|
|
- event_array[nr_poll].fd = fd[nr_cpu][counter][thread_index];
|
|
|
|
- event_array[nr_poll].events = POLLIN;
|
|
|
|
- nr_poll++;
|
|
|
|
-
|
|
|
|
- mmap_array[nr_cpu][counter][thread_index].counter = counter;
|
|
|
|
- mmap_array[nr_cpu][counter][thread_index].prev = 0;
|
|
|
|
- mmap_array[nr_cpu][counter][thread_index].mask = mmap_pages*page_size - 1;
|
|
|
|
- mmap_array[nr_cpu][counter][thread_index].base = mmap(NULL, (mmap_pages+1)*page_size,
|
|
|
|
- PROT_READ|PROT_WRITE, MAP_SHARED, fd[nr_cpu][counter][thread_index], 0);
|
|
|
|
- if (mmap_array[nr_cpu][counter][thread_index].base == MAP_FAILED) {
|
|
|
|
- error("failed to mmap with %d (%s)\n", errno, strerror(errno));
|
|
|
|
- exit(-1);
|
|
|
|
- }
|
|
|
|
|
|
+ event_array[nr_poll].fd = fd[nr_cpu][counter][thread_index];
|
|
|
|
+ event_array[nr_poll].events = POLLIN;
|
|
|
|
+ nr_poll++;
|
|
|
|
+
|
|
|
|
+ mmap_array[nr_cpu][counter][thread_index].counter = counter;
|
|
|
|
+ mmap_array[nr_cpu][counter][thread_index].prev = 0;
|
|
|
|
+ mmap_array[nr_cpu][counter][thread_index].mask = mmap_pages*page_size - 1;
|
|
|
|
+ mmap_array[nr_cpu][counter][thread_index].base = mmap(NULL, (mmap_pages+1)*page_size,
|
|
|
|
+ PROT_READ|PROT_WRITE, MAP_SHARED, fd[nr_cpu][counter][thread_index], 0);
|
|
|
|
+ if (mmap_array[nr_cpu][counter][thread_index].base == MAP_FAILED) {
|
|
|
|
+ error("failed to mmap with %d (%s)\n", errno, strerror(errno));
|
|
|
|
+ exit(-1);
|
|
}
|
|
}
|
|
|
|
|
|
if (filter != NULL) {
|
|
if (filter != NULL) {
|
|
@@ -820,8 +810,6 @@ static const struct option options[] = {
|
|
"Sample addresses"),
|
|
"Sample addresses"),
|
|
OPT_BOOLEAN('n', "no-samples", &no_samples,
|
|
OPT_BOOLEAN('n', "no-samples", &no_samples,
|
|
"don't sample"),
|
|
"don't sample"),
|
|
- OPT_BOOLEAN('M', "multiplex", &multiplex,
|
|
|
|
- "multiplex counter output in a single channel"),
|
|
|
|
OPT_END()
|
|
OPT_END()
|
|
};
|
|
};
|
|
|
|
|