]> Git Repo - linux.git/commitdiff
Merge remote-tracking branch 'torvalds/master' into perf/core
authorArnaldo Carvalho de Melo <[email protected]>
Mon, 14 Mar 2022 22:15:16 +0000 (19:15 -0300)
committerArnaldo Carvalho de Melo <[email protected]>
Mon, 14 Mar 2022 22:15:16 +0000 (19:15 -0300)
To pick up fixes that went thru perf/urgent.

Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
1  2 
tools/perf/builtin-script.c
tools/perf/util/data.c

index 5e4a262a6825568406a3ed4f529cf8a27b99270a,fa478ddcd18ae03dae3f27998a680fab9a2b2ca3..88c52d49852c308186df81ab80e4dceedffa9780
@@@ -463,7 -463,7 +463,7 @@@ static int evsel__check_attr(struct evs
                return -EINVAL;
  
        if (PRINT_FIELD(WEIGHT) &&
-           evsel__check_stype(evsel, PERF_SAMPLE_WEIGHT_TYPE, "WEIGHT", PERF_OUTPUT_WEIGHT))
+           evsel__do_check_stype(evsel, PERF_SAMPLE_WEIGHT_TYPE, "WEIGHT", PERF_OUTPUT_WEIGHT, allow_user_set))
                return -EINVAL;
  
        if (PRINT_FIELD(SYM) &&
@@@ -857,16 -857,6 +857,16 @@@ mispred_str(struct branch_entry *br
        return br->flags.predicted ? 'P' : 'M';
  }
  
 +static int print_bstack_flags(FILE *fp, struct branch_entry *br)
 +{
 +      return fprintf(fp, "/%c/%c/%c/%d/%s ",
 +                     mispred_str(br),
 +                     br->flags.in_tx ? 'X' : '-',
 +                     br->flags.abort ? 'A' : '-',
 +                     br->flags.cycles,
 +                     br->flags.type ? branch_type_name(br->flags.type) : "-");
 +}
 +
  static int perf_sample__fprintf_brstack(struct perf_sample *sample,
                                        struct thread *thread,
                                        struct perf_event_attr *attr, FILE *fp)
                        printed += fprintf(fp, ")");
                }
  
 -              printed += fprintf(fp, "/%c/%c/%c/%d ",
 -                      mispred_str(entries + i),
 -                      entries[i].flags.in_tx ? 'X' : '-',
 -                      entries[i].flags.abort ? 'A' : '-',
 -                      entries[i].flags.cycles);
 +              printed += print_bstack_flags(fp, entries + i);
        }
  
        return printed;
@@@ -947,7 -941,11 +947,7 @@@ static int perf_sample__fprintf_brstack
                        printed += map__fprintf_dsoname(alt.map, fp);
                        printed += fprintf(fp, ")");
                }
 -              printed += fprintf(fp, "/%c/%c/%c/%d ",
 -                      mispred_str(entries + i),
 -                      entries[i].flags.in_tx ? 'X' : '-',
 -                      entries[i].flags.abort ? 'A' : '-',
 -                      entries[i].flags.cycles);
 +              printed += print_bstack_flags(fp, entries + i);
        }
  
        return printed;
@@@ -993,7 -991,11 +993,7 @@@ static int perf_sample__fprintf_brstack
                        printed += map__fprintf_dsoname(alt.map, fp);
                        printed += fprintf(fp, ")");
                }
 -              printed += fprintf(fp, "/%c/%c/%c/%d ",
 -                      mispred_str(entries + i),
 -                      entries[i].flags.in_tx ? 'X' : '-',
 -                      entries[i].flags.abort ? 'A' : '-',
 -                      entries[i].flags.cycles);
 +              printed += print_bstack_flags(fp, entries + i);
        }
  
        return printed;
@@@ -1577,34 -1579,26 +1577,34 @@@ static const char *sample_flags_to_name
  
  int perf_sample__sprintf_flags(u32 flags, char *str, size_t sz)
  {
 +      u32 xf = PERF_IP_FLAG_IN_TX | PERF_IP_FLAG_INTR_DISABLE |
 +               PERF_IP_FLAG_INTR_TOGGLE;
        const char *chars = PERF_IP_FLAG_CHARS;
        const size_t n = strlen(PERF_IP_FLAG_CHARS);
 -      bool in_tx = flags & PERF_IP_FLAG_IN_TX;
        const char *name = NULL;
        size_t i, pos = 0;
 +      char xs[16] = {0};
 +
 +      if (flags & xf)
 +              snprintf(xs, sizeof(xs), "(%s%s%s)",
 +                       flags & PERF_IP_FLAG_IN_TX ? "x" : "",
 +                       flags & PERF_IP_FLAG_INTR_DISABLE ? "D" : "",
 +                       flags & PERF_IP_FLAG_INTR_TOGGLE ? "t" : "");
  
 -      name = sample_flags_to_name(flags & ~PERF_IP_FLAG_IN_TX);
 +      name = sample_flags_to_name(flags & ~xf);
        if (name)
 -              return snprintf(str, sz, "%-15s%4s", name, in_tx ? "(x)" : "");
 +              return snprintf(str, sz, "%-15s%6s", name, xs);
  
        if (flags & PERF_IP_FLAG_TRACE_BEGIN) {
 -              name = sample_flags_to_name(flags & ~(PERF_IP_FLAG_IN_TX | PERF_IP_FLAG_TRACE_BEGIN));
 +              name = sample_flags_to_name(flags & ~(xf | PERF_IP_FLAG_TRACE_BEGIN));
                if (name)
 -                      return snprintf(str, sz, "tr strt %-7s%4s", name, in_tx ? "(x)" : "");
 +                      return snprintf(str, sz, "tr strt %-7s%6s", name, xs);
        }
  
        if (flags & PERF_IP_FLAG_TRACE_END) {
 -              name = sample_flags_to_name(flags & ~(PERF_IP_FLAG_IN_TX | PERF_IP_FLAG_TRACE_END));
 +              name = sample_flags_to_name(flags & ~(xf | PERF_IP_FLAG_TRACE_END));
                if (name)
 -                      return snprintf(str, sz, "tr end  %-7s%4s", name, in_tx ? "(x)" : "");
 +                      return snprintf(str, sz, "tr end  %-7s%6s", name, xs);
        }
  
        for (i = 0; i < n; i++, flags >>= 1) {
@@@ -1626,7 -1620,7 +1626,7 @@@ static int perf_sample__fprintf_flags(u
        char str[SAMPLE_FLAGS_BUF_SIZE];
  
        perf_sample__sprintf_flags(flags, str, sizeof(str));
 -      return fprintf(fp, "  %-19s ", str);
 +      return fprintf(fp, "  %-21s ", str);
  }
  
  struct printer_data {
@@@ -1817,56 -1811,6 +1817,56 @@@ static int perf_sample__fprintf_synth_p
        return len + perf_sample__fprintf_pt_spacing(len, fp);
  }
  
 +/* Intel PT Event Trace */
 +static int perf_sample__fprintf_synth_evt(struct perf_sample *sample, FILE *fp)
 +{
 +      struct perf_synth_intel_evt *data = perf_sample__synth_ptr(sample);
 +      const char *cfe[32] = {NULL, "INTR", "IRET", "SMI", "RSM", "SIPI",
 +                             "INIT", "VMENTRY", "VMEXIT", "VMEXIT_INTR",
 +                             "SHUTDOWN"};
 +      const char *evd[64] = {"PFA", "VMXQ", "VMXR"};
 +      const char *s;
 +      int len, i;
 +
 +      if (perf_sample__bad_synth_size(sample, *data))
 +              return 0;
 +
 +      s = cfe[data->type];
 +      if (s) {
 +              len = fprintf(fp, " cfe: %s IP: %d vector: %u",
 +                            s, data->ip, data->vector);
 +      } else {
 +              len = fprintf(fp, " cfe: %u IP: %d vector: %u",
 +                            data->type, data->ip, data->vector);
 +      }
 +      for (i = 0; i < data->evd_cnt; i++) {
 +              unsigned int et = data->evd[i].evd_type & 0x3f;
 +
 +              s = evd[et];
 +              if (s) {
 +                      len += fprintf(fp, " %s: %#" PRIx64,
 +                                     s, data->evd[i].payload);
 +              } else {
 +                      len += fprintf(fp, " EVD_%u: %#" PRIx64,
 +                                     et, data->evd[i].payload);
 +              }
 +      }
 +      return len + perf_sample__fprintf_pt_spacing(len, fp);
 +}
 +
 +static int perf_sample__fprintf_synth_iflag_chg(struct perf_sample *sample, FILE *fp)
 +{
 +      struct perf_synth_intel_iflag_chg *data = perf_sample__synth_ptr(sample);
 +      int len;
 +
 +      if (perf_sample__bad_synth_size(sample, *data))
 +              return 0;
 +
 +      len = fprintf(fp, " IFLAG: %d->%d %s branch", !data->iflag, data->iflag,
 +                    data->via_branch ? "via" : "non");
 +      return len + perf_sample__fprintf_pt_spacing(len, fp);
 +}
 +
  static int perf_sample__fprintf_synth(struct perf_sample *sample,
                                      struct evsel *evsel, FILE *fp)
  {
                return perf_sample__fprintf_synth_cbr(sample, fp);
        case PERF_SYNTH_INTEL_PSB:
                return perf_sample__fprintf_synth_psb(sample, fp);
 +      case PERF_SYNTH_INTEL_EVT:
 +              return perf_sample__fprintf_synth_evt(sample, fp);
 +      case PERF_SYNTH_INTEL_IFLAG_CHG:
 +              return perf_sample__fprintf_synth_iflag_chg(sample, fp);
        default:
                break;
        }
diff --combined tools/perf/util/data.c
index dc5d82ea1c30ebef65c408022a23cd46aa5e63bb,15a4547d608eca8292c615f12a8df970239bf956..a5ace2bbc28d2eb2d69f93a474830360acaf5210
@@@ -44,28 -44,23 +44,27 @@@ int perf_data__create_dir(struct perf_d
        if (!files)
                return -ENOMEM;
  
-       data->dir.version = PERF_DIR_VERSION;
-       data->dir.files   = files;
-       data->dir.nr      = nr;
        for (i = 0; i < nr; i++) {
                struct perf_data_file *file = &files[i];
  
                ret = asprintf(&file->path, "%s/data.%d", data->path, i);
 -              if (ret < 0)
 +              if (ret < 0) {
 +                      ret = -ENOMEM;
                        goto out_err;
 +              }
  
                ret = open(file->path, O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR);
 -              if (ret < 0)
 +              if (ret < 0) {
 +                      ret = -errno;
                        goto out_err;
 +              }
  
                file->fd = ret;
        }
  
+       data->dir.version = PERF_DIR_VERSION;
+       data->dir.files   = files;
+       data->dir.nr      = nr;
        return 0;
  
  out_err:
This page took 0.108529 seconds and 4 git commands to generate.