Merge series "Use raw spinlocks in the ls-extirq driver" from Vladimir Oltean <vladim...
[linux-2.6-microblaze.git] / tools / perf / util / auxtrace.c
index 1b4091a..cb19669 100644 (file)
@@ -73,8 +73,8 @@ static int evlist__regroup(struct evlist *evlist, struct evsel *leader, struct e
        grp = false;
        evlist__for_each_entry(evlist, evsel) {
                if (grp) {
-                       if (!(evsel->leader == leader ||
-                            (evsel->leader == evsel &&
+                       if (!(evsel__leader(evsel) == leader ||
+                            (evsel__leader(evsel) == evsel &&
                              evsel->core.nr_members <= 1)))
                                return -EINVAL;
                } else if (evsel == leader) {
@@ -87,8 +87,8 @@ static int evlist__regroup(struct evlist *evlist, struct evsel *leader, struct e
        grp = false;
        evlist__for_each_entry(evlist, evsel) {
                if (grp) {
-                       if (evsel->leader != leader) {
-                               evsel->leader = leader;
+                       if (!evsel__has_leader(evsel, leader)) {
+                               evsel__set_leader(evsel, leader);
                                if (leader->core.nr_members < 1)
                                        leader->core.nr_members = 1;
                                leader->core.nr_members += 1;
@@ -1120,8 +1120,9 @@ int auxtrace_queue_data(struct perf_session *session, bool samples, bool events)
                                         auxtrace_queue_data_cb, &qd);
 }
 
-void *auxtrace_buffer__get_data(struct auxtrace_buffer *buffer, int fd)
+void *auxtrace_buffer__get_data_rw(struct auxtrace_buffer *buffer, int fd, bool rw)
 {
+       int prot = rw ? PROT_READ | PROT_WRITE : PROT_READ;
        size_t adj = buffer->data_offset & (page_size - 1);
        size_t size = buffer->size + adj;
        off_t file_offset = buffer->data_offset - adj;
@@ -1130,7 +1131,7 @@ void *auxtrace_buffer__get_data(struct auxtrace_buffer *buffer, int fd)
        if (buffer->data)
                return buffer->data;
 
-       addr = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, file_offset);
+       addr = mmap(NULL, size, prot, MAP_SHARED, fd, file_offset);
        if (addr == MAP_FAILED)
                return NULL;
 
@@ -1230,11 +1231,11 @@ static void unleader_evsel(struct evlist *evlist, struct evsel *leader)
 
        /* Find new leader for the group */
        evlist__for_each_entry(evlist, evsel) {
-               if (evsel->leader != leader || evsel == leader)
+               if (!evsel__has_leader(evsel, leader) || evsel == leader)
                        continue;
                if (!new_leader)
                        new_leader = evsel;
-               evsel->leader = new_leader;
+               evsel__set_leader(evsel, new_leader);
        }
 
        /* Update group information */
@@ -1404,10 +1405,9 @@ static int get_flags(const char **ptr, unsigned int *plus_flags, unsigned int *m
  * about the options parsed here, which is introduced after this cset,
  * when support in 'perf script' for these options is introduced.
  */
-int itrace_parse_synth_opts(const struct option *opt, const char *str,
-                           int unset)
+int itrace_do_parse_synth_opts(struct itrace_synth_opts *synth_opts,
+                              const char *str, int unset)
 {
-       struct itrace_synth_opts *synth_opts = opt->value;
        const char *p;
        char *endptr;
        bool period_type_set = false;
@@ -1569,6 +1569,9 @@ int itrace_parse_synth_opts(const struct option *opt, const char *str,
                case 'q':
                        synth_opts->quick += 1;
                        break;
+               case 'Z':
+                       synth_opts->timeless_decoding = true;
+                       break;
                case ' ':
                case ',':
                        break;
@@ -1592,6 +1595,11 @@ out_err:
        return -EINVAL;
 }
 
+int itrace_parse_synth_opts(const struct option *opt, const char *str, int unset)
+{
+       return itrace_do_parse_synth_opts(opt->value, str, unset);
+}
+
 static const char * const auxtrace_error_type_name[] = {
        [PERF_AUXTRACE_ERROR_ITRACE] = "instruction trace",
 };